CSS中的布局

xiaoxiao2021-02-28  44

布局那些事

两栏布局 很多情况下,要用到诸如左边固定,右边自适应这种情况,此时可以利用浮动来解决这个问题。 <div class="wrapper "> <div class="left"></div> <div class="right"></div> </div> .wrapper{ border:1px solid blue; height:300px; } .left{ background-color:#ddd; width:100px; height:100%; float:left; } .right{ background-color:red; height:100%; margin-left:100px; }

通过给左边块级元素设置向左浮动,使其脱离标准文档流,从而右边的块级元素能够从第二行“跑到“第一行,这里要注意的是,左边元素其实是覆盖在右边元素上的,所以这里要给右边元素设置坐外边距,该值的大小是左边元素的宽度。

三栏布局 这里的三栏布局实现有很多种方式。

—简单的利用浮动的方式

<div class="left">左栏</div> <div class="right">右栏</div> <div class="middle">中间栏</div> .left{ width: 100px;height: 300px; background: yellow; float: left; } .right{ width: 100px; height: 300px; background: green; float: right; } .middle{ height: 300px; background: red; margin:0 100px; }

这里要注意的是html的结构,可以看到中间拦是在最后面的,在某些极端优化场景下,要求中间内容要首先被解析出来,这样子可能会有问题,后续再说。

–利用定位的方式

<div class="left">左栏</div> <div class="middle">中间栏</div> <div class="right">右栏</div> html,body{ margin:0; } .left{ width: 200px;height: 300px; background: yellow; position:absolute; top:0; left:0; } .right{ width: 200px; height: 300px; background: green; position:absolute; top:0; right:0; } .middle{ height: 300px; background: red; margin:0px 200px; }

这样子的html结构是比较正常的,但是如果他们的父元素有内外边距,那么中间的部分可能不会和两端平齐,所以我给根元素设置了外边距为0。

—设置负值的margin 在上述第一个方法中提到,有时候我会希望中间主体内容先渲染出来,所以要把中间栏的dom放在最前面,那这时候要怎么去布局呢,可以这样来:

<div class='main'> <div class='middle'> <div class="content"> 中间栏 </div> </div> <div class="left">左栏</div> <div class="right">右栏</div> </div> .main{ overflow:hidden; } .content{ border:1px solid #555; margin:0 200px; } .left{ width: 200px;height: 300px; background: yellow; float:left; margin-left:-100%; word-break:break-all; } .right{ width: 200px; height: 300px; background: green; float:left; margin-left:-200px; } .middle{ height: 300px; background: red; float:left; width:100%; } .wrapper{ float:left; width:100%; }

其实主要是利用了负值的margin,值得注意的是,在middle下还有一个content的子元素,并且设置了水平的margin,主要是为了让内容能够在中间显示,这也是所谓的“双飞翼“布局,不过这种做法多了一些标签,乍看之下有点复杂。还有一种类似的“圣杯“布局,大致想法是一样的,只不过在解决内容不被遮盖上,是利用了padding和相对定位来实现。

—利用flex布局 弹性盒子的话实现就很简单了

<div class='box'> <div class="left">左栏</div> <div class="middle">中间栏</div> <div class="right">右栏</div> </div> .box{ display:flex; } .left{ width: 200px;height: 300px; background: yellow; } .right{ width: 200px; height: 300px; background: green; } .middle{ height: 300px;width:100%; background: red; }

除了兼容性问题以外,这个实现起来就好多了

转载请注明原文地址: https://www.6miu.com/read-2626515.html

最新回复(0)