Flex(弹性布局)属性手册

image

容器默认存在两根轴:**水平的主轴(main axis)** 和**垂直的交叉轴(cross axis)** 。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

Flex布局分容器属性和子项属性两种类型。

Flex布局的步骤为
1.设置为flex容器
display: flex;
2.设置主轴方向是行还是列
flex-direction: row;
3.设置换不换行
flex-wrap: wrap;
然后
justify-content
flex

/* Flex 容器属性 */

display: flex; /* 设置为 flex 容器 */
display: inline-flex; /* 设置为内联 flex 容器 */

flex-direction: row; /* 主轴方向为行,子项从左到右排列 (默认) */
flex-direction: row-reverse; /* 主轴方向为行,子项从右到左排列 */
flex-direction: column; /* 主轴方向为列,子项从上到下排列 */
flex-direction: column-reverse; /* 主轴方向为列,子项从下到上排列 */

flex-wrap: nowrap; /* 子项不换行 (默认) */
flex-wrap: wrap; /* 子项换行 */
flex-wrap: wrap-reverse; /* 子项反向换行 */

flex-flow: row nowrap; /* 简写属性,设置 flex-direction 和 flex-wrap */

justify-content: flex-start; /* 沿主轴从起点对齐 (默认) */
justify-content: flex-end; /* 沿主轴从终点对齐 */
justify-content: center; /* 沿主轴居中对齐 */
justify-content: space-between; /* 子项均匀分布,首尾对齐 */
justify-content: space-around; /* 子项均匀分布,两端留一半间距 */
justify-content: space-evenly; /* 子项均匀分布,两端与中间间距相等 */

align-items: flex-start; /* 沿交叉轴从起点对齐 */
align-items: flex-end; /* 沿交叉轴从终点对齐 */
align-items: center; /* 沿交叉轴居中对齐 */
align-items: baseline; /* 子项基线对齐 */
align-items: stretch; /* 子项在交叉轴上拉伸以填满容器 (默认) */

align-content: flex-start; /* 多行时,沿交叉轴从起点对齐 */
align-content: flex-end; /* 多行时,沿交叉轴从终点对齐 */
align-content: center; /* 多行时,沿交叉轴居中对齐 */
align-content: space-between; /* 多行时,均匀分布,两端对齐 */
align-content: space-around; /* 多行时,均匀分布,两端有一半间距 */
align-content: stretch; /* 多行时,在交叉轴上拉伸以填满容器 */

/* Flex 子项属性 */
flex: <flex-grow> <flex-shrink> <flex-basis>; /* 设置子项的放大、缩小和基础尺寸 */
flex: 1; /* 子项等比例放大,不缩小,基础尺寸为 0 */
flex-grow: 1; /* 子项的放大比例 (默认为 0) */
flex-shrink: 1; /* 子项的缩小比例 (默认为 1) */
flex-basis: auto; /* 子项分配空间前的初始大小 */

align-self: auto; /* 覆盖容器的 align-items 设置 */
align-self: flex-start; /* 当前子项沿交叉轴从起点对齐 */
align-self: flex-end; /* 当前子项沿交叉轴从终点对齐 */
align-self: center; /* 当前子项沿交叉轴居中对齐 */
align-self: baseline; /* 当前子项基线对齐 */
align-self: stretch; /* 当前子项在交叉轴上拉伸以填满容器 */

order: 0; /* 设置子项的排列顺序 (数值越小,排列越靠前,默认为0) */

Grid(网格布局)属性手册

网格(grid)是一组相交的水平线和垂直线,它定义了网格的列和行。

网格布局(grid)由一个父元素(`网格容器`​)及一个或多个子元素(项目)组成。

CSS 提供了一个基于网格的布局系统,带有行和列,可以让我们更轻松地设计网页,而无需使用浮动和定位。

网格容器:

要使 HTML 元素变成一个`网格容器`​,可以将 display属性设置为 grid 或 inline-grid。

网格容器包含了一个或多个网格元素。

