我喜欢的弹性布局

最近由于某些原因,导致我不得不把注意力从原来的JS转到CSS上,尽管我现在已经不太想搞CSS了,但现实就是这样不尽人意,没有办法。那今天我就说说我所喜欢的流体布局吧,看到网上很多关于两栏布局中要求一栏固定宽度,另一栏自适应,三栏布局,两侧固定宽度,中间栏自适应的做法都是用到一绝对定位,如:

1
2
3
4
5
<div class="outer">
  <div class="left">左侧</div>
  <div class="main">中间自适应</div>
   <div class="right">右侧</div>
</div>

CSS:

1
2
3
4
5
6
.outer { margin:100px auto;position:relative;}
.outer div { height:300px;}
.left,.right {position:absolute;top:0;}
.left {width:100px;left:0;background:red;}
.right {width:200px;right:0;background:green;}
.main {margin:0 210px 0 110px;background:blue;}

这样中间层就可以自适应宽度了,本身这样的布局并没有什么问题,但是总是感觉不够灵活,比如说将来想要修改两侧的宽度,或者说去掉一个或两个侧边栏,这个时候就不得不重新计算main的margin-left和margin-right了,有点麻烦,那有没有更加灵活的实现方法呢?嗯,还真的有:

HTML:

1
2
3
4
5
<div class="outer">
    <div class="left">左侧</div>
    <div class="right">右侧</div>
    <div class="main">中间自适应</div>
</div>

CSS:

1
2
3
4
5
.outer { margin:100px auto;}
.outer div { height:300px;}
.left { float:left; width:100px; margin-right:10px;_display:inline; background:red;}
.main { display:table-cell;width:2000px;*display:block;*width:auto; *overflow:hidden;zoom:1; background:blue;}
.right{float:right;width:100px;margin-left:10px; _display:inline; background:green;}

这样写,中间层与两侧基本上就没多大关系了,想要修改两侧的宽度,直接改它自己的宽度就可以了,想让三栏变两栏,直接去掉一栏就可以了,哪怕是想变成一样,两侧都去掉,也不用去修改样式,计算间距什么的,很方便,不是么。估计有个看到了那个overflow:hidden,担心如果里面的层需要显示到外面的时候被隐藏掉,就像做提示效果的时候,这个不用担心的,只要不给.main定位,它就不会隐藏里面的被定过位的层。不信你就试下吧。

posted @   zjhsd2007  阅读(2391)  评论(4编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示