本博客是在MDN的知识基础上,结合了自己的开发经验所做出的总结
MDN地址:https://developer.mozilla.org/zh-CN/
基础知识
什么是CSS?
css的英文全称是Cascading Style Sheets,它的含义是层叠样式表。它可以为HTML文档增加样式,使HTML有更合理的布局,更美观的画面。
浏览器根据HTML文档生成了DOM树,CSS会寻找DOM树上的节点,将样式一一对应到节点上,生成渲染树,得到渲染树之后,浏览器就会将页面绘制出来了。
CSS的结构
大部分CSS语句是由 一个选择器 + 一组属性 组成的。下面是例子:
h1 {
color: blue;
background-color: yellow;
border: 1px solid black;
}
其中 h1 是选择器, { } 是用来包裹属性的容器,里面的内容是 属性名:属性值,每一个属性后面都需要加分号。
CSS语句
语句 | 作用 |
---|---|
@charset | 规定css文件所使用的字符集; |
@import | 从外部引入css文件; |
@media | 媒体查询; |
@document | 使一些样式仅在在规定的url中生效; |
@font-face | 自定义字体; |
@supports | 根据浏览器对某属性的支持,来使得一些样式生效; |
CSS注释
/* 基本元素样式 */
/* -------------------------------------------------------------------------------------------- */
h1 {
color: blue;
background-color: yellow;
border: 1px solid black;
}
选择器
基础的选择器
选择器 | 说明 |
---|---|
元素选择器 | 使用元素的名字作为选择器,如 div span; |
id选择器 | 使用 # + id 作为选择器,如 #box; |
类选择器 | 使用 . + class 作为选择器,如 .box; |
通配符 | * 表示选择所有元素; |
属性选择器
根据元素的 属性及值来匹配元素
使用方式 | 说明 |
---|---|
[attr] | 选择包含 attr 属性的所有元素,不论 attr 的值为何; |
[attr=val] | 选择 attr 属性被赋值为 val 的所有元素; |
[attr~=val] | 选择 attr 属性的值(以空格间隔出多个值)中有包含 val 值的元素; |
[attr | =val] |
[attr^=val] | 选择attr属性的值以val开头(包括 val)的元素; |
[attr$=val] | 选择attr属性的值以val结尾(包括 val)的元素; |
[attr*=val] | 选择attr属性的值中包含字符串 val 的元素; |
伪类
伪类,英文名为 pseudo-class,是一个以冒号(:)作为前缀的关键字,当你希望样式在特定状态下才被呈现到指定的元素时,你可以往元素的选择器后面加上对应的伪类
伪类 | 作用 |
---|---|
:link | 未被访问过的连接; |
:visited | 已被访问过的链接; |
:hover | 鼠标移入; |
:active | 激活过的链接(点击过的); |
:root | 根元素,等同于html元素; |
:focus | 获得焦点; |
:blur | 失去焦点; |
:checked | 被选中; |
:enabled | 未启用; |
:indeterminate | 状态不确定的表单元素; |
:disabled | 禁用的表单元素; |
:default | 默认状态下的表单元素; |
:empty | 不包含任何文本和子节点的元素; |
:not() | 表示不选择括号内的内容 |
:first-child | 第一个元素 |
:last-child | 最后一个元素 |
:nth-child() | 选择第几个元素,传入 n 作为变量 |
伪元素
伪元素(Pseudo-element)跟伪类很像,但它们又有不同的地方。它们都是关键字 —— 但这次伪元素前缀是两个冒号 (::) —— 同样是添加到选择器后面达到指定某个元素的某个部分。
伪元素 | 作用 |
---|---|
::before | 在元素的起始位置增加一个元素; |
::after | 在元素的最末位置增加一个元素; |
::first-letter | 元素内文本的首个字母; |
::first-line | 元素内文本的首行; |
::selection | 被用户所选择的文本; |
选择器之间的组合
组合方式 | 作用 |
---|---|
AB | 选择同时满足两个选择器的元素; |
A,B | 选择满足A或者满足B的元素; |
A B | 选择A的子集中 符合条件B的元素; |
A>B | 选择A的直接子节点 符合条件B的元素; |
A+B | B是A的下一个兄弟节点; |
A~B | B是A之后的兄弟节点中的任意一个; |
值和单位
数值
常用的数值单位列表:
单位 | 意义 |
---|---|
px | pixels,像素值,绝对单位; |
em | 相对于自身的字体大小; |
rem | 相对于根元素html的字体大小; |
vw | 相对于视窗的宽度; |
vh | 相对于视窗的高度; |
deg | 角度,360deg为一周; |
s | 秒数; |
无单位 | 当一个值被设置为0的时候,不需要写单位; |
不常用的数值单位:
单位 | 意义 |
---|---|
mm, cm, in | 毫米(Millimeters),厘米(centimeters),英寸(inches); |
pt, pc | 点(Points (1/72 of an inch)), 十二点活字( picas (12 points.)); |
ex, ch | 小写x的高度,数字0的宽度; |
百分比
百分比单位,在不同的属性中表示不同的意义
属性 | 意义 |
---|---|
width / height | 相对于父级元素的width / height; |
line-height | 相对于自己的字体大小; |
font-size | 相对于父级元素的字体大小; |
margin / padding | 相对于父级元素的宽度; |
颜色
颜色的表示方式:
十六进制: #000000
十六进制简写: #000
英文表示: red
rgb
: rgb(255, 255, 255)
;
rgba
: rgba(255,255,255,.4)
;
hsl
(色调、饱和度、明度):hsl(0,100%,50%)
;
hsla
:hsla(240,100%,50%,.5)
;
不透明度:opacity
函数
属性 | 意义 |
---|---|
rgba | 颜色与不透明度 ; |
hsla | 颜色与不透明度; |
rotate | 旋转; |
translate | 位置平移; |
calc | 计算; |
url | 引入文件; |
优先规则
根据选择器
选择器中的权重值计算:
- id选择器加一百分
- 类选择器加十分
- 属性选择器加一分
计算后得到的分数,即为该选择器的权重分,权重分高的选择器中,样式会优先展示。
根据位置
- 写在style中的样式最优先
- 内联样式表优先于外部样式表
- 在同一样式表内,拥有同样权重值的选择器,后面的优先
!important
在一个属性后追加 !important 可以无视选择器的权重计算,强制使该属性优先,这是一个除非不得已,否则不建议使用的方法。
如果想要一个属性 !important 更加优先,则需要在一个权重值更高的选择器上使用 !important
继承规则
自动产生继承的属性
在css中,一些父级拥有的属性会被子级自动继承到,这些属性大部分是字体相关的,下面是可以被继承的属性列表:
属性 |
---|
font 系列 |
color |
cursor |
line-height |
pointer-events |
user-select |
与继承相关的值
属性 | 意义 |
---|---|
inherit | 值与与父级相同 |
initial | 与浏览器默认的样式相同,若浏览器没有设置默认样式,则与inherit 表现相同 |
unset | 将属性重置为其自然值,即如果属性是自然继承的,那么它就表现得像inherit ,否则就是表现得像initial 。 |
revert | 属性值被设置成自定义样式所定义的属性(如果被设置), 否则属性值被设置成用户代理的默认样式。 |
属性汇总
文本相关
属性 | 意义 |
---|---|
color | 文字颜色 |
font-family | 使用的字体类型 |
font-size | 文字大小 |
font-style | 设置文字斜体 |
font-weight | 设置文字粗细 |
text-decoration | 设置文字下划线 |
text-transform | 设置文字大小写转换 |
text-shadow | 设置文字阴影 |
text-align | 文本对齐 |
line-height | 行高 |
letter-spacing /word-spacing | 文字间距 |
text-indent | 文本缩进 |
text-overflow | 文字超出的设置 |
white-space | 对于空白和换行的处理 |
word-break | 换行的设置 |
direction | 文本方向 |
列表相关
属性 | 意义 |
---|---|
list-style | 列表样式,常设置为none用来清空列表样式 |
list-style-type | 列表符号的类型 |
list-style-position | 列表符号的位置 |
list-style-image | 列表符号替换为指定的图片 |
盒子模型系列
下面是display相关的值:
值 | 意义 |
---|---|
block | 使目标成为块级元素 |
inline | 使目标成为内联元素 |
inline-block | 使目标成为内联块元素 |
table | 使得元素获得table布局的特点 |
flex | 弹性盒子布局 |
grid | 网格系统布局 |
盒模型的属性:
属性 | 意义 |
---|---|
width /height | 宽与高 |
min-width /max-height | 最大/最小的宽与高 |
padding | 内边距 |
border | 边框 |
margin | 外边距 |
box-sizing | 盒子模型对于距离理解的设置 |
盒模型相关属性:
属性 | 意义 |
---|---|
overflow | 处理溢出的内容 |
outline | 类似于border,但是不影响盒子大小 |
背景相关
属性 | 意义 |
---|---|
background | 所有背景相关设置的简写 |
background-color | 背景色 |
background-image | 背景图 |
background-position | 背景图放置的位置 |
background-repeat | 背景图的重复规律 |
background-size | 背景图的尺寸 |
background-attachment | 当内容滚动时,指定元素背景的行为 |
background-clip | 背景图裁剪的位置 |
边框相关
属性 | 意义 |
---|---|
border | 所有边框相关设置的简写 |
border-width | 边框的粗细 |
border-style | 边框的样式 |
border-color | 边框的颜色 |
border-radius | 边框的圆角 |
border-top(left/right/bottom) | 上下左右的边框 |
border-top(left/right/bottom)-width(style/color) | 所有边框相关设置的简写 |
border-image | 使用图片作为边框 |
border-image-source | 图片的地址 |
border-image-slice | 图片的切片大小 |
border-image-repeat | 图片重复的规律 |
border-image-width | 调整边界图像 |
border-image-outset | 定义边界内部和内边距之间的额外空间的大小 |
表格相关
属性 | 意义 |
---|---|
table-layout | 规定布局方式 |
border-collapse | 规定表格中边框的呈现方式,通常使用collapse合并边框 |
table-layout | 规定布局方式 |
其他的修饰
属性 | 意义 |
---|---|
box-shadow | 盒子的阴影 |
filter | 滤镜 |
background-blend-mode | 将单个元素的多重背景图片和背景颜色设置混合在一起 |
mix-blend-mode | 将一个元素与它覆盖的那些元素各自所设置的背景(background)和内容(content)混合在一起 |
布局
正常的文档布局流
正常布局流是指在不对页面进行任何布局控制时,浏览器默认的HTML布局方式。
浮动float
浮动的元素会脱离文档流
浮动使得布局更加方便,也可以做出文本环绕、首字下沉这样优雅的效果。
浮动的元素有几个特点:
- 脱离文档流
- 所有浮动元素获得块级元素的特点
- 默认的宽度和高度会变为0
- 当父级宽度不足时,会自动换行
- 可以做出文本环绕的效果
浮动相关的属性:
属性 | 意义 |
---|---|
float | 使得元素产生浮动,拥有三个值none 、left 、right |
clear | 使得元素可以清除周围的浮动,拥有三个值both 、left 、right |
overflow | 设置值为hidden ,可以清除子级的浮动 |
最常用的清除浮动的方式是给父级的::after
元素加上clear:both;
属性
定位position
定位的知识:
- 使用
positiong
来将一个元素设置为定位元素 position
有四个值:static
表示没有定位,absolute
表示绝对定位,relative
表示相对定位,fixed
表示固定定位absolute
(绝对定位)是相对于定位父级产生的定位relative
(相对定位)是相对于自身产生的定位fixed
(固定定位)是相对于浏览器视窗的定位- 定位父级是指拥有绝对或相对定位的父级,页面中最上层的定位父级是
html
元素 - 在元素拥有定位后,需要使用
top
/bottom
/left
/right
来规定他们的位置 - 具有定位的元素,层级比较高的元素会呈现在页面的前面
- 默认情况下,子级元素的层级高于父级元素,后面的元素层级高于前面的元素
- 可以使用
z-index
属性来规定元素的层级
拥有absolute
绝对定位的元素,元素本身会发生一点变化:
- 会拥有块级元素的特点
- 默认的宽高变为0
CSS3中新增了一种定位方式sticky
,现在还没有被广泛支持,允许定位的元件像它被相对定位一样动作,直到其滚动到某一阈值点(例如,从视口顶部10像素),之后它变得固定。对于制作粘性布局很有帮助。
弹性盒子flex
推荐阮一峰老师的博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
父级属性:
属性 | 意义 |
---|---|
display:flex; | 使得该元素称为弹性盒子 |
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 | 规定了多根轴线的对齐方式 |
子级属性:
属性 | 意义 |
---|---|
order | 定义项目的排列顺序。数值越小,排列越靠前,默认为0 |
flex-grow | 定义项目在存在剩余空间时的放大比例,默认为0 |
flex-shrink | 定义项目在存在剩余空间时的缩小比例,默认为0 |
flex-basis | 定义了在分配多余空间之前,项目占据的主轴空间,默认值为auto |
flex | flex-grow , flex-shrink 和 flex-basis 的简写 |
align-self:auto/flex-start/flex-end/center/baseline/stretch | 相对于父级的align-items |
网格布局grid
网格布局的思想类似于bootstrap中的栅格布局,但是它的功能比栅格布局要强大的多,现在还没有被支持。
参考:https://www.jianshu.com/p/d183265a8dad
块级格式化上下文BFC
参考:http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html
BFC(Block formatting context)直译为”块级格式化上下文”。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
与BFC相对应的,还有IFC(Inline Formatting Contexts、内联格式化上下文)、GFC(GridLayout Formatting Contexts、网格布局格式化上下文)、FFC(Flex Formatting Contexts、自适应格式化上下文)
以下情况下会产生BFC布局:
- 浮动元素,float 除 none 以外的值
- 绝对定位元素,position(absolute,fixed)
- display 为以下其中之一的值 inline-blocks,table-cells,table-captions
- overflow 除了 visible 以外的值(hidden,auto,scroll)