网格元素:

默认情况下,网格容器的每一列和每一行都有一个网格元素,我们也可以设置网格元素跨越多个列或行,行和列为行号。

网格容器内放置着由列和行内组成的网格元素。

以下是一个简单的网页布局,使用了网格布局。

image

/* Grid 容器属性 */
display: grid; /* 设置为 grid 容器 */
display: inline-grid; /* 设置为内联 grid 容器 */

grid-template-columns: 1fr 2fr; /* 定义列轨道宽度:1fr 和 2fr */
grid-template-rows: 100px auto; /* 定义行轨道高度:100px 和自动分配 */

grid-template-areas: /* 定义网格区域名称 */
"header header"
"sidebar main"
"footer footer";

grid-template: /* 使用简写定义网格 */
"header header" 100px
"sidebar main" auto
"footer footer" 50px
/ 1fr 2fr;

grid-column-gap: 10px; /* 设置列间距 */
grid-row-gap: 15px; /* 设置行间距 */

gap: 10px 15px; /* 设置行与列的间距,10px 行间距,15px 列间距 */

justify-items: start; /* 沿列轴对齐子项:start, end, center, stretch (默认) */
align-items: center; /* 沿行轴对齐子项:start, end, center, stretch (默认) */

justify-content: space-around; /* 沿列轴对齐整个网格:start, end, center, space-between, space-around, space-evenly */
align-content: space-between; /* 沿行轴对齐整个网格:start, end, center, space-between, space-around, space-evenly */

grid-auto-columns: 100px; /* 自动生成列的宽度 */
grid-auto-rows: 200px; /* 自动生成行的高度 */
grid-auto-flow: row; /* 控制自动放置子项的方向:row, column, row dense, column dense */

/* Grid 子项属性 */
grid-column-start: 1; /* 子项的起始列位置 */
grid-column-end: 3; /* 子项的结束列位置 */
grid-row-start: 2; /* 子项的起始行位置 */
grid-row-end: 4; /* 子项的结束行位置 */

grid-column: 1 / 3; /* 子项在列上跨越的起止位置 */
grid-row: 2 / 4; /* 子项在行上跨越的起止位置 */

grid-area: header; /* 使用命名网格区域放置子项 */

justify-self: end; /* 子项在列轴对齐方式:start, end, center, stretch (默认) */
align-self: stretch; /* 子项在行轴对齐方式:start, end, center, stretch (默认) */

Position(定位)属性手册

/* 定位(Position)相关属性 */

/* position 属性 */
position: static; /* 默认值,元素按文档流正常排列,不脱离文档流 */
position: relative; /* 相对定位,元素相对于自身的初始位置偏移 */
position: absolute; /* 绝对定位,元素脱离文档流,相对于最近的定位祖先偏移 */
position: fixed; /* 固定定位,元素脱离文档流,相对于视口偏移 */
position: sticky; /* 粘性定位,元素在滚动到设定位置后固定,适用于导航栏等 */

/* 偏移属性:在非 static 定位的元素上有效 */
top: 10px; /* 定义元素距离顶部的偏移量 */
right: 10px; /* 定义元素距离右侧的偏移量 */
bottom: 10px; /* 定义元素距离底部的偏移量 */
left: 10px; /* 定义元素距离左侧的偏移量 */
/* 子绝父相 */
- 子元素相对父元素进行定位。例如右上角的关闭图片,标签图片等。
- 使用方法:设置父元素position: relative; 子元素设置position: absolute;然后进行定位。

/* 应用场景和解释 */

/* 1. 静态定位 (static) */

- 应用场景:默认定位,适用于不需要特定位置调整的元素。
- 特性:元素按文档流正常排列,不能使用偏移属性 (top, right, bottom, left)。


/* 2. 相对定位 (relative) */

- 应用场景:用于微调元素位置,同时保留原位置的占位;例如,轻微调整图片或文本位置。
- 特性:元素偏移,但不脱离文档流,原位置仍保留。


/* 3. 绝对定位 (absolute) */

