【问题标题】:Stop floating divs from wrapping停止浮动 div 包装
【发布时间】:2011-08-02 17:57:24
【问题描述】:

如果浏览器太窄而无法容纳它们,我希望有一排不换行的 div(单元格)。

我已经搜索了 Stack,但对于我认为应该是一个简单的 css 问题的问题找不到有效的答案。

单元格具有指定的宽度。但是我不想指定行的宽度,宽度应该自动为其子单元格的宽度。

如果视口太窄而无法容纳行,那么 div 应该会溢出滚动条。

请提供您的答案作为工作代码 sn-p,因为我已经尝试了很多我在其他地方看到的解决方案(例如指定宽度:100%,但它们似乎不起作用)。

我正在寻找仅 HTML/CSS 的解决方案,没有 JavaScript。

.row {
  float: left;
  border: 1px solid yellow;
  width: 100%;
  overflow: auto;
}
.cell {
  float: left;
  border: 1px solid red;
  width: 200px;
  height: 100px;
}
<div class="row">
  <div class="cell">a</div>
  <div class="cell">b</div>
  <div class="cell">c</div>
</div>

目前我实际上正在将行的宽度硬编码为一个非常大的数字。

【问题讨论】:

  • 以下答案之一对您有用吗?我对他们中的任何一个都没有任何成功。
  • 我刚刚尝试了所有答案,但没有一个对我有用。问题是我需要将两个浮动的左侧 div 居中,并防止在调整窗口大小后将右侧的 div 推到左侧。
  • @Nicholas 我认为我的示例正是您正在寻找的,我今天遇到了同样的问题。下拉菜单溢出,但第一层不换行。

标签: html css-float word-wrap


【解决方案1】:

您想在行上定义min-width,以便在重新调整浏览器大小时它不会低于该行并换行。

【讨论】:

  • 即使使用浮动也可以。我认为这才是真正的答案。
  • 同意@Danon - 这行得通,而内联块引入了垂直对齐问题。
  • 取决于您的需求。这确实会在调整页面大小时阻止浮动 div 换行,但提问者表示“我不想指定行的宽度,宽度应该自动为其子单元格的宽度”。手动宽度指定需要一些重复的工作,因为您需要计算行的总宽度。更糟糕的是,如果您的单元格是可变宽度的(例如,因为它们的大小为其中的一行文本),那么计算总数可能是不切实际或不可能的。
  • -1;这违背了 OP 在他的问题中具体说明的内容,即不必指定宽度。 +1 对卡尔文的上述评论。
【解决方案2】:

CSS 属性display: inline-block 旨在满足这一需求。你可以在这里阅读一下:http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/

以下是其使用示例。关键元素是row 元素具有white-space: nowrapcell 元素具有display: inline-block。这个例子应该适用于大多数主流浏览器;此处提供了兼容性表:http://caniuse.com/#feat=inline-block

<html>
<body>
<style>

.row {
    float:left;
    border: 1px solid yellow;
    width: 100%;
    overflow: auto;
    white-space: nowrap;
}

.cell {
    display: inline-block;
    border: 1px solid red;
    width: 200px;
    height: 100px;
}
</style>

<div class="row">
    <div class="cell">a</div>
    <div class="cell">b</div>
    <div class="cell">c</div>
</div>


</body>
</html>

【讨论】:

  • 在 HTML 顶部添加 &lt;!DOCTYPE html&gt;&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt; 以使 IE 不默认为怪癖模式。
  • 注意:我将单元格类型的 div 设置为 float:left,这迫使计算的样式为块,而不是内联块。花了一段时间才弄清楚,所以认为最好分享一下。
  • 这不适用于最后一个单元格为float: right,是吗?
  • 这并不是一个真正的示例,说明如何防止 floated div 被包裹——你只是解除了单元格的浮动。我有一个左右浮动的布局,所以我不能用浮动来解决包装问题。
  • 哈哈,很公平。这是一个迂腐的区别,但你是对的。我没有解决“从包装中停止浮动 div”,我解决了提问者的 real 问题“我如何使我的布局工作”。回答前者:我有理由确定没有办法阻止浮动 div 包装。就像提问者一样,您需要找到一种不同的方式来对您所描述的布局进行编码。
【解决方案3】:

我有一个类似的问题,有界区域由 float:left 块中的图像和非浮动文本块组成。该区域具有流体宽度。根据设计,文本将沿着图像的右侧包裹。问题是,文本以

标记开头,其第一个单词是“From”这个小单词。当我将窗口调整为更小的宽度时,非浮动文本将在一定的宽度范围内仅在换行区域的顶部留下单词“From”,其余文本已被挤压在浮动下方堵塞。我的解决方案是让标签的第一个单词变大,用这段代码替换它后面的空格 x 。效果是使第一个单词,而不是“From”,“FromxNextWord”,其中“x”不可见,看起来像一个空格。现在我的第一个单词足够大,不会被文本块的其余部分抛弃。

