单列变双列css_CSS实现常见布局

从我看到的,知道的,全面的总结一下。CSS常见布局。

一、单列布局

单列布局,通常定宽(可以使用%,可以实现自适应,也可以直接确定宽度大小)并利用margin: auto进行水平居中

.main {

width: 90%;

height: 2000px;

background-color: aqua;

margin: 0 auto;

}

二、双列布局

1. 定宽双列布局

常见利用float 进行布局左边左浮动,右边右浮动。(或均为左浮动)

需要清除浮动。

可以修改盒子模型为border-box

.main {

width: 90%;

margin: 0 auto;

overflow: hidden;/*触发BFC,清除浮动*/

}

.left {

width: 1000px;/*也可以使用百分比*/

height: 1500px;

float: left;

background-color: aqua;

}

.right {

width: 1000px;/*也可以使用百分比*/

height: 1500px;

float: right;

background-color: aqua;

}

2. 左侧固定,右侧自适应

创建基本的html布局,要求:两个div之间相距20px,左侧div宽120px

双inline-block

.main {

padding: 15px 20px;

border: 1px dashed #ff6c60;

font-size: 0;

}

.left {

margin-right: 20px;

display: inline-block;

width: 120px;

height: 500px;

font-size: 14px;

border: 1px solid #ddd;

vertical-align: top;/*上端对齐*/

box-sizing: border-box;

}

.right {

display: inline-block;

width: calc(100% - 140px);/*注意:当父容器存在padding时100% 不算padding*/

height: 1000px;

font-size: 14px;

border: 1px solid #ddd;

vertical-align: top;/*上端对齐*/

box-sizing: border-box;

}需要准确确定子容器的宽度,需要border-box模型

需要消除空格的影响,需要父容器font-size : 0