- 应用场景:用于精确控制元素位置,例如弹出层、浮动按钮。
- 特性:元素脱离文档流,相对于最近的定位祖先(非 static)偏移,如果无定位祖先则相对于视口。


/* 4. 固定定位 (fixed) */

- 应用场景:用于固定在视口的元素,如固定的导航栏、回到顶部按钮。
- 特性:元素脱离文档流,始终固定在视口的指定位置,不受页面滚动影响。


/* 5. 粘性定位 (sticky) */

- 应用场景:用于在页面滚动到一定位置时保持固定的元素,如“粘性”导航栏。
- 特性:元素在指定偏移位置上滚动到达后固定,其他位置按文档流排列。


/* 使用示例 */

.header {
position: sticky; /* 粘性定位 */
top: 0; /* 滚动到页面顶部时固定 */
}

.modal {
position: fixed; /* 固定定位 */
top: 50%; /* 视口垂直居中 */
left: 50%; /* 视口水平居中 */
transform: translate(-50%, -50%); /* 完全居中对齐 */
}

.tooltip {
position: absolute; /* 绝对定位 */
top: -10px; /* 偏移位置 */
left: 100%; /* 位于触发元素右侧 */
}

瀑布流布局/无限滚动(Masonry Layout)

5 种瀑布流场景的实现原理解析

瀑布流 特点
纵向+高度排序 纯 CSS 多列实现,是最简单的瀑布流写法
纵向+高度排序+根据宽度自适应列数 通过 JS 根据屏幕宽度计算列数,在 web 端更加灵活的展示瀑布流
横向 纯 CSS 弹性布局实现,是最简单的横向瀑布流写法
横向+高度排序 横向+高度排序的瀑布流,需要通过 JS 计算每一列高度,损耗性能,但是可以避免某列特别长的情况,体验更好
横向+高度排序+根据宽度自适应列数 需要通过 JS 计算每一列高度,并根据屏幕宽度计算列数,损耗性能,但是可以避免某列特别长的情况,并且可以在 web 端更加灵活的展示瀑布流,体验更好,是 5 种瀑布流中用户体验最好的

多媒体查询(@media)

/* 媒体查询语法 */
@media 媒体类型 (条件) {
/* 符合条件时应用的 CSS 样式 */
}

@media not|only mediatype and (expressions) {
/*CSS 代码...;*/
}
{
- not: not是用来排除掉某些特定的设备的,比如 @media not print(非打印设备)。

- only: 用来定某种特别的媒体类型。对于支持Media Queries的移动设备来说,如果存在only关键字,移动
设备的Web浏览器会忽略only关键字并直接根据后面的表达式应用样式文件。对于不支持Media Queries的设
备但能够读取Media Type类型的Web浏览器,遇到only关键字时会忽略这个样式文件。

- all: 所有设备,这个应该经常看到。
}
/* 常用媒体类型 */
@media screen {
/* 应用于所有屏幕设备 */
}

@media print {
/* 应用于打印设备 */
}

@media all {
/* 适用于所有设备类型 */
}

/* 媒体查询条件 */

/* 1. 宽度和高度条件 */
@media (min-width: 600px) {
/* 屏幕宽度 >= 600px 时应用 */
}

@media (max-width: 1200px) {
/* 屏幕宽度 <= 1200px 时应用 */
}

@media (min-height: 500px) {
/* 屏幕高度 >= 500px 时应用 */
}

/* 2. 设备方向条件 */
@media (orientation: landscape) {
/* 横屏模式下应用 */
}

@media (orientation: portrait) {
/* 竖屏模式下应用 */
}

/* 3. 分辨率条件 */
@media (min-resolution: 2dppx) {
/* 分辨率 >= 2dppx (即 Retina 显示屏) 时应用 */
}

@media (min-resolution: 300dpi) {
/* 分辨率 >= 300dpi 时应用 */
}

/* 4. 灰阶和彩色显示条件 */
@media (color) {
/* 仅在支持彩色的设备上应用 */
}

