一、选择器的特异度
即选择器的特殊程度,越高越优先。
按照权重从高到低依次为:
- 内联样式
- ID选择器
- 类选择器、属性选择器和伪类选择器
- 元素选择器和伪元素选择器
譬如:
<button class="btn">普通按钮</button>
<button class="btn primary">主要按钮</button>
<style>
.btn {
display: inline-block;
padding: . 36em .8em;
margin-right: .5em;
line-height: 1.5;
text-align: center;
cursor: pointer;
border-radius: .3em;
border: none;
background:#e6e6e6;
color: #333;
}
.btn.primary {
color: #fff;
background: #218de6;
}
</style>
二、继承
1.继承:某些属性会自动继承其父元素的计算值,除非显式指定一个值。例如:
<p>This is a <em>test</ em>
of <strong>inherit</strong>
</p>
<style>
body {
font-size: 20px;
}
p{
color: blue;
}
em {
color: red;
}
</style>
2.显式继承
可以通过inherit关键字让不可基础变得可继承
例如:
*{
box-sizing:inherit;
}
html{
box-sizing:border-box;
}
.some-widget{
box-sizing:content-box;
}
三、初始值
1.CSS中,每个属性都有一个初始值:
- background-color的初始值为transparent
- margin-left的初始值为0 2.可以使用initial关键字显式重置为初始值
-
background-color:initial
四、布局
- 布局是什么?
- 布局是确定内容的大小和位置的算法
- 依据元素、容器、兄弟节点和内容等信息来计算
2.布局相关技术:常规流,浮动,绝对定位;
(1)常规流:行级,块级,表格布局,FlexBox,Grid布局
- width: ①指定content box宽度;②取值为长度、百分数、auto;③auto由浏览器根据其它属性确定;④百分数相对于容器的content box宽度
- height:①指定content box高度;②取值为长度、百分数、auto;③auto取值由内容计算得来;④百分数相对于容器的content box高度;⑤容器有指定的高度时,百分数才生效
- padding: 指定元素四个方向的内边距,百分数相对于容器宽度
- border:指定容器边框样式、粗细和颜色
- border属性值:border-width,border-style,border-color;
- margin:①指定元素四个方向的外边距;②取值可以是长度、百分数、auto;③百分数相对于容器宽度
- box-sizing:border-box:包含了border和padding在内的盒子宽高,不用再增减
-
overflow:内容溢出盒子时处置方式:visible(可见);hidden(隐藏);scroll(滚动)
-
块级元素: display:block
生成块级盒子;适用所有的盒模型属性; -
行级元素: display:inline
生成行级盒子,内容分散在多个行级盒子一起放在一行或拆开成多行;盒模型中的width、height不适用 -
display属性: block: 块级盒子;
inline:行级盒子;
inline-block: 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行 none:排版时完全被忽略; -
行级排版上下文(Inline Formatting Context,简称IFC),只包含行级盒子的容器会创建一个IFC
-
IFC排版规则:
盒子在一行内水平摆放;
一行放不下时,换行显示;
text-align决定一行内盒子的水平对齐;
vertical-align决定一个盒子在行内的垂直对齐;
避开浮动元素(float); -
块级排版上下文(Block Formatting Context,缩写BFC);某些容器会创建一个BFC;
-
BFC内的排版规则:
盒子从上到下摆放;
垂直margin合并;
BFC内盒子的margin不会与外面的合并; BFC不会和浮动元素重叠 -
Flex Box: 一种新的排版上下文;
它可以控制子集盒子的: 摆放的流向;摆放顺序;盒子宽高;水平和垂直方向的对齐;是否允许折行。
-
Flexibility: (1)可以设置子项的弹性;当容器有剩余空间时,会伸展;容器空间不够时,会收缩。
(2)flex-grow有剩余空间时的伸展能力;
(3)flex-shrink容器空间不足时伸缩的能力;
(4)flex-basis没有伸展或收缩时的基础长度;
- Grid布局:
- position属性:
(1)static: 默认值,非定位元素;
(2)relative:相对自身原本位置偏移,不脱离文档流;
(3)absolute:绝对定位,相对非static祖先元素定位;
(4)fixed:相对于视口绝对定位。
- 子绝父相:子盒子用绝对定位,其父盒子需要用相对定位。
- position: relative
(1)在常规流里面布局;
(2)相对于自己本应该在的位置进行偏移;
(3)使用top、left、bottom、right设置偏移长度
时;
(4)流内其它元素当它没有偏移一样布局。
- position: absolute
(1)脱离常规流;
(2)相对于最近的非static祖先定位;
(3)不会对流内元素布局造成影响
感想:
CSS知识点繁多,但是死记硬背效率不高。还得是自己多写多做多实践,才能熟练。并且保持好奇心,充分利用MDN,W3C的文档,善于利用开发者工具,才能不断提升能力!