深入浅出CSS
一、CSS使用
- 外联:使用link标签引用
- 嵌入:嵌入到style标签中
- 内联:嵌入到元素的style属性中
二、CSS加载过程
三、选择器
*通配选择器- 标签选择器
#id选择器.类选择器[]属性选择器,可以匹配值,匹配正则符号。
css
[disabled] {
background: #eee;
color: #999;
}
属性选择器对符合条件的元素都会作用,即使该元素原生不具备该属性。
如:给h1标签加
disabled,样式会生效。
伪类:
- 状态伪类
link、active、visited、hover、focus、...
- 顺序
:nth-of-type():表示当前元素的同类兄弟元素, 用 n 来筛选出在一组兄弟节点的位置。:first-child:表示在一组兄弟元素中的第一个元素。:last-child:表示在一组兄弟元素中的最后一个元素。:nth-child(an+b):表示当前元素的所有兄弟元素,按照位置先后顺序从1开始排序,表达式(an+b)匹配到的元素集合:nth-child(1):表示父元素中子元素为第一的标签:nth-child(2n+1)、:nth-child(odd):表示奇数行:nth-child(2n)、:nth-child(even):表示偶数行
注意:
nth-child表示
nth-of-type按照类型来计算
伪元素::
- 附加至选择器末的关键词,允许你对被选择元素的特定部分修改样式。
- 常用
::before::after::first-line
选择器组合
选择器组,
选择器的特异度
- 权重计算规则
- 第零等:
!important, 大过了其它任何设置。 - 第一等:代表内联样式,如: style=””,权值为1000。
- 第二等:代表ID选择器,如:#content,权值为0100。
- 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
- 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
- 第五等:通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
- 第六等:继承的样式没有权值。
- 第零等:
四、属性的特性
继承
某些属性会自动继承其父元素的计算值,除非显式指定一个值。
- 显式继承
inherit,对继承和非继承属性都生效。
初始值
- CSS中每个属性都有一个初始值。
- 使用
initial显式重置为初始值。
五、CSS求值过程
- filtering:匹配各个选择器中有效的属性值
- cascading:对比选择器的特异性,生成层叠值
- defaulting:判断层叠值是否为空。如果为空,使用继承或者初始值,生成不为空的指定值
- resolving:将相对值计算成绝对值,(比如em转化成px,相对路径转化成绝对路径等),生成计算值
- formatting:转化如vh,vw,百分比这种,得到使用值。
- 将小数像素值转为整数
- 完毕
六、颜色表示
#xxxxxx(xx):十六进制rgba:红蓝绿三通道+alpha透明度hsla:色相、饱和度、明亮度+alpha透明度
七、字体表示
字体样式
font-family使用建议:
- 字体列表最后写上通用字体族,如下:
- Serif 衬线体
- Sans-Serif 无衬线体
- Cursive 手写体
- Fantasy (艺术体)
- Monospace 等宽字体
- 英文字体放在中文字体之前
使用web Fonts:
css
@font-facw:{
font-family:"xxx";
src:url("xxx") format("woff2");
}
字体大小
font-size- 关键字:
small、medium、large - 单位:
px、em、rem... - 百分数
- 相对于父元素字体大小
em:根据父元素
rem:根据根元素
字体样式
font-style- normal
- italic
- ...
font—weight- normal(400)
- bold(700)
- 100 - 900
font- style weight size/height family
- 例子:
font: bold 14px/1.7 Helvetica, sans-serif;
八、文本
line-height- normal(约1.2)
- 倍数:相对于元素字体大小**
推荐使用** - 具体长度
- 百分比
text-align- 文本对齐
- left / center / right / justify 两端对齐
spacingletter-spacing字符间距word-spacing单词间距
text-indent首行缩进text-decoration- none / underline / line-through / ...
white-space- normal:空白合并,换行变空白
- nowrap:空白合并,换行失效
- pre:空白保留,遇换行或
<br>换行 - pre-wrap:空白保留,遇换行或
<br>或行内元素换行 - pre-line:空白合并,遇换行或
<br>或行内元素换行
css
/* 允许在pre中换行 */
pre {
word-wrap: break-word; /* IE 5.5-7 */
white-space: pre-wrap; /* current browsers */
}
九、布局
布局相关技术
- 常规流
- 行级
- 块级
- 表格布局
- Flex
- Grid
- 脱离常规流
- 浮动
- 绝对定位
盒子模型
- width
- 默认
content box宽度 - 长度、百分数、auto
- auto由浏览器根据其它属性确定
- 百分数相对于容器的 content box宽度
- 默认
- height
- 同width
- 容器有指定的高度时,百分数才生效
- padding
- 指定四个方向的内边距
- 百分比相对于容器
宽度
- border
border:width style color- 当四边颜色不同时,会用斜线分开
- 实现小三角思路:content为0,设置一边的border
- margin
- 指定四个方向的外边距
- 百分比相对于容器
宽度 margin:0 auto水平居中collapse:上下margin折叠,左右不会。
- box-sizing
- 经常设置为
box-sizing:border-box
- 经常设置为
- overflow
- visible / hidden / scroll
- display
- block / inline / inline-block / none
块级 VS 行级
- 行级元素width、height不适用
- 块级盒子:
body、article、div、main、section、h1-h6、p、ul、li等- 行级元素:
span、em、strong、cite、code等
行级排版上下文(IFC)
只包含行级盒子的容器- 排版规则
- 盒子在一行内水平摆放
- 行放不下时,换行显示
text-align决定一行内盒子的水平对齐vertical-align决定一个盒子在行内的垂直对齐- 避开浮动
float元素
块级排版上下文(BFC)
- 某些容器会创建BFC
- 根元素
- 浮动、绝对定位、 inline-block
- Flex子项和Grid子项
- overflow值不是 visible的块盒
- display: flow-root
- 排版规则
- 盒子从上到下摆放
- 垂直margin合并
- BFC内的margin不会与外面的合并
- BFC不会与浮动元素重叠
Flex排版上下文
- 一种新的排版上下文
- 可以控制子级盒子的
- 摆放的流向(→←↑↓)
- 摆放顺序
- 盒子宽度和高度
- 水平和垂直方向的对齐
- 是否允许折行
- 主轴(水平)与侧轴(竖直)
flex-direction: row / column / row-reserve / column-reservejustify-content主轴对齐align-items:侧轴对齐align-self:给特定元素设定order:默认为0,给元素设定顺序flexibilityflex-grow有剩余空间时的伸展能力flex-shrink容器空间不足时收缩的能力,默认为1flex-basis没有伸展或收缩时的基础长度
- 属性的简写
Grid排版上下文
display:grid使元素生成一个块级的Grid容器使用
grid-template相关属性将容器划分为网格设置每一个子项占哪些行列
划分网络
grid-template-columnsgrid-template-rows- 相关语法
repeat(number,length)fr按比例划分minmax(min,max)
分配空间
grid-area: 1/1/3/3grid-row-start:1grid-column-start: 1grid-row-end: 3grid-column-end: 3
Float
- 适用场景:图文环绕
html
<section>
<img src="https://p4.ssl.qhimg.com/t017aec0e7edc961740.jpg" width="300" alt="mojave" />
<p>莫哈韦沙漠不仅纬度较高,而且温度要稍微低些,是命名该公园的短叶丝兰——约书亚树的特殊栖息地。约书亚树以从茂密的森林到远远间隔的实例等各种形式出现。除了约书亚树森林之外,该公园的西部包括加州沙漠里发现的最有趣的地质外观。
</p>
</section>
<style>
img {
float: left;
}
p {
font-size: 20px;
line-height: 1.8;
}
</style>
position属性
static:默认值,非定位元素relative:相对自己偏移absolute- 脱离常规流
- 相对于最近
非static祖先定位 - 不会对流内元素布局造成影响
fixed- 脱离文档流
- 相对于视口定位
sticky
十、其他
- aria-xxx
- 早期HTML4引入的方法,现推荐使用
正确语义的HTML元素 - 向HTML 中添加语义和其他元数据的W3C (en-US) 规范,以满足用户的辅助技术的需要。
- 例如:在这个例子中,
role="progressbar"属性通知浏览器这个元素实际上是一个 JavaScript 驱动的进度条小部件。aria-valuemin和aria-valuemax属性指定进度条的最小值和最大值,aria-valuenow描述进度条的当前状态和因此必须使用 JavaScript 保持更新。
- 早期HTML4引入的方法,现推荐使用
html
<div id="percent-loaded" role="progressbar" aria-valuenow="75"
aria-valuemin="0" aria-valuemax="100">
</div>
- 优雅降级/渐进增强
参考链接🔗


