前言
--
最近在准备整理基础,准备年后跳槽,找个好一点的东家。? 记录学习整理的过程,希望能帮到年后跳槽的你,让我们一起来巩固基础吧。undefined目前在一家国企单位,朝九晚五的生活让我感到舒适,有大量的时间,做自己喜欢的事。时间久了,我感到了焦虑,由于公司是非互联网,开发也是根据自己已知技术去开发,技术成长很慢,技术氛围没那么强,想突破一下自己, 是该逃离舒适区了。 本章主要是回顾Flex使用 和 一些常用布局的写法。
熟悉HTML页面架构和常用布局
Flex
Flex 概念
采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。注意:任何一个容器都可以指定为
Flex
行内元素也可以指定为Flex
布局,display: inline-flex
; Webkit 内核的浏览器,必须加上-webkit
前缀。display: -webkit-flex; / Safari /
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做
main start
,结束位置叫做main end
;交叉轴的开始位置叫做cross start
,结束位置叫做cross end
。项目默认沿主轴排列。单个项目占据的主轴空间叫做main size
,占据的交叉轴空间叫做cross size
。
容器属性
作用于父容器的属性
属性 | 功能描述 |
---|---|
| 属性决定主轴的方向(即项目的排列方向)。 |
| 默认情况下,项目都排在一条线(又称"轴线")上。 |
| 决定了子元素在主轴的对齐方式。 |
| 决定了子元素在交叉轴(竖轴)的对齐方式 |
| 决定了多条轴线的对齐方式。 |
flex-direction
代码语言:txt复制
该属性决定了主轴以什么方向排列row
(默认值):主轴为水平方向,起点在左端。row-reverse
:主轴为水平方向,起点在右端。column
:主轴为垂直方向,起点在上沿。column-reverse
:主轴为垂直方向,起点在下沿。
flex-direction: column;
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/046396abfabb4887a1553e32dce271e7~tplv-k3u1fbpfcp-zoom-1.image)```
flex-direction:row-reverse
flex-wrap
代码语言:txt复制
该属性决定了元素是否在一条轴线上,通过指定它的属性可以子元素换行。nowrap
:默认,不换行。wrap
: 让子元素在一条线上有序的排列着,当一条线排不下的时候,会换行。wrap-reverse
: wrap 的反转。
flex-wrap: wrap;
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d178899cfa6240f28ec7240a4a62a4a6~tplv-k3u1fbpfcp-zoom-1.image)```
flex-wrap: wrap-reverse;
justify-content: center;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/39599ce934c141d798e92c2e803fbe4e~tplv-k3u1fbpfcp-zoom-1.image)
justify-content: flex-end;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6a3dab13017e452c9a8a085f3ebce6f9~tplv-k3u1fbpfcp-zoom-1.image)
justify-content: space-between;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f1da2e71e4f8459dbefd364ca2444ca7~tplv-k3u1fbpfcp-zoom-1.image)
justify-content: space-around;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8a5e16a1503a492b922e445c2f5c3da8~tplv-k3u1fbpfcp-zoom-1.image)
justify-content: space-evenly;
align-items: flex-end;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7a08ae956aa14c7b92f1fcd85311247d~tplv-k3u1fbpfcp-zoom-1.image)
align-items: center;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7828a782fed94faba71d319b323159b5~tplv-k3u1fbpfcp-zoom-1.image)
align-items: baseline;
align-content
代码语言:txt复制
该元素定义了多条轴的对齐方式,当只有一根轴时,不起作用。
属性:flex-start
:与交叉轴的起点对齐。flex-end
:与交叉轴的终点对齐。center
:与交叉轴的中点对齐。space-between
:与交叉轴两端对齐,轴线之间的间隔平均分布。space-around
:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。stretch
(默认值):轴线占满整个交叉轴。
align-content: flex-start;
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f375fa0133c9448491811f5745221098~tplv-k3u1fbpfcp-zoom-1.image)```
align-content: flex-end;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3812bf4fcd564ed5b9026e54409e1f20~tplv-k3u1fbpfcp-zoom-1.image)
align-content: center;
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3c24d2f9ee37464583894c09beabeb86~tplv-k3u1fbpfcp-zoom-1.image)
align-content: space-between;
作用于子元素的属性
属性 | 属性描述 |
---|---|
| 可以将子元素按大小排序,值越小,排名越靠前。 |
| 可以将子元素按一定比例排列,如果子元素值都一样,那么子元素会等比例排列。 |
| 如果空间不足时,可以使用它将子元素按比例缩小 |
| 它决定在主轴分配空间之前,项目占主轴的大小。浏览器会根据剩余的空间来,计算它的大小。 |
| 它可以指定某个元素和其它元素的排列方式不同。 |
order
代码语言:txt复制父容器为
flex
. 时, 子元素可以通过order
达到排序的功能,数值越小,排列最前面。
<div class="main">
<div class="son1">
</div>
<div class="son2">
</div>
<div class="son3">
</div>
</div>
<style> .main{
width: 400px;
height: 300px;
border-radius: 15px;
display: flex;
justify-items: center;
align-items: center;
background: lightseagreen;
margin: auto;
margin-top: 200px;
}
.son1{
width: 80px;
height: 100px;
border-radius: 15px;
margin: 10px;
order: 1;
background: coral;
}
.son2{
width: 80px;
height: 100px;
border-radius: 15px;
margin: 10px;
order: 0.2;
background: darkcyan;
}
.son3{
width: 80px;
height: 100px;
border-radius: 15px;
margin: 10px;
order: 3;
background: gold;
} </style>
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ae86beb0fc624390beaa12b937bf12a9~tplv-k3u1fbpfcp-zoom-1.image)
flex-grow
代码语言:txt复制
该属性用来指定子元素在父容器中按比例指定大小,如果每一项都指定比例相同的话,那么元素会平分排列布局。
<div class="main">
<div class="son1">
</div>
<div class="son2">
</div>
<div class="son3">
</div>
</div>
<style> .main{
代码语言:txt复制width: 400px;
代码语言:txt复制height: 300px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制display: flex;
代码语言:txt复制justify-items: center;
代码语言:txt复制align-items: center;
代码语言:txt复制background: lightseagreen;
代码语言:txt复制margin: auto;
代码语言:txt复制margin-top: 200px;
}
.son1{
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制flex-grow: 2;
代码语言:txt复制background: coral;
}
.son2{
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制flex-grow: 2;
代码语言:txt复制background: darkcyan;
}
.son3{
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制flex-grow: 2;
代码语言:txt复制background: gold;
} </style>
<style> .main{
代码语言:txt复制width: 400px;
代码语言:txt复制height: 300px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制display: flex;
代码语言:txt复制justify-items: center;
代码语言:txt复制align-items: center;
代码语言:txt复制background: lightseagreen;
代码语言:txt复制margin: auto;
代码语言:txt复制margin-top: 200px;
}
.son1{
代码语言:txt复制width: 200px;
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制/* 缩小5 的比例 */
代码语言:txt复制flex-shrink: 5;
代码语言:txt复制background: coral;
}
.son2{
代码语言:txt复制width: 160px;
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制background: darkcyan;
}
.son3{
代码语言:txt复制width: 160px;
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制background: gold;
} </style>
.son1{
代码语言:txt复制/* 指定了宽度没有作用, flex-basis 决定了占据主轴多少宽度,
代码语言:txt复制浏览器会根据剩余宽度来计算主轴还有多少宽度 */
代码语言:txt复制width: 300px;
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制flex-basis: 100px;
代码语言:txt复制background: coral;
}
.son2{
代码语言:txt复制width: 160px;
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制background: darkcyan;
}
.son3{
代码语言:txt复制height: 100px;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制flex-basis: 100px;
代码语言:txt复制background: gold;
}
.son3{
代码语言:txt复制border-radius: 15px;
代码语言:txt复制margin: 10px;
代码语言:txt复制flex-basis: 100px;
代码语言:txt复制background: gold;
代码语言:txt复制align-self: stretch;
}
<div class="full">
代码语言:txt复制 <header>导航</header>
代码语言:txt复制 <main>主体内容</main>
代码语言:txt复制 <footer>底部</footer>
代码语言:txt复制</div>
代码语言:txt复制*{
margin: 0;
padding: 0;
}
.full{
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
}
header{
height: 60px;
font-weight: 900;
color: white;
text-align: center;
background: darkcyan;
}
main{
flex: 1;
align-items: center;
font-weight: 900;
color: white;
text-align: center;
background:orange;
}
footer{
height: 60px;
font-weight: 900;
color: white;
text-align: center;
background: rgb(48, 40, 163);
}
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0a9dc159bfcb4ad7985d24341b13f21d~tplv-k3u1fbpfcp-zoom-1.image)
两列布局
代码语言:txt复制最经典的系统管理布局
两列布局
. 它主要由是两列都固定高度
,左端指定宽度,右端通过flex:1 来达到自适应宽度
。
<div class="full">
<div class="left">
</div>
<div class="right">
</div>
</div>
*{
代码语言:txt复制margin: 0;
代码语言:txt复制padding: 0;
}
.full{
代码语言:txt复制width: 100%;
代码语言:txt复制height: 100vh;
代码语言:txt复制display: flex;
代码语言:txt复制flex-wrap: wrap;
}
.left{
代码语言:txt复制width: 200px;
代码语言:txt复制height: 100vh;
代码语言:txt复制background: rgb(0, 140, 255);
}
.right{
代码语言:txt复制flex:1;
代码语言:txt复制height: 100vh;
代码语言:txt复制background: rgb(158, 159, 160);
}
<div class="full">
代码语言:txt复制 <div class="left">
代码语言:txt复制 </div>
代码语言:txt复制 <div class="right">
代码语言:txt复制 <div class="right-head">
代码语言:txt复制 </div>
代码语言:txt复制 <div class="right-main">
代码语言:txt复制 </div>
代码语言:txt复制 </div>
代码语言:txt复制</div>
代码语言:txt复制*{
margin: 0;
padding: 0;
}
.full{
width: 100%;
height: 100vh;
display: flex;
/* flex-wrap: wrap; */
}
.left{
width: 200px;
height: 100vh;
background: rgb(0, 140, 255);
}
.right{
height: 100vh;
display: flex;
flex:1;
flex-direction: column;
background: rgb(158, 159, 160);
}
.right-head{
height: 80px;
background: cornflowerblue;
}
.right-main{
flex: 1;
background: orange;
}
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e9cca117198743b0a3c9f20b7142831e~tplv-k3u1fbpfcp-zoom-1.image)
居中布局
代码语言:txt复制居中布局在我们日常写页面时经常用到,场景也比较多,eg:
登陆
,弹窗Dialog
.这里我使用flex
来实现 居中布局,flex 实现起来更简洁,这里就不讨论其它实现方法了。如何进行布局通过给父容器 的 宽度 和 高度 都 100% , 铺满整个屏幕, 父容器display
为flex
, 使用justify-content: center;
决定 子元素在主轴的方向上怎么显示,在通过align-items: center;
来决定子元素在交叉轴(竖轴)如何显示。 子容器只要指定width
和 ·height
即可。
<div class="full">
<div class="login">
登陆
</div>
</div>
*{
代码语言:txt复制margin: 0;
代码语言:txt复制padding: 0;
}
.full{
代码语言:txt复制width: 100%;
代码语言:txt复制height: 100vh;
代码语言:txt复制background: rgb(0, 110, 255);
代码语言:txt复制display: flex;
代码语言:txt复制justify-content: center;
代码语言:txt复制align-items: center;
}
.login{
代码语言:txt复制width: 500px;
代码语言:txt复制height: 400px;
代码语言:txt复制line-height: 400px;
代码语言:txt复制text-align: center;
代码语言:txt复制border-radius: 15px;
代码语言:txt复制background: rgb(70, 25, 129);
代码语言:txt复制color: white;
代码语言:txt复制font-size: 33px;
代码语言:txt复制font-weight: 900;
}
<div class="container">
代码语言:txt复制<div class="waterFall">
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1737312773,3182446833&fm=26&gp=0.jpg"
代码语言:txt复制 alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1875486819,805819368&fm=26&gp=0.jpg" alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=35353288,1650949252&fm=26&gp=0.jpg" alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1474216128,3433531408&fm=26&gp=0.jpg"
代码语言:txt复制 alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=143483417,2871731501&fm=26&gp=0.jpg" alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1098989386,3642257866&fm=26&gp=0.jpg"
代码语言:txt复制 alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制 <div class="item">
代码语言:txt复制 <img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1040129980,3013621150&fm=26&gp=0.jpg"
代码语言:txt复制 alt="">
代码语言:txt复制 <p>First</p>
代码语言:txt复制 </div>
代码语言:txt复制</div>
</div>
代码语言:txt复制 .container {
width: 80%;
margin: 0 auto;
}
.waterFall {
/* 页面分几列显示 */
column-count: 4;
-webkit-column-count: 4;
/* Firfox */
-moz-column-count: 4;
/* */
/* 列之间的间距 */
column-gap: 1em;
-webkit-column-gap: 1em;
-moz-column-gap: 1em;
}
.item {
padding: 1em;
margin: 0 0 1em 0;
border: 1px solid orange;
}
.item img {
width: 100%;
margin-bottom: 10px;
}
```![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2c88c2be658d478e91dcd25a7a79324b~tplv-k3u1fbpfcp-zoom-1.image)
总结
本文主要是
HTML
布局进行查缺补漏复习,下一章将进行BOM的补充。祝愿大家都能找到一份好的工作!
本文转自 https://juejin.cn/post/6916520085217607693,如有侵权,请联系删除。