1.弹性布局---flex布局
弹性布局是一种常见且好用的布局方式,它可以让结构中的内容自适应不同的分辨率,简化的代码的书写。
使用方法
给父盒子加上display:flex;默认子元素不换行,如果装不开,子元素会缩小元素的宽度。
父级元素常用属性
-
flex-direction 设置主轴方向,默认水平为主轴。row:水平为主轴,column:竖直方向为主轴
-
justify-content 设置主轴方向上子元素的排列方式 。 flex-start:默认从头开始,如果主轴是x轴,则从左往右;flex-end:从尾部开始;center:在主轴居中对齐;space-around:平分剩余空间;space-between:先两边贴边,再平分剩余空间
-
flex-wrap 设置是否换行。 wrap,换行,如果放不下,则会换行;nowrap:不换行,当父级装不下,则会压缩子元素。
-
align-items 设置侧周上的子元素排列方式 --单行
-
align-content 设置侧周上的子元素排列方式 --多行
-
flex-flow 复合属性,相当于同时设置了flex-direction 和 flex-wrap
代码演示(部分属性)
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><style>* {margin: 0;padding: 0;box-sizing: border-box;}li {list-style: none;}.box {width: 700px;height: 300px;margin: 100px auto;background-color: pink;}ul {display: flex;flex-direction: row; /*设置主轴方向*/justify-content: space-between; /*设置主轴上元素排列方式*/flex-wrap: wrap; /*设置是否换行*/align-items: center; /* 设置侧周方向上子元素排列方式 -- 单行*//* align-content: space-between; */ /* 设置侧周方向上子元素排列方式 --多行*//* flex-flow: row wrap; */ /* 同时设置主轴方向和是否换行 */}li {width: 200px;height: 100px;text-align: center;line-height: 100px;background-color: skyblue;}ul {height: 100%;}li:nth-child(2) {background-color: purple;}li:nth-child(3) {background-color: lightgreen;}li:last-child {background-color: red;}</style><body><div class="box"><ul><li>A</li><li>B</li><li>C</li><li>D</li></ul></div></body>
</html>
子项目常用属性
- flex 定义子项分配剩余的空间,用flex表示占据多数分数
- align-self align-self属性允许单个项目有与其他项目不一样的对齐方式,且可覆盖 align-items属性。默认值为auto,表示子项继承父项的align-items属性。
- order 用来定义子项目的排列顺序,数值越小,排列越靠前,默认值为0。
2.grid布局。
grid是二维布局方式,可以同时控制行和列的排布和对齐方式。
使用方法
要开启grid布局,只需要给父级盒子加上display:grid。
常用属性
- grid-template-columns:定义每一列的宽度
-
grid-template-rows:设置每一行的宽度
grid-template-rows和grid-template-columns的参数可以是一个固定值也可以是fr(浮动宽度,是grid布局专有单位,代表grid剩余空间)
-
row-gap:设置行间距
-
column-gap:设置列间距
-
gap:统一设置行间距和列间距
css代码演示
ul {display: grid;/* grid-template-columns: 100px 100px 100px; */ /* 将子元素设置为三列,每列宽度为100px */grid-template-columns: 1fr 2fr 1fr;grid-template-rows: 1fr 1fr;/* column-gap: 20px; 设置列间距 *//* row-gap: 10px; 设置行间距 */gap: 10px 20px; /* 统一设置行间距和列间距 */}
效果
- grid-template-areas:排列元素;grid-area:指定元素对应的区域
代码演示
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><style>* {margin: 0;padding: 0;box-sizing: border-box;}.box {display: grid;/* 设置元素排列方式 */grid-template-areas: 'header header header' 'sidebar content content' 'footer footer footer';width: 50%;height: 40vh;margin: 100px auto;}header {/* 指定当前元素对应的区域 */grid-area: header;background-color: lightcoral;}aside {grid-area: sidebar;background-color: lightgreen;}main {grid-area: content;background-color: lightblue;}footer {grid-area: footer;background-color: lightpink;}</style><body><div class="box"><header>这里是头部区域</header><aside>侧边栏区域</aside><main>内容区域</main><footer>底部区域</footer></div></body>
</html>
效果
grid布局对齐方式
-
justify-items:设置水平方向上对齐方式
-
align-items:设置垂直方向上对齐方式
-
当行和列的尺寸小于父级尺寸,可以通过align-content和justify-content对轨道的对齐方式进行操作
本文介绍并不完全,若要精通,还需自己多练习。
逆风的方向,更适合飞翔!