使顶端对齐,`vertical-align: top

双float

.main {

overflow: hidden;/*清除浮动带来的影响*/

padding: 15px 20px;

border: 1px dashed #ff6c60;

}

.left {

width: 120px;

height: 500px;

box-sizing: border-box;

border: 1px solid #ddd;

float: left;

margin-right: 20px;

}

.right {

width: calc(100% - 140px);

height: 1000px;

box-sizing: border-box;

border: 1px solid #ddd;

float: left;

}

float+ margin-left左边左浮动

右边计算margin-left

清除浮动。

.main {

overflow: hidden;/*清除浮动带来的影响*/

padding: 15px 20px;

border: 1px dashed #ff6c60;

}

.left {

width: 120px;

height: 500px;

box-sizing: border-box;

border: 1px solid #ddd;

float: left;

}

.right {

width: calc(100% - 140px);

height: 1000px;

box-sizing: border-box;

border: 1px solid #ddd;

margin-left: 140px;

}

absolute+margin-left左边绝对定位(父元素设置position)

右边计算margin-left。

.main {

padding: 15px 20px;

border: 1px dashed #ff6c60;

position: relative;

}

.left {

width: 120px;

height: 500px;

box-sizing: border-box;

border: 1px solid #ddd;

position: absolute;

}

.right {

width: calc(100% - 140px);/*不设置宽度也可以,由里面自由撑开*/

height: 1000px;

box-sizing: border-box;

border: 1px solid #ddd;

margin-left: 140px;

}

注意:没有清除绝对定位的方法,若左侧盒子高于右侧盒子,就会超出父容器的高度。因此只能通过设置父容器的min-height来防止这种情况。

使用float+BFC

上面的方法都是需要通过左边盒子的宽度来计算某一个值,下面的三个方法不需要计算。

将右边盒子BFC。

flex方案

.main {

padding: 15px 20px;

border: 1px dashed #ff6c60;

display: flex;

align-items: flex-start;

}

.left {

width: 120px;

height: 500px;

border: 1px solid #ddd;

flex: 0 0 auto;

margin-right: 20px;

}

.right {

height: 1000px;

border: 1px solid #ddd;

flex: 1 1 auto;

}

flex容器的一个默认属性值:align-items: stretch;。这个属性导致了列等高的效果。 为了让两个盒子高度自动,需要设置: align-items: flex-start;

grid方案

暂时没有进行学习,今日不适合学习,待续。。。

三、三列布局

1. 两侧定宽,中间自适应

使用float浮动设置父元素宽度,

设置左左右浮动。

中间元素用到calc()来计算所需宽度,达到自适应。

使用margin调整间距,也可以全部左浮动。

需要清除浮动带来的影响。

.main {

width: 90%;

margin: 0 auto;

overflow: hidden;/*触发BFC,清除浮动*/

}

.left {

width: 200px;/*也可以使用百分比*/

height: 1500px;

float: left;

background-color: aqua;

margin: 0 10px;

}

.right {

width: 200px;/*也可以使用百分比*/

height: 1500px;

float: right;

background-color: aqua;

margin: 0 10px;

}

.middle {

width: calc(100% - 460px);

height: 1500px;

float: left;

background-color: aqua;

margin: 0 10px;

}

使用定位为父元素设置relative定位。

分别定位各个子元素

确定间距。

(不建议使用,因为使用绝对定位,后面加入内容的时候会被覆盖)

.main {

width: 90%;

margin: 0 auto;

position: relative;

}

.left {

width: 200px;/*也可以使用百分比*/

height: 1500px;

position: absolute;

left: 10px;

background-color: aqua;

}

.right {

width: 200px;/*也可以使用百分比*/

height: 1500px;

position: absolute;

right: 10px;

background-color: aqua;

}

.middle {

width: calc(100% - 460px);

height: 1500px;

position: absolute;

left: 230px;

background-color: aqua;

}

padding+负margin(圣杯布局)

此原理来自这篇文章。

这篇文章给出了一个不一样的解决方案,在此我有一些修改,清除浮动的方式改为了overflow: hidden;

要求:左边宽度为 200px,右边150px,中间自适应。

基本的结构如下:

基本的css样式如下(为了更好的显示,所以设置了边框,将box-sizing设置为border-box模型):

#container {

padding-left: 200px;

padding-right: 150px;

overflow: hidden;

border: 1px dashed #ff6c60;

}

#container .column {

border: 1px solid #ff6c60;

box-sizing: border-box;

}

#center {

width: 100%;

height: 1000px;

}

#left {

width: 200px;

height: 100px;

}

#right {

width: 150px;

height: 100px;

}

将左侧弄到上面去

#left {

position: relative;

margin-left: -100%;

right: 200px;

}

#right {

margin-right: -150px;

}

就OK了!

【注】为了使其更加完美,可以在body上加入,防止因浏览器窗口过小,而导致布局失效。

body {

min-width:..;

}

需要添加一些padding让布局更加的完美。只需要将left和right 的宽度保持住就可以。

双飞翼实现三列布局

双飞翼和圣杯是一样的道理,只是实现的原理不一样,所以起了不同的名字。

对于圣杯,我们没有添加额外的标签,而双飞翼需要为center加一个额外的div,首先我们先将页面的基本结构搭建起来。

和圣杯布局一样,只不过需要将,padding 用 margin来进行实现。

css代码如下:

#header {

width: 100%;

height: 50px;

background-color: aliceblue;

}

#container {

overflow: hidden;/*触发BFC,清除浮动影响*/

border: 1px dashed #ff6c60;

}

#footer {

width: 100%;

height: 50px;

background-color: aliceblue;

}

.column {

float: left;

}

#center {

width: 100%;

}

#inner-center {

height: 1000px;

margin-left: 200px;

margin-right: 150px;

background-color: aqua;

}

#left {

width: 200px;

height: 100px;

margin-left: -100%;

background-color: aqua;

}

#right {

width: 150px;

height: 100px;

margin-left: -150px;

background-color: aqua;

}

四、等分布局

1. 常规实现

我们用四个子元素来进行等分。父元素默认100%宽度, 子元素要平均分为四份。间距为10px;

基本的html结构如下:

子元素设置浮动。

设置margin-right: 10px,宽度则为calc(25% - 10px)

父元素清除浮动。使用负边距,将最后一个margin-left清除。

.father {

overflow: hidden;

margin-right: -10px;

}

.son {

width: calc(25% - 10px);

height: 500px;

float: left;

margin-right: 10px;

background-color: aqua;

}

关于负边距更多的探讨,计划下篇文章总结一下。

2. flex 实现

同样需要父容器使用负边距来进行清除带来的影响。

html基本代码同上

.father {

display: flex;

margin-right: -10px;

}

.son {

flex: 1 1 auto;

align-items: flex-start;

height: 500px;

border: 1px solid #ff6c60;

margin-right: 10px;

}

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值