[英]Centered div with max-width and content to both sides
假设我有一个包含3列的布局:
| left sidebar | content | right sidebar |
每列都是一个带有float:left的div。
我想让内容div始终居中,但还要为其设置一个最大宽度 :
| left sidebar | centered + max width | right sidebar |
3列的总宽度应始终为100%,因此两个侧边栏将适应并填充剩余空间。
因此,在一个非常大的屏幕上,它看起来像这样:
| left sidebar | content | right sidebar |
好像内容div的边距是: 0自动 (但两个div在侧面而不是空白)。
CSS可以做这样的事情吗?
使用flexbox非常简单
*{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; }
<div class="flex"> <div class="grow-1">left sidebar</div> <div class="grow-1">content</div> <div class="grow-1">right sidebar</div> </div>
自float: left
以来,情况已经发生了变化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像table-cell
一样工作, 而无需实际使用表 -兼具两个优点。
wrapper
div中的属性允许您指定宽度并影响像元的分布方式。
更好的解决方案是使用flex-box
。 但是,这仅在现代浏览器中有效,因此您可能必须推迟直到可以确定没有IE潜伏。 学习起来也比较困难,但是更加灵活。
如果由于某些较旧的浏览器不支持使用flex-box
,请不要使用它。
您可以在css
使用display
表属性。 然后,可以使用@media
查询来有效地设置content
div
的max-width
(即中间列) 。
媒体查询示例:
@media (min-width: 300px) {
.middle {
width: 100px !important;
}
}
关于媒体查询的注意事项: .middle
类的width
值应等于@media
查询的min-width
值除以三。 然后,此上下文中的width
值的行为类似于max-width
。
例如; 如果希望中间列的max-width
为300px
,则将@media
查询的min-width
值设置为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; } }
<body> <div class="wrapper"> <div>left sidebar</div> <div class="middle">content</div> <div>right sidebar</div> </div> </body>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.