@media (monochrome) {
/* 仅在灰阶显示设备上应用 */
}
/* 操作符 */

/* `and` - 组合多个条件 */
@media screen and (min-width: 600px) and (orientation: landscape) {
/* 屏幕设备、宽度 >= 600px、横屏模式时应用 */
}

/* `not` - 排除特定条件 */
@media not screen and (color) {
/* 应用于非屏幕设备或不支持彩色的设备 */
}

/* `only` - 限制媒体查询的应用,仅在支持媒体查询的浏览器上使用 */
@media only screen and (max-width: 768px) {
/* 仅在支持媒体查询的浏览器上应用,屏幕宽度 <= 768px */
}

/* 常见应用实例 */

/* 适配小屏设备(如手机) */
@media (max-width: 600px) {
body {
font-size: 14px;
padding: 10px;
}
}

/* 适配中等屏幕设备(如平板) */
@media (min-width: 601px) and (max-width: 1024px) {
body {
font-size: 16px;
padding: 15px;
}
}

/* 适配大屏设备(如桌面) */
@media (min-width: 1025px) {
.container {
max-width: 1200px;
margin: 0 auto;
}
}

/* 打印样式 */
@media print {
.header, .footer {
display: none; /* 打印时隐藏头部和底部 */
}
}

/* 横屏模式的大屏幕样式 */
@media screen and (orientation: landscape) and (min-width: 1024px) {
.header {
font-size: 24px;
}
}

CSS常见单位解释及其应用场景

/* 像素单位 */
px /* 像素,绝对单位,适用于精确的尺寸设置,例如边距、宽度、高度等 */

/* 百分比单位 */
% /* 百分比,相对单位,基于父元素的尺寸,常用于宽度、高度、边距等,适用于响应式布局 */

/* em单位 */
em /* 相对单位,基于当前元素的字体大小,适用于字体大小、边距、填充等,适合根据父元素的字体大小动态调整 */

/* rem单位 */
rem /* 相对单位,基于根元素(<html>)的字体大小,适用于字体大小、边距、填充等,适合全局一致性和响应式设计 */

/* vw单位 */
vw /* 视口宽度单位,1vw 等于视口宽度的 1%,适用于宽度和高度设置,特别适合响应式设计 */

/* vh单位 */
vh /* 视口高度单位,1vh 等于视口高度的 1%,常用于设置全屏元素的高度 */

/* vmin单位 */
vmin /* 视口最小边单位,1vmin 等于视口宽度和高度中较小者的 1%,适合响应式设计中的自适应元素 */

/* vmax单位 */
vmax /* 视口最大边单位,1vmax 等于视口宽度和高度中较大者的 1%,适合响应式设计中的自适应元素 */

/* cm单位 */
cm /* 厘米,绝对单位,通常用于打印样式,不常用于网页设计 */

/* mm单位 */
mm /* 毫米,绝对单位,通常用于打印样式,不常用于网页设计 */

/* in单位 */
in /* 英寸,绝对单位,通常用于打印样式,不常用于网页设计 */

/* pt单位 */
pt /* 点,绝对单位,通常用于印刷,1pt = 1/72英寸,不常用于网页设计 */

/* pc单位 */
pc /* 派卡,绝对单位,1pc = 12pt,通常用于印刷,不常用于网页设计 */

  • 像素 (px)​: 适合需要精确控制的尺寸,例如边框宽度、图像大小等。
  • 百分比 (%)​: 常用于宽度、高度等属性,以便元素在父元素中的相对位置调整。
  • 相对单位 (em, rem)​: 适用于字体和布局设置,可以通过父元素或根元素的字体大小进行灵活调整,便于响应式设计。
  • 视口单位 (vw, vh, vmin, vmax)​: 适合用于响应式布局,可以根据浏览器窗口的大小动态调整元素的尺寸。
  • 绝对单位 (cm, mm, in, pt, pc)​: 主要用于打印或特定场景下,不常用于网页设计。