【笔记】CSS 学习笔记
前言
层叠样式表是一种用来为结构化文档添加样式的计算机语言,由W3C定义和维护。当前最新版本是CSS2.1,为W3C的推荐标准。CSS3现在已被大部分现代浏览器支持,而下一版的CSS4仍在开发中。(维基百科)
语法规则
1 | 选择器 { |
使用的方式
内联样式(行内样式)
- 写在
HTML
标签内
样式声明
:样式属性:样式值
1 | <any style="样式声明"></any> |
内部样式
- 在
<style></style>
标签内写样式 <style></style>
标签写在<head></head>
标签内
1 | <head> |
外部样式
- 在
<head></head>
引用外部.css
文件
herf
:资源路径
1 | <link rel="stylesheet" herf=""> |
优先级
- 如果多个样式作用到一个元素上,样式冲突,则按照样式规则的优先级应用
最低:浏览器默认样式
就近原则:哪个样式距离元素近,就选哪个
最高:内联样式
选择器的权值
- 标识当前选择器的重要程度,权值越大优先级越高
- 当一个选择器中包含有多个选择器时,需要将所有选择器权值进行相加,然后比较权值大的优先显示
- 权值相同,就近原则
- !important,直接获取最高优先级,内联样式不允许加
!important
- 群组选择器的权值,单独计算,不能相加
- 选择器权值的计算,结算结果不能超过本身的最大数量级
!important
>1000内联样式
=1000id选择器
=100类/伪类选择器
=10元素选择器
=1通用选择器
=0继承的样式
=null
调整优先级
- 放在属性之后,与属性值用空格分开,可以把该样式属性的优先级调到最高
1 | !important <规则> |
选择器
基础选择器
通用选择器
1 | * {样式声明} |
标签选择器(元素选择器)
1 | 元素名称 {样式声明} |
id选择器
1 | #元素的id属性值 {样式声明} |
类选择器
1 | .元素的class属性值 {样式声明} |
类名的规范
- 类名不能以数字开头
- 除了
-_
不能带其他符号 - 尽量见名知意
多类选择器
1 | <any class="类名1 类名2 类名2"></any> |
群组选择器
- 将多个选择器放在一起定义公共样式
1 | 选择器1,选择器2,选择器3 {样式声明} |
后代选择器
- 一代或者多于一代的嵌套
1 | 选择器1 选择器2 选择器3 {样式声明} |
子代选择器
- 一级嵌套
1 | 选择器1>选择器2 {样式声明} |
伪类选择器
- 匹配元素的不同状态
匹配链接未访问的状态
1 | 基础选择器:link {样式声明} |
匹配链接已访问的状态
1 | 基础选择器:visited {样式声明} |
匹配鼠标悬停时的状态
1 | 基础选择器:hover {样式声明} |
匹配元素被激活的状态
1 | 基础选择器:active {样式声明} |
注意:以上四个有顺序要求,才不会冲突
匹配元素获取焦点时的状态
1 | 基础选择器:focus {样式声明} |
匹配不可使用的表单元素
1 | 基础选择器:disable {样式声明} |
匹配空文本的标签
1 | 基础选择器:empty {样式声明} |
匹配被激活的锚点
1 | 基础选择器:target {样式声明} |
属性选择器
- 通过元素的内置属性或自定义属性
1 | 标签名[属性名] {样式声明} |
模糊匹配属性值
以模糊值开头
1 | 标签名[属性名^="模糊值"] {样式声明} |
以模糊值结尾
1 | 标签名[属性名$="模糊值"] {样式声明} |
包含模糊值
1 | 标签名[属性名*="模糊值"] {样式声明} |
子类选择器(不区分子元素类型)
匹配子代第一个元素
1 | 基础选择器:first-child {样式声明} |
匹配子代最后一个元素
1 | 基础选择器:last-child {样式声明} |
匹配子代指定位置的元素
- 下标从1开始
<num>
:指定位置。不但可以是纯数字,也可以是一个包含n的函数
1 | 基础选择器:nth-child(<num>) {样式声明} |
匹配子代指定倒数位置的元素
- 下标从1开始
1 | 基础选择器:nth-last-child(<num>) {样式声明} |
子类选择器(区分子元素类型)
- 依次匹配每个父级对应的子级
匹配子类指定类型第一个元素
1 | 基础选择器:first-of-type {样式声明} |
匹配子类指定类型最后一个元素
1 | 基础选择器:last-of-type {样式声明} |
匹配子类指定类型指定位置的元素
- 下标从1开始
1 | 基础选择器:nth-child(<num>) {样式声明} |
匹配子类指定类型指定倒数位置的元素
- 下标从1开始
1 | 基础选择器:nth-last-child(<num>) {样式声明} |
匹配属于其父元素唯一的子元素
1 | 基础选择器:only-child {样式声明} |
关系型选择器
同级紧随其后的一个兄弟元素
1 | 选择器1+选择器2 {样式声明} |
同级紧随其后的所有兄弟元素
1 | 选择器1~选择器2 {样式声明} |
伪元素选择器
匹配第一个字符
1 | 基础选择器:first-letter {样式声明} |
匹配第一行字符
1 | 基础选择器:first-line {样式声明} |
匹配鼠标选中的字符
1 | 基础选择器::section {样式声明} |
否定伪类
- 符合
selector
的元素都不要
1 | elem:not(基础选择器) {样式声明} |
内容生成
- 使用css命令,添加html元素
- 只可以给双标签添加伪元素
- 必须有content属性
- 必须脱离文档标准流
伪元素的content属性是设置文字内容,默认可以传空字符串
伪元素在同一个标签内部只可以有两个(每种一个),如果超出两个,后者覆盖前者
在元素的内容区域的最前面添加一个伪元素
1 | 基础选择器:before {样式声明} |
在元素的内容区域的最后面添加一个伪元素
1 | 基础选择器:after {样式声明} |
尺寸
- 设置元素的宽度和高度
1 | width: ; |
页面中允许设置尺寸的元素
span
:设置背景色的宽高div
:设置背景色和宽高input
:设置宽高
- 块级元素可以设置宽高,如果不设置宽,默认宽是父元素的100%,如果不设置高,默认高靠内容撑开
- 行内元素设置宽高无效,宽高靠内容撑开
- 行内块可以设置宽高,行内块默认自带宽高,不同浏览器解析不同(span、input)
- 自带宽高属性的元素,可以设置样式的宽高(img、table)
单位
绝对单位
px
:像素,逻辑像素和物理像素in
:英寸,1in-2.54cmpt
:磅,1pt=1/72in,多用于字体大小cm
:厘米mm
:毫米
相对单位
%
:占父元素宽度的%em
:相对父元素的数值,乘以的倍数,项目中使用较少rem
:相对于html标签定义的数值,乘以的倍数,项目中经常使用
溢出处理
- 内容多,容器小,会发生溢出
- 默认溢出显示,默认纵向溢出
1 | overflow: ; |
取值
visiable
:默认值,缺省值,溢出部分可见hidden
:溢出部分隐藏scroll
:不管是否溢出,都有滚动条auto
:溢出就有滚动条,不溢出就没有
合法的颜色值
- 颜色的英文单词
- # + 6个16进制数
- # + 3个16进制数
- rgb(r,g,b) 10进制数 0~255
- rgb(r%,g%,b%) 255的百分比
- rgba()
边框
1 | border: width style color; |
取值
width
:边框的粗细,单位pxstyle
:边框的样式
solid
:实线(默认缺省值)dotted
:点点虚线dashed
:线条虚线double
:双实线
color
:边框颜色,合法颜色值
transparent
:透明
单边设置
1 | border-top: ; |
单属性设置
1 | border-width: ; |
单边单属性设置
1 | border-top-width: ; |
清除边框
1 | border: 0; |
边框的倒角(圆角)
单位:
px
、%
1 | border-radius: 四个角同时设置; |
边框阴影
外阴影
1 | box-shadow: h-shadow v-shadow spread color; |
取值
h-shadow
:水平方向的偏移量v-shadow
:垂直方向的偏移量spread
:阴影的模糊距离,数值越大越模糊blur
:阴影的尺寸color
:阴影的颜色inset
:设置为内部阴影,值为inset
多个阴影
1 | box-shadow: h-shadow v-shadow spread color, |
内阴影
1 | box-shadow: inset h-shadow v-shadow spread color; |
多个阴影
1 | box-shadow: inset h-shadow v-shadow spread color, |
轮廓
- 边框外面的一根线
1 | outline: width style color; |
清除轮廓
1 | outline: 0; |
边距
盒子模型(框模型)
- 元素在页面上实际占地空间的计算方法
外边距:外框以外的距离(元素与元素之间的距离)
内边距:外框与内容区域之间的距离
元素默认实际占地宽度=左外边距+左边框+左内边距+内容区域的宽度+右内边距+右边框+右外边距
元素默认实际占地高度=上外边距+上边框+上内边界+内容区域高度+下内边距+下边框+下外边距
关于块级、行内、行内块元素的总结
块级 | 行内 | 行内块 |
---|---|---|
设置宽度有效 | 宽高无效 | 设置宽高有效 |
不写宽,默认宽的父元素宽度100%,不写高,内容撑开;单独成行 | 宽高都是内容撑开;与其他行内和行内块元素共用一行 | 默认自带宽高,不同的浏览器解析效果不同;与其他行内和行内块元素共用一行 |
上下外边距有效 | 上下外边距无效 | 上下外边距有效,改变一行中某一个行内块上下外边距,本行内其他元素,跟着一起位移 |
外边距
1 | margin: ; |
取值
以
px
为单位的数字
以%
为单位的数字,父元素的百分比
负数
auto
必须左右外边距一起用
块级元素本身水平居中
上下外边距auto无效
外边距的简写方式
1 | margin: 上下左右; |
自带内外边距的元素
h1~h6
、p
、body
、ol
、ul
、dl
、pre
由于不同浏览器对这些元素外边距大小的解析,在开发时候,我们要做css reset
样式重置
1 | * { |
内边距
1 | padding: ; |
取值
padding没有auto这个值
以px
为单位的数字
以%
为单位的数字,父元素宽度的百分比
内边距的简写方式
1 | padding: 上下左右; |
背景
背景颜色
1 | backgroung-color: ; |
背景图片
- 使用背景图片可以让元素内部的子元素,堆叠显示在背景图上,而img标签,默认不能堆叠显示
1 | background-image: url(); |
此处的路径,可以加双引号,可以加单引号,可以不加引号
背景图片的平铺
1 | background-repeat: ; |
取值
repeat
:默认值,平铺no-repeat
:不平铺repeat-x
:水平轴平铺repeat-y
:垂直轴平铺
背景图片的定位
单位:px、%
1 | background-position: x y; |
取值
横向的取值:
left
/center
/right
纵向的取值:top
/center
/bottom
背景图片的尺寸
单位:px、%
1 | background-size: ; |
取值
一个值:同时控制横纵
两个值:分别控制横纵cover
:覆盖和填充。让背景图充满整个容器,哪怕图片显示不完全,也要充满容器contain
:包含。让容器显示完整的图片,哪怕容器有空白区域,也要包含完整的图片
背景图片的固定
1 | background-attachment: ; |
取值
scroll
:默认值,背景图会随着窗口滚动条一起滚动fixed
:背景图相对窗口位置固定,窗口滚动,背景图位置不变,但是只能在原容器内显示(如果背景图设置了fixed
,那么background-position
会根据浏览器窗口定位)
背景的简写方式
1 | background: color url repeat attachment position; |
最简方式
1 | background: color; |
背景起源
1 | background-origin: ; |
取值
border-box
:从外边框开始起源padding-box
:从内边框开始起源(缺省值)content-box
:从内容区域开始起源
背景裁切
1 | background-clip: ; |
取值
border-box
:从外边框开始裁切padding-box
:从内边框开始裁切content-box
:从内容区域开始裁切-webkit-text
:图片置入文本内部(有兼容问题,需要加浏览器私有前缀,文字要加透明度)
渐变
未完待更
文本
字号
单位:px、pt、rem、em
1 | font-size: ; |
字体
1 | font-family: ; |
取值
(PC中已安装的)字体名称
多个字体名称用
,
隔开
字体名称包含空格建议使用""
服务器下载字体
- 优先使用本地,如果没有下载
1 | font-family: 字体名称; |
url
:字体文件链接local
:该字体在本地存储名称
字体加粗
1 | font-weight: ; |
取值
lighter
:最细normal
:正常bold
:较粗bolder
:最粗
不带单位的数字:必须是100的倍数,最大值是1000
字体样式
1 | font-style: ; |
取值
normal
:正常(缺省值)italic
:倾斜
小型大写字母
1 | font-variant: small-caps; |
简写方式
1 | font: style variant width size family; |
最简方式
1 | font: size family; |
文本属性
字体颜色
1 | color: ; |
文本对齐方式
1 | text-align: ; |
取值
left
:居左对齐center
:居中对齐right
:居右对齐justify
:两端对齐
行间距
1 | line-height: ; |
取值
以px为单位的数字
无单位数字,代表行高是字号的倍数
文本线条
1 | text-decoration: ; |
取值
none
:没有线条修饰,去除超链接下划线underline
:下划线overline
:上划线line-through
:删除线
首行缩进
1 | text-indent: ; |
文本阴影
1 | text-shadow: h-shadow v-shadow blur color; |
h-shadow
:水平方向偏移v-shadow
:垂直方向偏移blur
:模糊距离color
:阴影颜色
多个阴影
1 | text-shadow: h-shadow v-shadow blur color, |
设置文本溢出元素框时的处理方式
1 | text-overflow: ; |
取值
clip
:裁剪文本内容,默认值ellopsis
:显示省略号,用于替代被裁剪的文本内容
规定自动换行方式
1 | word-break: ; |
取值
normal
:默认值,使用浏览器默认换行规则break-all
:允许在单词内换行keep-all
:只能在半角空格或连字符处换行,主要用于中文、日文、韩文
规定单词的换行方式
1 | word-wrap: ; |
取值
normal
:默认值,只在允许的断字点换行break-word
:可以在长单词或者url中间换行
列表属性
设置列表项标记的类型
1 | list-style-type: ; |
取值
disc
:实心圆circle
:空心圆square
:方块decimal
:数字low-roman
:小写罗马数字upper-loman
:大写罗马数字low-alpha
:小写字母upper-alpha
:大写字母none
:无标记inherit
:继承父元素设置
规定列表中列表项目标记的位置
1 | list-style-position: ; |
取值
outside
:默认值。保持标记位于文本的左侧,列表项目标记位置在文本,且环绕文本,不根据标记对齐inside
:列表项目标记放置在文本以内,且环绕文本根据标记对齐inherit
:继承父类的list-style-position
设置
属性使用图像来替换列表项的标记
1 | list-style-image: ; |
取值
url
:图像的路径none
:默认无图像显示inherit
:继承父类的list-style-position
设置
简写
1 | list-style: ; |
取值
type
position
image
表格
table
- 尺寸、边框、背景、字体、文本、内外边距
设置边框
- 只会设置最外层的最大边框
1 | table: ; |
td/th
- 尺寸、边框、背景、字体、文本、内边距、外边距无效
指定单元格数据的垂直对齐方式
1 | vertical-align: ; |
取值
top
middle
bottom
表格特有属性
边框合并
1 | border-collapse: ; |
取值
separate
:默认值,边框分离状态collapse
:边框合并状态
设置边框间距
- 必须保证是边框分离状态
1 | border-spacing: ; |
取值
一个值,设置水平和垂直的间距
两个值,第一个是水平,第二个是垂直
设置表格的显示规则
- 用来设置浏览器渲染表格的方式
1 | table-layout: ; |
取值
auto
:默认值,自动表格布局,td/th的尺寸实际上由内容决定,内容比尺寸大,按内容显示,内容比尺寸小,按尺寸显示,现存入内存,再一次性渲染fixed
:固定表格布局,不管内存多大,都按照设置的尺寸显示,不存入内存,直接渲染
定位
- 设置元素在页面上的位置
分类
普通流定位
浮动定位
相对定位
绝对定位
固定定位
普通流定位(默认文档流)
- 每个元素在页面上都有自己的控件(不能堆叠)
- 每个元素都是从父元素的左上角开始显示(绘制)
- 块级元素按照从上到下的方式,逐个排列,每个元素单独成行
- 行内和行内块在一行中,从左往右逐个排列,一行放不下,换行
浮动定位
- 让块级元素横向显示的时候,使用浮动定位
1 | float: ; |
取值
none
:不浮动,默认文档流left
:左浮动,让元素脱离文档流,在当前行向左看齐right
:右浮动,让元素脱离文档流,在当前行向右看齐
浮动的特点
- 元素一旦浮动,就脱离文档流(不占用页面空间,后面元素上前补位)
- 浮动元素,会停靠在父元素的左/右边,或者其他已浮动元素的边缘
- 父元素横向显示不下所有浮动元素时,显示不下的部分,会自动换行
- 浮动,解决多个块元素横向显示的问题
清除浮动效果
- 一个元素不浮动,前面已浮动的兄弟元素给他带来了影响
影响:需要这个元素上前补位
清除浮动效果带来的影响:不上前补位
1 | clear: ; |
取值
none
:默认,不清除left
:清除左浮动带来的影响right
:清除右浮动带来的影响both
:清除左右浮动带来的影响
显示
显示效果
1 | visibility: ; |
取值
visible
:默认值,可见hidden
:隐藏,看不见,但是不脱离文档流
显示方式
- 设置元素在页面中的表现形式(块级、行内、行内块、table)
1 | display: ; |
取值
none
:隐藏,脱离文档流的隐藏block
:块级,让元素按照块级元素的方式显示inline
:行级,让元素按照行内元素的方式显示inline-block
:让元素按照行内块的方式显示table
:让元素按照表格的方式显示
相对,绝对,固定
1 | position: ; |
取值
static
:默认值,静态(默认文档流)relative
:相对定位absolute
:绝对定位fixed
:固定定位
- 当一个元素设置了position,并且取值为relative/absolute/fixed中的一种时,那么这个元素被称为
已定位元素
,已定位元素自动解锁4个偏移属性
+ | - | |
---|---|---|
top | 向上 | 向下 |
left | 向右 | 向左 |
right | 向左 | 向右 |
bottom | 向上 | 向下 |
左右冲突,以左为准
上下冲突,以上为准
相对定位
- 单写
relative
,页面没有任何改变,配合偏移属性使用
1 | position: relative; |
绝对定位
- 配合偏移属性
- 绝对定位脱离文档流
1 | position: absolute; |
绝对定位的参照物
- 如果绝对定元素的祖先元素,没有已定位元素,相对body左上角位移
- 绝对定位元素相对于自己,最近的、已定位的、祖先元素的左上角位移
固定定位
- 配合偏移属性
- 固定定位脱离文档流
- 相对于
<body>
偏移,永远停留在可视区域
1 | position: fixed; |
堆叠顺序
- 默认堆叠顺序,后写的堆叠顺序高(是html元素编写的先后)
- 只有已定位的元素,可以设置堆叠顺序
- 堆谐顺序对父子级无效,儿子永远在父亲的上面
1 | z-index: ; |
取值
无单位的数字
转换
- 改变元素在页面中的位置,大小,角度,以及形状
2D转换
3D转换
转换属性
- 转换原点,对旋转产生影响
1 | transform: ; |
取值:一个或多个转换函数,多个转换函数之间用空格分开
1 | transform-origin: ; |
取值
两个值,把原点放在x轴和y轴上
三个值,添加了z轴以
px
或%
为单位的数字
关键字:left/center/right
top/center/bottom
2D转换
位移
- 改变元素的位置
1 | transform: ; |
取值
translate(x)
:指定元素在x轴上的位移translateX(x)
:指定元素在x轴上的位移translateY(y)
:指定元素在y轴上的位移translate(x,y)
:同时设置x,y轴的位移,正数:x轴或y轴正方向,负数:x轴或y轴负方向
旋转
- 改变元素的角度
单位:deg
1 | transform: ; |
取值
rotate()
:旋转偏移量正数:顺时针,负数:逆时针
注意:
旋转原点会影响旋转效果
旋转连同坐标轴一起旋转,会影响旋转之后的位移方向
缩放
- 改变元素的大小
1 | transform: ; |
取值
取一个值:
scale(val)
取两个值:scale(val,val)
val>1
:x轴和y轴同时放大0<val<1
:x轴和y轴同时缩小-1<val<0
:x轴和y轴同时缩小,翻转val<-1
:x轴和y轴同时放大,翻转
分别取两个值:分别设置x轴和y轴的缩放
scaleX(val)
scaleY(val)
倾斜
- 让元素向着x轴倾斜,实际上改变的是y轴的角度
单位:deg
1 | transform: ; |
取值
skew()
、skewX()
:倾斜偏移量正数:y轴顺时针旋转,负数:y轴逆时针旋转
3D转换
- 如果元素发生了旋转,整体坐标系会发生变化
透视距离(景深)
- 3D旋转需要父子级元素
- 父级元素表示场景,自己元素用于旋转
- 父级元素通常需要景深属性,表示观众距离场景的距离
单位:px
1 | perspetive: ; |
如果既为舞台又为演员
1 | transform-style: preserve-3d; |
3D旋转
单位:deg
1 | transform: ; |
取值
rotateX(x)
:以x轴为中心轴旋转rotateY(y)
:以y轴为中心轴旋转rotateZ(z)
:以z轴为中心轴旋转rotate3D(x, y, z, n)
:
x
、y
、z
取值为0:该轴不参与旋转x
、y
、z
取值大于0:都参与旋转,但是旋转速度不同
3D平移
单位:px
1 | transform: ; |
取值
translateX(x)
:x轴方向的平移,正数向右,负数向左translateY(y)
:y轴方向的平移,正数向下,复数向上translateZ(z)
:z轴方向的平移,正数放大,负数缩小
过渡
- 让css的值,在一段时间内,平缓变化的效果(2个值之间的变化)
- 一定要有事件触发
- 一定要发生变化
过渡的属性
1 | transition-property: ; |
取值
执行过渡样式属性(background),多个属性用空格分开
all
:所有支持过渡的属性,都执行过渡
支持过渡的css属性
颜色属性
大多数取值为具体数字的属性
阴影
转换visibility
:可视化
过渡的总时间
- 整个过渡效果持续的时间
单位:s、ms
1 | transition-duration: ; |
过渡的速率
1 | transition-timing-function: ; |
取值
ease
:慢开,加速,慢关(缺省值)linear
:匀速(常用)ease-in
:慢速开始ease-out
:慢速结束ease-in-out
:慢开,先加速,后减速,慢关cubic-bezier()
:贝塞尔曲线
过渡的延迟时间
单位:s、ms
1 | transition-delay: ; |
过渡代码编写位置
- 写在原来的选择器中,过渡效果有去有回
- 写在hover中,过渡效果有去无回
简写
1 | transition: property duration timing-function delay; |
多个过渡(不建议)
1 | transition: property duration timing-function delay, |
多个过渡
1 | transition: all duration timing-function delay; |
动画
- 多个过渡效果放一起,可以使用伪类激发
创建动画
通过关键帧
关键帧
- 控制动画的每一个状态
- 动画执行的时间点
- 在这个时间点上的样式
1 | @keyframes 动画名称 { |
通过起止状态
1 | @keyframes 动画名称 { |
调用动画
设置调用的动画的名称
1 | animtion-name: ; |
设置动画的执行时间
单位:s、ms
1 | animation-duration: ; |
设置动画的时间曲线函数
1 | animation-timing-function: ; |
取值:
ease
/linear
/ease-in
/ease-out
/ease-in-out
设置延迟
- 只能设置第一次动画的延迟
单位:s、ms
1 | animation-delay: ; |
设置执行次数
1 | animation-iteration-count: ; |
取值
数字
:指定次数infinite
:无限次
动画的播放顺序
- 设置动画是否反向执行
1 | animation-direction: ; |
取值
noermal
:0%100%0%reverse
:100%alternate
:轮流播放,奇数次正着播放,偶数次反着播放
填充方式
1 | animation-fill-mode: ; |
取值
backwards
:延迟时间内,填充动画的第一帧forwards
:动画播放完毕后,填充动画的最后一帧
暂停和播放
1 | animation-play-state: ; |
取值
paused
:暂停running
:播放
简写方式
1 | animation: name duration timing-function delay count; |
动画的兼容性问题
- 如果需要兼容低版本浏览器,需要在动画声明的时候加前缀
1 | @keyframes 动画名称 {} |