【讨论】:

    【解决方案4】:

    我设法做到这一点的唯一方法是在父元素上使用overflow: visible;width: 20000px;。我知道 CSS 级别 1 没有办法做到这一点,我拒绝认为我必须全力以赴地使用 CSS 级别 3。下面的示例有 18 个菜单,超出了我的 1920x1200 分辨率 LCD ,如果您的屏幕较大,只需复制第一层菜单元素或调整浏览器大小。或者,如果浏览器兼容性水平稍低,您可以使用 CSS3 媒体查询。

    这是一个完整的复制/粘贴示例演示...

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <title>XHTML5 Menu Demonstration</title>
    <style type="text/css">
    * {border: 0; box-sizing: content-box; color: #f0f; font-size: 10px; margin: 0; padding: 0; transition-property: background-color, background-image, border, box-shadow, color, float, opacity, text-align, text-shadow; transition-duration: 0.5s; white-space: nowrap;}
    a:link {color: #79b; text-decoration: none;}
    a:visited {color: #579;}
    a:focus, a:hover {color: #fff; text-decoration: underline;}
    body {background-color: #444; overflow-x: hidden;}
    body > header {background-color: #000; height: 64px; left: 0; position: absolute; right: 0; z-index: 2;}
    body > header > nav {height: 32px; margin-left: 16px;}
    body > header > nav a {font-size: 24px;}
    main {border-color: transparent; border-style: solid; border-width: 64px 0 0; bottom: 0px; left: 0; overflow-x: hidden !important; overflow-y: auto; position: absolute; right: 0; top: 0; z-index: 1;}
    main > * > * {background-color: #000;}
    main > section {float: left; margin-top: 16px; width: 100%;}
    nav[id='menu'] {overflow: visible; width: 20000px;}
    nav[id='menu'] > ul {height: 32px;}
    nav[id='menu'] > ul > li {float: left; width: 140px;}
    nav[id='menu'] > ul > li > ul {background-color: rgba(0, 0, 0, 0.8); display: none; margin-left: -50px; width: 240px;}
    nav[id='menu'] a {display: block; height: 32px; line-height: 32px; text-align: center; white-space: nowrap;}
    nav[id='menu'] > ul {float: left; list-style:none;}
    nav[id='menu'] ul li:hover ul {display: block;}
    p, p *, span, span * {color: #fff;}
    p {font-size: 20px; margin: 0 14px 0 14px; padding-bottom: 14px; text-indent: 1.5em;}
    .hidden {display: none;}
    .width_100 {width: 100%;}
    </style>
    </head>
    
    <body>
    
    <main>
    <section style="height: 2000px;"><p>Hover the first menu at the top-left.</p></section>
    </main>
    
    <header>
    <nav id="location"><a href="">Example</a><span> - </span><a href="">Blog</a><span> - </span><a href="">Browser Market Share</a></nav>
    <nav id="menu">
    <ul>
    <li><a href="" tabindex="2">Menu 1 - Hover</a>
    <ul>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    <li><a href="" tabindex="2">Menu 1 B</a></li>
    </ul>
    </li>
    <li><a href="" tabindex="2">Menu 2</a></li>
    <li><a href="" tabindex="2">Menu 3</a></li>
    <li><a href="" tabindex="2">Menu 4</a></li>
    <li><a href="" tabindex="2">Menu 5</a></li>
    <li><a href="" tabindex="2">Menu 6</a></li>
    <li><a href="" tabindex="2">Menu 7</a></li>
    <li><a href="" tabindex="2">Menu 8</a></li>
    <li><a href="" tabindex="2">Menu 9</a></li>
    <li><a href="" tabindex="2">Menu 10</a></li>
    <li><a href="" tabindex="2">Menu 11</a></li>
    <li><a href="" tabindex="2">Menu 12</a></li>
    <li><a href="" tabindex="2">Menu 13</a></li>
    <li><a href="" tabindex="2">Menu 14</a></li>
    <li><a href="" tabindex="2">Menu 15</a></li>
    <li><a href="" tabindex="2">Menu 16</a></li>
    <li><a href="" tabindex="2">Menu 17</a></li>
    <li><a href="" tabindex="2">Menu 18</a></li>
    </ul>
    </nav>
    </header>
    
    </body>
    </html>
    

    【讨论】:

    • 当我使用赞成的答案并将 width:100% 替换为 width:1000px 它对我有用
    • @Nick.McDermaid 我使用 20K 像素是有原因的,随着 4K 屏幕的出现,你知道最终会有 8K 等等,所以最好使用一个非常高的数字来保持它的工作那些额外的岁月,直到屏幕比生活本身更高分辨率。 ;-)
    • 明白...我很高兴我让它停止包装。即使使用 F12 工具,CSS-it 也让我发疯。我不知道没有他们怎么会有人完成任何事情。
    • 供将来参考:使用巨大的宽度/高度非常低效,因为浏览器仍然将不需要的大盒子存储到内存中。将容器设置为white-space: nowrap;,将子级设置为display: inline-block;,如其他答案中所述(或回退到display: table;display: table-cell;)。
    • main &gt; * &gt; * {background-color: #000;}O_o
    【解决方案5】:

    阅读约翰的回答后,我发现以下似乎对我们有用(不需要指定宽度):

    <style>
    .row {
        float:left;
        border: 1px solid yellow;
        overflow: visible;
        white-space: nowrap;
    }
    
    .cell {
        display: inline-block;
        border: 1px solid red;
        height: 100px;
    }
    </style>
    
    <div class="row">
        <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div>
        <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div>
        <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div>
    </div>
    

    【讨论】:

    • 这解决了我在 iphone 上使用可拖动 div 时遇到的问题。当 div 中包含多个单词并且它们被拖到屏幕边缘时,div 会换行,这样每一行都有一个单词。无论如何overflow: visible; white-space: nowrap;为我做了诀窍。谢谢!
    • 它起作用了,因为他解除了单元格的浮动。不是真正的解决方案,以防止实际浮动 div 包装
    【解决方案6】:

    对我来说(使用引导程序),唯一有效的方法是在 last 单元格上设置 display:absolute;z-index:1

    【讨论】:

    • display:absolute 不是有效的 CSS
    • 大概意思是位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多