该文主要是帮助直接梳理知识点,具体讲解可以点击文中连接,大佬的讲的内容好得多
不过可以来我的博客看看,说不定有什么收获https://zo-no.github.io/
一、CSS发展历史
现代 CSS 进化史 - 知乎 (zhihu.com)(只浏览了)
- 浮动的布局:2006年,A List Apart 上发表了一篇热门文章 In Search of the Holy Grail,文章概述了实现圣杯布局的详细方法——一个头部、三列内容和一个底部,你一定觉得一个简单的布局被称为圣杯布局很疯狂吧,但是在当时纯 CSS 的时代这的确很难实现。
- 基于 Flexbox 的布局:Flexbox CSS 属性实在2009年第一次提出来的,但直到2015年才得到浏览器的广泛支持。
- 基于 Grid的布局:CSS网格最早在2011年提出的(比flexbox提案晚不了多久),但是花了好长时间才在浏览器上普及起来。截止2018年初,大多数现代浏览器都已经支持CSS grid(这比一两年前有巨大的进步了)
- 使用 CSS 预处理器扩展 CSS 语法
二、单位
一文读懂 CSS 单位 - 知乎 (zhihu.com)
px:像素
相对单位
字体
em:1em = font-size的值(大概,如果嵌套起来,就按链计算)
rem:按根来算
ex:所用字体中小写字母 x 的高度。
ch:基于数字 0 的宽度计算的。会随着字体的变化而变化。
视窗(CSS3)
- vw:视窗宽度的百分比;(css3)
- vh:视窗高度的百分比;(css3)
min-height: 50vh;
在全局中加上这个,那么显示就只有一半页面
- vmax:较大的 vh 和 vw;(css3)
- vmin:较小的 vh 和 vw。(css3)
vmin 和 vmax 与视窗宽度和高度的最大值和最小值有关。假如一个浏览器高度为500px,宽度为1200px,那么1vmin就是5px,1vmax就是12px。
绝对单位
1in = 25.4mm = 2.54cm = 6pc(Picas,印刷术语) = 72pt(Point,印刷术语) =96px
1pc = 16px
1cm = 37.8px
1mm = 3.78px
1in(inches,英尺) = 96px
频率、时间、分辨率单位
通常情况下,频率单位使用在听或说级联样式表中。频率可以被用来改变一个语音阅读文本的音调。低频率就是低音,高频率就是高音。
1kHz = 1000Hz
时间单位主要用于过度和动画中,用于定义持续时间或延迟时间。下面两种定义是等效的:
/*1s = 1000ms*/
a[href] {
transition-duration: 2.5s;
}
a[href] {
transition-duration: 2500ms;
}
主要用于媒体查询
1dppx = 96dpi
1dpi ≈ 0.39dpcm
1dpcm ≈ 2.54dpi
角度单位(CSS3)
一般这些角度单位用于元素的**旋转操作,**包括2D旋转、3D旋转等。
90deg(Degress,度) = 100grad(Radians,梯度) = 0.25turn(Turns,圈) ≈ 1.570796326794897rad(Radians,弧度)
360度=400梯度
百分比单位
邪门知识点(bushi)
font-size: 62.5%的意义
font-size: 62.5%的意义_font-size 62.5-CSDN博客
让1rem=16px变为1rem=10px
三、五种布局
CSS布局(重点整理) - 知乎 (zhihu.com)
流式布局:块和内联
绝对定位(position)
CSS position
属性用于指定一个元素在文档中的定位方式。
浮动(float)
float
CSS 属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,但是仍然保持部分的流动性(与绝对定位相反)。
表格(table)
弹性(flex)
Flex 布局教程:语法篇 - 阮一峰的网络日志 (ruanyifeng.com)
是什么?
Flex 布局示例 (vgee.cn)
这是一位网友根据阮一峰大佬的文章写的实现,可以按F12
去样式里面调着玩玩
容器的属性
flex-direction: row | row-reverse | column | column-reverse;
flex-wrap: nowrap | wrap | wrap-reverse;
flex-flow: <flex-direction> || <flex-wrap>;/*简写*/
justify-content: flex-start | flex-end | center | space-between | space-around;
align-items: flex-start | flex-end | center | baseline | stretch;
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
项目的属性
order: <integer>;
flex-grow: <number>; /* default 0 */
flex-shrink: <number>; /* default 1 */
flex-basis: <length> | auto; /* default auto */
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]/*是flex-grow, flex-shrink 和 flex-basis的简写*/
align-self: auto | flex-start | flex-end | center | baseline | stretch;
实战
Flex 布局教程:实例篇 - 阮一峰的网络日志 (ruanyifeng.com)
网格(grid)
CSS Grid 网格布局教程 - 阮一峰的网络日志 (ruanyifeng.com)
容器属性
display: grid;
grid-template-columns:...;
grid-template-rows:repeat();
1. grid-template-columns 属性, grid-template-rows 属性
(1)repeat()
(2)auto-fill 关键字:自动填充
(3)fr 关键字:比例
.container {
display: grid;
grid-template-columns: 150px 1fr 2fr;
}
(4)minmax():产生一个长度范围,表示长度就在这个范围之中
grid-template-columns: 1fr 1fr minmax(100px, 1fr);
(5)auto 关键字
grid-template-columns: 100px auto 100px;
基本上等于该列单元格的最大宽度,除非单元格内容设置了min-width
(6)网格线的名称
使用方括号,指定每一根网格线的名字(允许同一根线有多个名字)
grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];
grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
2.grid-row-gap 属性, grid-column-gap 属性, grid-gap 属性
grid-row-gap
属性设置行与行的间隔(行间距)。
grid-column-gap
属性设置列与列的间隔(列间距)。
grid-gap
属性是grid-column-gap
和grid-row-gap
的合并简写形式。grid-gap: <grid-row-gap> <grid-column-gap>;
如果省略第二个值,自动认为第二个值等于第一个值
.container {
grid-row-gap: 20px;
grid-column-gap: 20px;
/* = grid-gap: 20px 20px;*/
}
根据最新标准,上面三个属性名的grid-
前缀已经删除,grid-column-gap
和grid-row-gap
写成column-gap
和row-gap
,grid-gap
写成gap
。
3.grid-template-areas 属性
用于定义区域。该定义与后面的项目属性中的grid-area
联动
.container {
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
grid-template-areas: 'a b c'
'd e f'
'g h i';
}
区域的命名会影响到网格线。
4.grid-auto-flow 属性
默认的放置顺序是"先行后列",这个顺序由grid-auto-flow
属性决定,默认值是row
,即"先行后列"。也可以将它设成column
,变成"先列后行"。
grid-auto-flow: column;
5.justify-items 属性, align-items 属性, place-items 属性
justify-items
属性设置单元格内容的水平位置(左中右),align-items
属性设置单元格内容的垂直位置(上中下),place-items
属性是align-items
属性和justify-items
属性的合并简写形式。place-items: <align-items> <justify-items>;
.container {
justify-items: start;
align-items: start;
/*place-items: start end;*/
}
6.justify-content 属性, align-content 属性, place-content 属性
justify-content
属性是整个内容区域在容器里面的水平位置(左中右),align-content
属性是整个内容区域的垂直位置(上中下)。place-content
属性是align-content
属性和justify-content
属性的合并简写形式。
.container {
justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
}
7.grid-auto-columns 属性, grid-auto-rows 属性
用来设置,浏览器自动创建的多余网格的列宽和行高。
8.grid-template 属性, grid 属性
grid-template
属性是grid-template-columns
、grid-template-rows
和grid-template-areas
这三个属性的合并简写形式。
grid
属性是grid-template-rows
、grid-template-columns
、grid-template-areas
、 grid-auto-rows
、grid-auto-columns
、grid-auto-flow
这六个属性的合并简写形式。
项目属性
1.grid-column-start 属性, grid-column-end 属性, grid-row-start 属性, grid-row-end 属性
grid-column-start
属性:左边框所在的垂直网格线grid-column-end
属性:右边框所在的垂直网格线grid-row-start
属性:上边框所在的水平网格线grid-row-end
属性:下边框所在的水平网格线
.item-1 {
grid-column-start: 2;
grid-column-end: 4;
}
/*第二条线出发,第四条结束*/
grid-auto-flow
属性决定排列,column、
row dense和
column dense也生效,这四个属性的值,除了指定为第几个网格线,还可以指定为网格线的名字。
span
关键字,表示"跨越",即左右边框(上下边框)之间跨越多少个网格。
.item-1 {
grid-column-start: span 2;
}
2. grid-column 属性, grid-row 属性
grid-column
属性是grid-column-start
和grid-column-end
的合并简写形式,grid-row
属性是grid-row-start
属性和grid-row-end
的合并简写形式。
.item {
grid-column: <start-line> / <end-line>;
grid-row: <start-line> / <end-line>;
}
.item-1 {
grid-column: 1 / 3;
grid-row: 1 / 2;
}
/* 等同于 */
.item-1 {
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 2;
}
/* 等同于 */
.item-1 {
background: #b03532;
grid-column: 1 / span 2;
grid-row: 1 / span 2;
}
斜杠以及后面的部分可以省略,默认跨越一个网格。
3.grid-area 属性
grid-area
属性指定项目放在哪一个区域。
grid-area
属性还可用作grid-row-start
、grid-column-start
、grid-row-end
、grid-column-end
的合并简写形式,直接指定项目的位置。
.item {
grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
}
4.justify-self 属性, align-self 属性, place-self 属性
justify-self
属性设置单元格内容的水平位置(左中右),跟justify-items
属性的用法完全一致,但只作用于单个项目。
align-self
属性设置单元格内容的垂直位置(上中下),跟align-items
属性的用法完全一致,也是只作用于单个项目。
place-self
属性是align-self
属性和justify-self
属性的合并简写形式。
实例
CSS布局方案汇总(30个实例图文并茂) - 掘金 (juejin.cn)