css float div minwidth没有重叠

标签 css css-float

好吧,我正在制作一个“简单的 3 列布局”,基本设置是两个固定宽度的列和一个(中心)列,该列可以拉伸(stretch)以填充剩余的宽度。

现在这个简单的布局有一个小的“插件”:我希望为中心列定义一个最小宽度,css 有一个属性,所以看起来很简单:

.content div {
  border:1px solid #bbb;  
  box-sizing: border-box;
}

.content-left {
  float: left;
  width: 200px;
}

.content-main {
  margin-left: 200px;
  margin-right: 200px;
  min-width: 200px
}

.content-right {
  float: right;
  width: 200px;
}

然而,这带来了一个重要问题:当主列达到“最小宽度”(通过在下面的测试链接中拖动分隔线进行测试)时,它开始与左右列重叠。 - 我实际上希望它能拉伸(stretch)页面并引入水平滚动条。

fiddle to test it

最佳答案

应该这样做:

[layout] {
  display: flex;
}
#left {
  flex: 0 0 180px;
  background-color:#f00;
  margin-right: 20px;
}
#right {
  flex: 1 0 300px;
  background-color:#0ff;
}
<div layout>
    <div id="left">
        left
    </div>
    <div id="right">
        right
    </div>
</div>

参见 flex了解详情。在这种情况下,flex-shrinkflex-grow 承担了繁重的工作。而flex-wrap的默认值是nowrap

别忘了 prefix .

还要注意 flex-basis300px 值(#right 元素的 flex 简写中的第三个值. 在这种情况下,它是该元素的最小宽度。当它小于该尺寸时,将出现滚动条。

这里有 3 列:

[layout] {
  display: flex;
}
[layout] > * {
  padding: 1rem;
}
#left, #right {
  flex: 0 0 180px;
}
#left {
  background-color:#f00;
}
#right {
  background-color:#0ff;
}
#middle {
  flex: 1 0 300px;
  margin: 0 10px;
  border: 1px solid #eee;  
}
<div layout>
    <div id="left">
        left
    </div>
    <div id="middle">
        middle
    </div>
    <div id="right">
        right
    </div>
</div>


旁注: 似乎没有人告诉您,您试图实现的水平条是世界其他地方在发明响应式布局时试图避免的。这被认为是非常糟糕的用户体验,Google 降低了不具有响应式布局的网站的排名。
长话短说,它会让你(或客户)损失大笔金钱。网站越重要,损失越大。更好的用户体验是将左侧边栏和右侧边栏转换为小型设备上可滑动的抽屉。

关于css float div minwidth没有重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191629/

相关文章:

html - 指定 block 背景图片而不指定高度和宽度

css - CSS float属性在处理嵌套div时如何组合?

html - CSS 和 div 定位

javascript - Firefox 删除了我的 float :left

css - 如何在具有可变空间的 div 中包含一个 float

CSS:为什么这个 div % 宽度不起作用?

css - 2 个 CSS 文本 - 1 个电子邮件地址 - 我怎样才能将它们并排对齐?

html - 如何使输入的 react 方式与 flexbox 中的父 div 相同?

php - 每个/其他 CSS 技术

css: logo: img: 向右浮动:很奇怪:仍然向左浮动并显示另一个 div 的 bgcolor