假设我有一个包含3列的布局:
| left sidebar | content | right sidebar |
每列都是一个div,其中 float:left 。
我希望内容div始终居中,但也要设置 max-width :
| left sidebar | centered + max width | right sidebar |
3列的总宽度应始终为100%,因此两个侧边栏将适应并填充剩余空间。
因此,在一个非常大的屏幕中,它看起来像这样:
| left sidebar | content | right sidebar |
好像内容div有边距: 0 auto (但是两侧有两个div而不是空格)。
用CSS做这样的事情有可能吗?
答案 0 :(得分:1)
使用 flexbox 非常简单
df.transpose()
*{margin:0; box-sizing:border-box;} html,body{height:100%;font:14px/1.4 sans-serif;}
div{ border: 1px solid #000;}
/* here you go */
.flex{ display: flex; }
.grow-1{ flex: 1; }
将班级<div class="flex">
<div>left sidebar</div>
<div class="grow-1">content</div>
<div>right sidebar</div>
</div>
添加到其他元素:
grow-1
*{margin:0; box-sizing:border-box;} html,body{height:100%;font:14px/1.4 sans-serif;}
div{ border: 1px solid #000;}
/* here you go */
.flex{ display: flex; }
.grow-1{ flex: 1; }
答案 1 :(得分:0)
事情发生了变化,因为float: left
是唯一的解决方案。
更简单的替代方法是使用display
属性。一个例子是这样的:
div#wrapper {
display: table;
width: 100%;
table-layout: fixed;
}
div#left-sidebar,
div#content,
div#right-sidebar {
display: table-cell;
}
table-cell
属性允许div的行为类似于表中的单元格而不实际使用表 - 两者中最好的。
wrapper
div中的属性允许您指定宽度并影响单元格的分布方式。
更好的解决方案是使用flex-box
。但是,这只适用于现代浏览器,所以你可能不得不拖延,直到你可以确定没有IE潜伏着。这也有点难学,但更灵活。
答案 2 :(得分:0)
如果您想避免使用flex-box
,因为某些较旧的浏览器不支持它...
您可以在display
中使用css
表格属性。然后可以使用@media
查询来有效设置max-width
content
的div
(即中间列)。
媒体查询示例:
@media (min-width: 300px) {
.middle {
width: 100px !important;
}
}
有关媒体查询的注意事项: width
类的.middle
值应等于@media
个查询min-width
值除以3。此上下文中的width
值的行为类似于max-width
。
例如;如果您希望中间列的max-width
为300px
,则可以将min-width
查询的@media
值设置为900px
。根据此配置,中间列的宽度将保持灵活,直到浏览器宽度超过900px
宽,此时中间列宽度固定为300px
宽。
代码段:
以下是完整的代码段,包括html
和css
:
body, html {
padding: 0;
margin: 0;
}
.wrapper {
width: 100%;
height: 100px;
display: table;
background: #BADA55;
table-layout: fixed;
}
.wrapper > div {
display: table-cell;
width: 100%;
text-align: center;
vertical-align: middle;
}
.middle {
background: #C0FFEE;
}
@media (min-width: 750px) {
/*
* The 'width' value below should be the @media
* queries 'min-width' value (above) divided by three.
*
* The 'width' value below is then behaves similar
* to 'max-width'.
*/
.middle {
width: 250px !important;
}
}
&#13;
<body>
<div class="wrapper">
<div>left sidebar</div>
<div class="middle">content</div>
<div>right sidebar</div>
</div>
</body>
&#13;