如何获得 css 3 列布局且没有边距的浮点数?
How to get css 3 column layout with floats and no margins?
我对 css 不是很有经验,我在尝试使用固定宽度的左右列和动态中间列进行布局时遇到了以下问题。
我能够做到这一点的唯一方法是在中间使用边距 div,以避免与侧栏重叠。我想有一种更简洁的方法可以实现这一点,但我还没有找到解决方案。
在此处查看 jsfiddle,左边距右边没有边距:http://jsfiddle.net/juansg_eng/BCJ6C/119/
HTML
<div class="left">With margin</div>
<div class="right">No margin</div>
<div class="middle"></div>
css
.left { float: left; width: 134px; height: 191px; background-color:#0000ff; opacity: 0.5}
.middle { height: 50px; background-color: #ff0000; margin-left: 134px}
.right { float: right; width: 183px; height: 191px; background-color:#ffff00; opacity:0.5}
谢谢!
将 display: flex;
添加到中间容器应该可以解决问题。
检查浏览器支持。
.left {
float: left;
width: 134px;
height: 191px;
background-color: #0000ff;
opacity: 0.5
}
.middle {
height: 50px;
background-color: #ff0000;
display: flex;
}
.right {
float: right;
width: 183px;
height: 191px;
background-color: #ffff00;
opacity: 0.5
}
<div class="left">With margin</div>
<div class="right">No margin</div>
<div class="middle"></div>
引用link
.left { float: left; width: 134px; height: 191px; background-color:#0000ff; opacity: 0.5}
.middle { float:left; width: calc(100% - (134px + 183px)); height: 50px; background-color: #ff0000;}
.right { float: right; width: 183px; height: 191px; background-color:#ffff00; opacity:0.5}
flexbox
可以做到。不需要浮点数或边距。
* {
margin: 0;
padding: 0;
}
.main {
height: 191px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
border: 2px solid green;
}
.main > div {
border: 1px solid grey;
}
.left {
-webkit-box-flex: 0;
-webkit-flex: 0 1 134px;
-ms-flex: 0 1 134px;
flex: 0 1 134px;
background-color: #0000ff;
opacity: 0.5
}
.middle {
-webkit-box-flex: 1;
-webkit-flex: 1 0 auto;
-ms-flex: 1 0 auto;
flex: 1 0 auto;
height: 50px;
background-color: #ff0000
}
.right {
-webkit-box-flex: 0;
-webkit-flex: 0 0 183px;
-ms-flex: 0 0 183px;
flex: 0 0 183px;
background-color: #00ff00;
opacity: 0.5
}
<div class="main">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
我对 css 不是很有经验,我在尝试使用固定宽度的左右列和动态中间列进行布局时遇到了以下问题。
我能够做到这一点的唯一方法是在中间使用边距 div,以避免与侧栏重叠。我想有一种更简洁的方法可以实现这一点,但我还没有找到解决方案。
在此处查看 jsfiddle,左边距右边没有边距:http://jsfiddle.net/juansg_eng/BCJ6C/119/
HTML
<div class="left">With margin</div>
<div class="right">No margin</div>
<div class="middle"></div>
css
.left { float: left; width: 134px; height: 191px; background-color:#0000ff; opacity: 0.5}
.middle { height: 50px; background-color: #ff0000; margin-left: 134px}
.right { float: right; width: 183px; height: 191px; background-color:#ffff00; opacity:0.5}
谢谢!
将 display: flex;
添加到中间容器应该可以解决问题。
检查浏览器支持。
.left {
float: left;
width: 134px;
height: 191px;
background-color: #0000ff;
opacity: 0.5
}
.middle {
height: 50px;
background-color: #ff0000;
display: flex;
}
.right {
float: right;
width: 183px;
height: 191px;
background-color: #ffff00;
opacity: 0.5
}
<div class="left">With margin</div>
<div class="right">No margin</div>
<div class="middle"></div>
引用link
.left { float: left; width: 134px; height: 191px; background-color:#0000ff; opacity: 0.5}
.middle { float:left; width: calc(100% - (134px + 183px)); height: 50px; background-color: #ff0000;}
.right { float: right; width: 183px; height: 191px; background-color:#ffff00; opacity:0.5}
flexbox
可以做到。不需要浮点数或边距。
* {
margin: 0;
padding: 0;
}
.main {
height: 191px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
border: 2px solid green;
}
.main > div {
border: 1px solid grey;
}
.left {
-webkit-box-flex: 0;
-webkit-flex: 0 1 134px;
-ms-flex: 0 1 134px;
flex: 0 1 134px;
background-color: #0000ff;
opacity: 0.5
}
.middle {
-webkit-box-flex: 1;
-webkit-flex: 1 0 auto;
-ms-flex: 1 0 auto;
flex: 1 0 auto;
height: 50px;
background-color: #ff0000
}
.right {
-webkit-box-flex: 0;
-webkit-flex: 0 0 183px;
-ms-flex: 0 0 183px;
flex: 0 0 183px;
background-color: #00ff00;
opacity: 0.5
}
<div class="main">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>