前端页面常见CSS布局方式总结~



css中常见布局方式有哪些?_css

CSS中常见布局方式有哪些?下面本篇文章就来给大家介绍一下CSS中的常见布局方式,希望对大家有所帮助。

在介绍CSS布局方式之前我先简单说明一下html中的三种布局方式:

  • 流动布局(默认)
  • 浮动布局(float)
  • 定位布局(position)

 好了,这里就不详细介绍这三种布局了,今天我们的重头戏是探索CSS中常见的布局方式有哪些

css中常见布局方式有哪些?_css_02

一、单列布局

常见的单列布局有两种:

  • header,content 和 footer 等宽的单列布局
  • header 与 footer 等宽,content 略窄的单列布局

css中常见布局方式有哪些?_css_03

实现第一种方式很简单,可以将 ​​header​​ , ​​content​​, ​​footer​​ 统一设置相等宽度,然后设置 ​​margin:auto​​ 即可实现居中:



<!-- html代码 -->
<p class="header"></p>
<p class="content"></p>
<p class="footer"></p>

<!-- css代码 -->
.header{
margin:0 auto;
max-width: 960px;
height:100px;

}
.content{
margin: 0 auto;
max-width: 960px;
height: 400px;

}
.footer{
margin: 0 auto;
max-width: 960px;
height: 100px;

}


对于第二种,​​header​​ 和  ​​footer​​ 可以不用设置宽度,让其充满整个屏幕(默认100%),只需将三者的内容设置同一个 ​​width​​ ,然后在通过 ​​margin:auto​​ 让其内容居中

二、两列自适应布局

两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式

实现方式:

  • float+overflow:hidden
  • Flex 布局
  • Grid 布局

1. float+overflow:hidden

实现原理:通过设置 ​​overflow​​ 触发 ​​BFC​​ ,而 ​​BFC​​ 不会重叠浮动元素



<div class="container">
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.container{
/* 触发BFC格局 */
overflow: hidden;
/* 兼容IE6-浏览器 */
zoom: 1;
}
.left{
float: left;
background-color: blue;
}
.right{
overflow: hidden;
zoom: 1;
background-color: pink;
}
</style>


注意:上述代码是左侧栏固定,右侧自适应。

2. Flex 布局

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局

Flex 布局是2009年W3C提出了一种新布局方案,在现在也得以广泛使用,特别是移动端最优!

Flex 可以简便、完整、响应式地实现各种页面布局

css中常见布局方式有哪些?_文档流_04

详细了解 ​​Flex​​ 布局请点击:​​Flex布局​



/* html同上 */
.container{
display: flex;
}
.right{
flex: 1;
}


只需两行代码即可完成两列自适应布局,是不是很香~

3.Grid 布局

​Grid​​布局,是一个基于网格的二维布局系统,目的是用来优化用户界面设计。

详细了解​​Grid​​布局请点击:​​Grid布局​



/* html同上 */
.container{
display: grid;
grid-template-columns: auto 1fr;
grid-gap: 20px;
}


 三、三栏布局

 特征:中间列自适应宽度,旁边两侧固定宽度,实现三栏布局有多种方式:

1.浮动布局

这种布局方式,dom 结构必须是先写浮动部分,然后再中间块,否则右浮动块会掉到下一行。

浮动布局的优点就是比较简单,兼容性也比较好。但浮动布局是有局限性的,浮动元素脱离文档流,要做清除浮动,这个处理不好的话,会带来很多问题,比如父容器高度塌陷等。

HTML代码:



<div class="main">
<div class="left">左</div>
<div class="right">右</div>
<div class="center">中
<h2>浮动布局</h2>
</div>
</div>


CSS代码:



/* 清除所有标签默认样式 */
*{
margin: 0;
padding: 0;
}
.left{
float: left;
width: 300px;
height: 100px;
background: pink;
}
.right{
float: right;
width: 300px;
height: 100px;
background: red;
}
.center{
margin-left: 300px;
margin-right: 300px;
background-color: lightblue;
}


效果图:

css中常见布局方式有哪些?_前端_05

在这里给 ​​.center​​ 类设置左右外边距是因为两侧的浮动元素占300像素,不设置外边距中间内容多就会出现如下情况:

css中常见布局方式有哪些?_文档流_06

在前面也说了,浮动实现的三栏布局会使元素脱离文档流,所以为了不影响其他元素的显示需要清除浮动:



.main::after{
content:'';
display: block;
clear: both;
}


2.绝对定位布局

HTML代码:



<div class="main">
<div class="left">左</div>
<div class="center">中
绝对定位布局
</div>
<div class="right">右</div>
</div>


CSS代码:



*{
margin: 0;
padding: 0;
}
.main{
position: relative;
}
.left{
position: absolute;
left: 0;
width: 300px;
background-color: red;
}
.center{
position: absolute;
left: 300px;
right: 300px;
background-color: blue;
}
.right{
position: absolute;
right: 0;
width: 300px;
background-color: pink;
}


在这里,由于 ​​absolute​​ 是相当于 ​​static​​ 定位以外的第一个父元素进行定位,所以我们要给其父元素添加 ​​position:relative​​ 属性

绝对定位布局优点就是快捷,设置很方便,而且也不容易出问题。

缺点就是,容器脱离了文档流,后代元素也脱离了文档流,高度未知的时候,会有问题,这就导致了这种方法的有效性和可使用性是比较差的。

3.表格布局

table是一种常见的布局方式,他可以将整个页面按照表格的方式设置为多行多列,但是由于书写table标签比较麻烦尤其是涉及到table内嵌table的时候,所以CSS给我们提供了 ​​display:table​​ 的方式可以让我们方便的使用table布局, 设置子元素为列的属性为 ​​display:table-cell​​ 



.main{
width: 100%;
display: table;
}
.left,.center,.right{
display: table-cell;
}
.left{
width: 300px;
background-color: red;
}
.center{
background-color: green;
}
.right{
width: 300px;
background-color: pink;
}


表格布局的兼容性很好,在 flex 布局不兼容的时候,可以尝试表格布局。

同样,不是谁都是完美的,表格布局也存在一定的缺陷:

  • 无法设置栏边距
  • 对 ​​seo​​ 不友好
  • 当其中一个单元格高度超出的时候,两侧的单元格也是会跟着一起变高的

 4.弹性布局

这里弹性(flex)布局就不再过多解释,感兴趣的小伙伴可以查看阮一峰大佬的详细教程:​​Flex布局​



.main {
display: flex;
}
.left{
width: 400px;
background-color: red;
}
.center{
background-color: pink;
flex: 1;
}
.right{
background-color: green;
width: 400px;
}


flexbox 布局是比较完美的一个三栏布局方案,flexbox 的缺点就是 IE10 开始支持,但是 IE10 的是-ms 形式的

5.网格布局

同样,网格(grid)布局也不再详细介绍,感兴趣的小伙伴请查看:​​Grid布局​

将属性 ​​display​​ 值设为 ​​grid​​ 或 ​​inline-grid​​ 就创建了一个网格容器,所有容器直接子结点自动成为网格项目。

gird提供了 gird-template-columns、grid-template-rows属性让我们设置行和列的高、宽



div{
display: grid;
width: 100%;
grid-template-columns: 300px auto 300px;
grid-template-rows: 150px;
}


注意:网格布局的兼容性不好。IE10+上支持,而且也仅支持部分属性。

此外,三列布局还有 ​​圣杯布局​​ 和 ​​双飞翼布局​​。

以上就是CSS中常见的布局方式了,几种方式各有各的优点和缺点,没有一个方法可以说是完美的,可以按照实际情况来选择使用!