freeCodeCamp之 flex 弹性盒子
免费学习编程的网站 freeCodeCamp(🔥) - 官方版(英文)
效果展示
css解析
* 选择器
* {
box-sizing: border-box;
}
*
选择器选择所有元素。
盒子模型设置
box-sizing: border-box;
box-sizing的默认值是content-box:
标准盒子模型,一般浏览器也都默认为标准盒子模型
相当于一个元素的实际宽高是由: padding + border + content 组成
box-sizing:border-box
怪异盒子模型,一般根据实际项目需要自行设置padding和border的值就
不会在影响元素的宽高,相当于把padding和border的值都算在content里,盒子模型会自动根据padding和border的值来调整content的值,就不需要手动调整
body选择器
body {
margin: 0;
font-family: sans-serif;
background: #f5f6f7;
}
从 body 元素中删除外边距,将 font-family
设置为 sans-serif
,并将 background-color
设置为#f5f6f7
。
由于一般浏览器都给body设置了8px的 margin值,因此如果我们不做单独的处理,那么他就会留存一个间隙。把body的margin设为0后,左边和头部就没有缝隙
.header 选择器
.header {
text-align: center;
text-transform: uppercase;
padding: 32px;
background-color: #0a0a23;
color: #fff;
border-bottom: 4px solid #fdb347;
}
text-align: center;
文本居中
text-transform: uppercase;
定义无小写字母,仅有大写字母
padding: 32px;
将其所有方向的内边距都设置为 32px
background-color: #0a0a23;
设置背景颜色
color
设置字体颜色
border-bottom: 4px solid #fdb347;
设置下边框
.gallery 选择器
.gallery {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 16px;
max-width: 1400px;
margin: 0 auto;
padding: 20px 10px;
}
display: flex;
声明容器指定为 Flex 布局
若要将元素设置为使用 Flexbox 布局,请将 display 属性设置为 flex。 这将使元素变成一个 flex 容器。 flex 容器内的直接子元素叫做 flex 项目。
flex-direction: row;
flex-direction属性决定主轴的方向(即项目的排列方向)。row(默认值):主轴为水平方向,起点在左端。
它可能有4个值。
- row(默认值):主轴为水平方向,起点在左端。
- row-reverse:主轴为水平方向,起点在右端。
- column:主轴为垂直方向,起点在上沿。
- column-reverse:主轴为垂直方向,起点在下沿。
flex-wrap: wrap;
flex-wrap属性定义,如果一条轴线排不下,如何换行。
它可能取三个值。
- nowrap(默认):不换行。
- wrap:换行,第一行在上方。
- wrap-reverse:换行,第一行在下方。
justify-content: center;
justify-content属性定义了项目在主轴上的对齐方式。
它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。
- flex-start(默认值):左对齐
- flex-end:右对齐
- center: 居中
- space-between:两端对齐,项目之间的间隔都相等。
- space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
align-items: center;
align-items属性定义项目在交叉轴上如何对齐。
它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。
- flex-start:交叉轴的起点对齐。
- flex-end:交叉轴的终点对齐。
- center:交叉轴的中点对齐。
- baseline: 项目的第一行文字的基线对齐。
- stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
gap: 16px;
设置网格行与列之间的间隙:
max-width: 1400px;
max-width属性设置元素的最大宽度。 max-width属性不包括填充,边框,或页边距!
margin: 0 auto;
水平居中
padding: 20px 10px;
设置内边距。给容器周围增加一点空间。
.gallery img 选择器
.gallery img {
width: 100%;
max-width: 350px;
height: 300px;
object-fit: cover;
border-radius: 10px;
}
创建一个.gallery img
选择器来定位你的图像。 将它们的 width 属性设置为 100%,max-width 设置为 350px,以便它们适当调整,不至于太大。
并将 height 属性设置为 300px,以保持图像大小一致。
请注意你的一些图像是如何失真的。 这是因为图像具有不同的纵横比。 你可以使用 object-fit 属性来确定图像的行为方式,而不是单独设置每个纵横比。为 .gallery img 选择器提供一个 object-fit 属性,并将其设置为 cover。 这将告诉图像填充 img 容器,同时保持横纵比,以便裁剪到适合。
border-radius: 10px;
为图片添加一个圆角
伪选择器
.gallery::after {
content: "";
width: 350px;
}
::after
用来创建一个伪元素,作为已选中元素的最后一个子元素。 你可以用它在最后一个图像后添加一个空元素。 如果你设置其 width 为和图像相同,如果是两列布局,它会将最后一张图像挤到左边。 现在它居中显示,因为你在 flex 容器上设置了 justify-content: center
。
使用 ::after
伪元素在.gallery
元素上创建一个新的选择器。 添加 content 属性设置为空字符串 “” 并设置 width 为 350px。
content属性
::before
和::after
下特有的content,用于在css渲染中向元素逻辑上的头部或尾部添加内容。::before
和::after
必须配合content属性来使用,content用来定义插入的内容,content必须有值,至少是空- 这些添加不会出现在DOM中,不会改变文档内容,不可复制,仅仅是在css渲染层加入。所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容
flex的教程可以参考阮一峰 Flex 布局教程:语法篇
评论