# 前端查漏补缺——CSS2
# CSS选择器
# CSS基本选择器
- 通配符选择器 : 用于清除样式
- 元素选择器:不能差异化选择
- 类选择器
id
选择器
# CSS复合选择器
复合选择器建立在基本选择器之上,通过不同方式组合而成
# 交集选择器(无分隔)
语法:选择器1选择器2选择器3 {}
(直接拼接在一块)
/* 选中类名为beauty的p元素 */
p.beauty {
color:blue;
}
/* 选中类名包含rich和beauty的元素 */
.rich.beauty {
color: green;
}
注意:
- 标签名必须写在前面
- 用的最多的是元素选择器配合类名选择器
# 并集选择器(逗号分隔)
语法:选择器1,选择器2,选择器3 {}
(逗号分隔)
#peiqi,
.rich,
.beauty {
font-size: 40px;
background-color: skyblue;
width: 200px;
}
注意:
- 并集选择器,一般竖着写
- 任何形式的选择器都可以作为并集选择器一部分。
# 后代选择器(空格分隔)
语法:选择器1 选择器2 选择器3 ... 选择器n {}
(先写祖先,再写后代)
ul li {
color: red;
}
ul li a {
color: orange;
}
.subject li {
color: blue;
}
.subject li.front-end {
color: yellow;
}
注意:
- 儿子、孙子、重孙,都算是后代
- 文档结构要符合要求
# 子代选择器(>分隔)
语法:选择器1>选择器2>选择器3>...选择器n {}
(大于号分隔)
/* div中的子元素a */
div>a {
color: red;
}
/* 类名为persons元素的子元素a */
.persons>a {
color: green;
}
注意:子就是指儿子
# 兄弟选择器(+分隔)
相邻选择器:
作用:选择紧挨着的下一个元素
语法:
选择器1+选择器2 {}
(加号分隔)
div+p {
color: red;
}
通用选择器:
- 作用:选择指定元素后,所有的兄弟元素
- 语法:
选择器1~选择器2 {}
(波浪号分隔)
span~p {
color: green;
}
注意:两种兄弟选择器,只能选择下面的兄弟
# 属性选择器([]中括号)
语法:
[属性名]
选中具有某个属性的元素[属性名="值"]
选中包含某个属性,且属性值等于指定值的元素[属性名^="值"]
选中包含某个属性,且属性值以指定的值开头[属性名$="值"]
选中包含某个属性,且属性值以指定的值结尾[属性名*="值"]
选中包含某个属性,且属性值包含指定的值
div[title] {
color: red;
}
div[title="bachong"] {
color: purple;
}
div[title^="a"] {
color: green;
}
div[title$="b"] {
color: blue;
}
div[title*="x"] {
color: #bfa;
}
# 伪类选择器
作用:选中特殊状态的元素
如何理解伪类?像类,但不是类,是元素的一种特殊状态
一、动态伪类:
:link
超链接未被访问的状态:visited
超链接访问过的状态:hover
鼠标悬停在元素上的状态:active
元素激活的状态
注意:遵循LVHA的顺序
:focus
获取焦点的元素
表单类元素才能使用
当用户:点击元素、触摸元素、或者通过键盘上的tab键,选中元素时,就是获得焦点
二、结构伪类:
常用的:
:first-child
所有兄弟元素中的第一个:last-child
所有兄弟元素中的最后一个:nth-child
所有兄弟元素的第n个:first-of-type
所有同类型兄弟元素的第一个:last-of-type
所有同类型兄弟元素的最后一个:nth-of-type
所有同类型兄弟元素的第n个
关于n的值:符合an+b的规则
- 0或不写:什么都不选中
- n:选中所有元素
- 1~正无穷的整数:选中对应序号的子元素
- 2n或even:选中序号为偶数的子元素
- 2n+1或odd:选中序号为奇数的子元素
- -n+3:选中前3个元素
了解即可:
- :nth-last-child(n) 所有兄弟元素中的倒数第n个
- :nth-last-of-type(n) 所有同类型兄弟元素中的倒数第n个
- :only-child 选择没有兄弟的元素
- :only-of-type 选择没有同类型兄弟的元素
- :root 根元素
- :empty 内容为空元素(空格也算)
三、否定伪类
:not(选择器)
排除满足括号中条件的元素
四、UI伪类
:checked
被选中的复选框或单选按钮:enable
可用的表单元素:disabled
不可用的表单元素(有disabled属性)
五、目标伪类(了解)
:target 选中锚点指向的元素
六:语言伪类
:lang() 根据指定的语言选定元素(本质是看lang属性的值)
# 伪元素选择器
定义:像元素,但不是元素,是元素中的一些特殊位置
- 常用伪元素:
::first-letter
选中元素的第一个文字::first-line
选中元素的第一行文字::selection
选中被鼠标选中的内容::placeholder
选中输入框的提示文字::before
在元素最开始的位置,创建一个子元素(用content属性指定内容)::after
在元素最后的位置,创建一个子元素(用content属性指定内容)
# CSS选择器优先级
通过不同的选择器,选中相同的元素,并且为相同的样式名称设置不同的值时,就产生了样式冲突,这时候就需要看优先级了。
行内 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器
详细计算:
- 计算方式:每个选择器,都可计算出一组权重,格式为:(a,b,c)
- a:ID选择器的个数
- b:类、伪类、属性选择器的个数
- c:元素、伪元素选择器的个数
例如:
选择器 权重 ul>li (0,0,2) div ul>li p a span (0,0,6) #atguigu .slogan (1,1,0) #atguigu .slogan a (1,1,1) #atguigu .slogan a:hover (1,2,1)
比较规则:按照从左向右的顺序,依次比较大小,当前位胜出,后面不再对比。(本质上就是一个排序规则)
特殊规则:
- 行内样式大于所有选择器
!important
权重,大于行内样式,大于所有选择器,权重最高!
# CSS常用属性
# CSS颜色属性
表达方式1:颜色名(red,orange,green等)
表达方式2:rgb或rgba
/* 使用0~255之间的数字表示一种颜色 */
color: rgb(138,43,226); /* 紫罗兰色 */
color: rgba(255,0,0,0.5) /* 半透明的红色 */
/* 也可以使用百分比表示一种颜色 */
color: rgb(100%,0%,0%)
color: rgba(100%,0%,0%,50%) /* 半透明的红色 */
注:
- 对于rgba来说,前三位rgb形式需要保持一致,要么都是0~255,要么都是百分比
- 表达方式3:HEX或HEXA
原理与rgb一样,只不过是写成了16进制的形式
注意:IE浏览器不支持HEXA,但支持HEX
表达方式4:HSL或HSLA
- 色相:取值范围0~360度,具体度数对应的颜色如下
- 饱和度:取值范围0%~100%。(0%就是全灰,100%就是没有灰)
- 亮度:取值范围0%~100%。(0%亮度没了,就是黑色,100%亮度太强,就是白色)
HSLA就是加上了透明度
# CSS字体属性
# 字体大小
属性名 font-size
注意点:
- Chrome浏览器支持的最小文字是12px,默认文字大小为16排序,并且0px会自动消失
- 不同浏览器默认的字体大小可能不一致,所以最好给一个明确的值
- 通常给body设置font-szie属性,其他的元素可以继承
- 由于字体设计原因,文字最终呈现的大小并不一定与font-size遗址,可能有偏差
- 通常情况下,文字相对于字体设计框,并不是垂直居中的,通常都是靠下一些的
# 字体族
- 属性名:
font-family
- 语法
div {
font-family: "STCaiyun", "Microsoft YaHei", sans-serif
}
注意:
- 使用字体的英文名称兼容性会更好,英文名称可以现查
- 字体名称包含空格,必须用引号包裹起来
- 可以设置多个字体,按照从左到右顺序查找,最后写上
serif
(衬线字体)或sans-serif
(非衬线字体)- windows系统,默认字体就是微软雅黑
# 字体风格
属性名:
font-style
常用值:
normal
:正常italic
:斜体(使用字体自带的倾斜效果)oblique
:斜体(强制倾斜产生倾斜效果)
更推荐使用italic
# 字体粗细
属性名:
font-weight
常用值:
- 关键词
lighter
:细normal
:正常bold
:粗bolder
:很粗(多数字体不支持)
- 数值
100~1000
且无单位,数值越大,字体越粗,具体得看字体设计时的精细程度100~300
等同于lighter
,400~500
等同于normal
,600
以上等同于bold
- 语法
.rong4 { font-weight: bolder; } .rong5 { font-weight: 300; }
# 字体复合属性
- 属性名:font,可以把上述字体样式合并为一个属性
- 编写规则:
- 字体大小、字体族必须都写上
- 字体族必须是最后一位,字体大小必须是倒数第二位
- 各个属性用空格分开
- 更推荐复合写法
# CSS文本属性
# 文本间距
- 字母间距:
letter-spacing
- 单词间距:
word-spacing
- 属性值为像素,正值让间距增大,负值让间距减小
# 文本修饰
- 属性名:
text-decoration
- 可选值:
none
:无装饰线(常用)underline
:下划线(常用)overline
:上划线line-through
:删除线
- 可搭配如下值使用:
dotted
:虚线wavy
:波浪线- 也可以指定颜色和线宽
.rong1 {
/* 上划的绿色虚线 */
text-decoration: overline dotted green;
}
.rong2 {
/* 下划的红色波浪线 */
text-decoration: underline wavy red;
}
.rong3 {
/* 删除线 */
text-decoration: line-through skyblue;
}
.rong4, ins, del {
/* 没有各种线 */
text-decoration: none;
}
# 文本缩进
- 属性名:
text-indent
- 属性值:css中的长度单位
# 文本对齐
水平对齐:
text-align
垂直对齐:
顶部:默认就是顶部对齐
居中:对于单行文字,行高等于容器高度
底部:对于单行文字,让
line-height
=height*2
-font-size
-x
x是根据字体族,动态决定的一个值
# 行高(很重要)
- 属性名:
line-height
- 可选值:
normal
:由浏览器根据文字大小决定的默认值- 像素px
- 数字,参考自身
font-size
的倍数(常用) - 百分比:参考自身
font-size
的百分比
/* 第一种写法,值为像素 */
line-height: 30px;
/* 第二种写法,值为normal */
line-height: normal;
/* 第三种写法,值为数值,用的比较多 */
line-height: 1.5;
/* 第四种写法,值为百分比 */
line-height: 150%;
- 注意事项:
line-height
过小会怎样?文字会重叠,且最小值为0,不能为负数line-height
是可以继承的,且为了更好地呈现文字,最好写数值line-height
和height
是什么关系?
- 设置了
height
,那么高度就是height
的值- 不设置
height
,会根据line-height
计算高度
- 应用场景:
- 对于多行文字:控制行与行之间的间距
- 对于单行文字:让
line-height
等于height
,可以实现文字垂直居中
备注:这种垂直居中并不是绝对的,和字体设计有关
# vertical-align
- 属性名:
vertical-align
- 作用:用于指定同一行元素之间,或表格单元格内文字的垂直对齐方式
- 常用值:
baseline
:使元素的基线与父元素的基线对齐top
:使元素顶部与所在行顶部对齐middle
:使元素中部与父元素字母x的中心点对齐bottom
:使元素底部与所在行的底部对齐
注意:
vertical-align
不能控制块元素
# CSS列表属性
列表相关属性可以作用在ul
、ol
、li
元素上
列表属性:
list-style-type
:设置列表符号none
:不显示符号(很常用)square
:实心方块disc
:圆形decimal
:数字lower-roman
:小写罗马数字
list-style-position
:设置列表符号位置inside
:在li里面outside
:在li外面
list-style-image
:自定义列表符号url(图片地址)
list-style
:复合属性,没有顺序数量要求
# CSS表格属性
# 边框相关属性(其他元素也能用)
- border-width:宽度
- border-color:颜色
- border-style:风格
- border:复合属性
# 表格独有属性
- table-layout:设置列宽
- auto:自动,列宽根据内容计算
- fixed:固定列宽,平均分
- border-spacing:单元格间距
- css中可用的长度值,前提是单元格不能合并
- border-collapse:合并单元格边框
- collapse:合并
- separate:不合并
- empty-cells:隐藏没有内容的单元格
- show:默认显示
- hide:隐藏
- caption-side:设置表格标题位置
table {
border: 2px green solid;
width: 500px;
/* 控制表格列宽 */
table-layout: auto;
/* 控制单元格间距(生效的前提是:不能合并边框) */
border-spacing: 0px;
/* 合并相邻单元格的边框 */
border-collapse: collapse;
/* 隐藏没有内容的单元格 */
empty-cells: hide;
/* 设置表格标题位置 */
caption-side: top;
}
# CSS背景属性
- background-color:设置背景颜色
- 默认颜色是transparent
- background-image:设置背景图片
- url(图片的地址)
- background-repeat:设置背景重复方式
- repeat:重复,铺满整个元素,默认值
- repeat-x:只在水平方向重复
- repeat-y:只在垂直方向重复
- no-repeat:不重复
- background-position:设置背景图位置
- 通过关键字设置,两个值,空格分开
- 水平:left、center、right
- 垂直:top、center、bottom
- 如果只写一个值,另一个就是center
- 通过长度指定坐标位置,元素左上角为坐标原点,两个值分别为x坐标和y坐标
- 如果只写一个值,会被认为x坐标
- 通过关键字设置,两个值,空格分开
- background:复合属性
- 没有数量和顺序要求
注意:
- background-position指定的位置是背景的位置,而不是图片中的位置
# CSS鼠标属性
主要是修改鼠标的符号
属性名:
cursor
功能:设置光标样式
属性值:
- pointer:小手
- move:移动图标
- text:文字选择器
- crosshair:十字架
- wait:等待
- help:帮助
扩展:自定义鼠标图标
cursor: url("../img/arrow.png"), pointer;
# CSS盒模型
# CSS长度单位
px
:像素em
:相对于font-size的倍数rem
:相对于根字体大小,也就是html
%
:相对于父元素计算
# CSS元素的显示模式
# 显示模式分类
块元素(block)
- 在页面中独占一行,从上到下排列
- 默认宽度撑满父元素
- 默认高度:由内容撑开
- 可以通过CSS设置宽高
行内元素(inline)
- 在页面中不独占一行,一行容纳不下的行内元素,会在下一行继续从左到右排列
- 默认宽度:由内容撑开
- 默认高度:由内容撑开
- 无法通过CSS设置宽高
行内块元素(inline-block)
- 在页面中不独占一行,一行容纳不下的行内元素,会在下一行继续从左到右排列
- 默认宽度:由内容撑开
- 默认高度:由内容撑开
- 可以通过CSS设置宽高
# 总结各元素显示模式(必须记住)
- 块元素(block)
- 主体结构标签:html、body
- 排版标签:h1、h6、hr、p、pre、div
- 列表标签:ul、ol、li、dl、dt、dd
- 表格相关标签:table、tbody、thead、tfoot、tr、caption
- form、option
- 行内元素(inline)
- 文本标签:br、em、strong、sup、sub、del、ins
- a、label
- 行内块元素(inline-block)
- 图片:img
- 单元格:td、th
- 表单控件:input、textarea、select、button
- 框架标签:iframe
# 修改元素显示模式
通过css的display属性可以修改元素的默认显示模式,常用值如下:
- none:元素会被隐藏
- block:元素将作为块级元素显示
- inline:元素将作为行内元素显示
- inline-block:元素将作为行内块显示
总结:学习css的时候,不仅要记元素的默认属性值,还需要知道如何去修改
# 盒子内容区
max-width、min-width一般不与width一起使用
max-height、min-height一般不与height一起使用
# 默认宽度
盒子的默认宽度=父元素内容区宽度-盒子的外边距x2
# 内边距padding
- padding不能为负数
- 行内元素的左右padding是没问题的,上下padding不能完美设置
- 块级元素、行内块,四个方向内边距都可以设置
# 边框border
- 边框相关属性共20个
- border是复合属性
- border-style、border-width、border-color是复合属性
- border-left、border-right、border-top、border-bottom都是复合属性
# 外边距margin
- 子元素margin,是参考父元素content计算的
- 上左margin,影响自己位置;下右margin,影响后面兄弟位置
- 块级元素,行内块元素,均可以完美设置四个方向的margin,但行内元素,左右margin可以设置,上下margin设置无效
- margin的值也可以是auto,如果给一个块元素设置左右margin都为auto,该块元素会在父元素中水平居中
- margin可以使负值
# margin塌陷问题
什么是margin塌陷问题?
第一个子元素的上margin
会作用的父元素上,最后一个子元素的下margin
会作用在父元素上
如何解决margin塌陷?
- 方案一:给父元素设置不为0的
padding
, - 方案二:给父元素设置宽度不为0的
border
, - 方案三:给父元素设置css样式
overflow:hidden
注:这其实是一个历史遗留问题,早期浏览器页面比较简单,浏览器认为这种方式比较好,但是现在网页丰富了,就存在很多问题
# margin合并问题
什么是margin合并?
上面兄弟元素的下margin和下面兄弟元素的上margin会合并,去一个最大的值,而不是相加
如何解决margin合并问题?
无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了。
# 处理内容溢出
overflow:溢出内容的处理方式
- visible:显示,默认值
- hidden:隐藏
- scroll:显示滚动条
- auto:自动显示滚动条
注意:
- overflow-x、overflow-y不能一个是hidden,一个是visible
- overflow最常用的值是hidden和auto,除了能处理显示方式,还可以解决很多疑难杂症
# 隐藏元素的两种方式
方式一:visibility属性
visibility属性默认值是show,如果设置了hidden,元素会隐藏,但是还占有原来的位置
方式二:display属性
设置display:none,元素彻底隐藏,不但看不见,而且不占用任何位置,没有大小宽高
# 样式的继承
能继承的属性:字体属性、文本属性(除了vertical-align)、文字颜色
不能继承的属性:边框、背景、内外边距、宽高、溢出方式
一个规律:能继承的属性都是不影响布局的,和盒模型没关系的
# 默认样式
优先级:元素默认样式>继承来的样式
body元素默认样式,8px的外边距
# 布局小技巧
- 行内元素、行内块元素,可以被父元素当做文本处理
即:可以想处理文本一样,设置行内、行内块在父元素中的对齐
例如:
text-align
、line-height
、text-indent
等
如何让子元素在父元素中水平居中?(容易理解)
- 若子元素为块元素,给父元素加上:
margin:0 auto;
- 若子元素为行内元素、行内块元素,给父元素加上:
text-align:center;
- 若子元素为块元素,给父元素加上:
如何让子元素在父元素中垂直居中?
若子元素为块元素,给子元素加上:margin-top,值为
(父元素content-子元素盒子总高)/2
若子元素为行内元素、行内块元素:让父元素的
height=line-height
,么给子元素都加上:vertical-align:middle
补充:如果想绝对垂直居中,父元素
font-size
设置为0
说明:行内元素在父元素垂直对齐,是以字母x为依据的
代码示例:
<style>
.outer {
width: 400px;
height: 400px;
background-color: gray;
text-align: center;
/* 行高等于height */
line-height: 400px;
/* 消除父元素文字对子元素文字的影响 */
font-size: 0px;
}
span {
font-size: 40px;
/* 文字对齐位置,如果不设置,图片中间就会和x字母底部对齐 */
vertical-align: middle;
background-color: orange;
}
img {
/* 图片对齐位置 */
vertical-align: middle;
}
</style>
<div class="outer">
<span>出来玩啊!</span>
<img src="../img/girl.png" alt="">
</div>
最终效果:
# 元素之间的空白问题
产生的原因:
行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符
解决方案:
- 方案一:去掉空格和换行(太蠢了)
- 方案二:给父元素设置
font-size:0
,再给需要显示文字的元素,单独设置字体大小
# 行内块的幽灵空白问题
产生原因:行内块元素与文本的基线对齐,而文本的基线语文本的最底端之间是有一定距离的。
异常情况:
正常情况:
div {
width: 600px;
background-color: skyblue;
/* 第三种解决方案 */
font-size: 0;
}
img {
/* 第一种解决方案,只要不是baseline */
vertical-align: bottom;
/* 第二种解决方案, 后面没东西 */
display: block;
}
# CSS浮动
# 简介
浮动早期是为了实现文字环绕效果的,包括文字环绕图片,文字环绕文字等,现在是主流网站布局方式之一。
早期使用表格布局,随后是浮动,弹性盒子flex
# 元素浮动后的特点(重要!)
- 脱离文档流(可以理解为不排队了)
- 不管之前是什么元素,浮动后,默认宽高被内容撑开,而且可以设置宽高
- 不会独占一行,可以和其他元素共用一行
- 不会margin合并,也不会margin塌陷,能够完美地设置四个方向的margin和padding
- 不会像行内块一样被当做文本处理(没有行内块的空白问题)
# 元素浮动之后的影响
对兄弟元素的影响:后面的兄弟元素,会占用浮动元素之前的位置,在浮动元素的下面;对前面的兄弟无影响。
对父元素的影响:不能撑起父元素的高度,导致父元素高度塌陷;但是父元素的宽度依然束缚浮动的元素
# 解决浮动产生的影响
首先提一句,没有最优雅的解决办法
解决方案:
- 方案一:给父元素设置高度
- 方案二:给父元素也设置浮动,(父亲的兄弟元素会顶上来)
- 方案三:给父元素设置
overflow:hidden
- 方案四:在所有浮动元素最后面,添加一个块元素,并给该元素设置
clear:both
- 方案五:给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理和方案四相同。==>推荐使用
.parent::after {
content: '',
display: block,
clear: both
}
布局中的一个原则,设置元素浮动的时候,兄弟元素要么全都浮动,要么全都不浮动。
# CSS定位
# 相对定位
如何开启相对定位?
- 给元素设置
position:relative
- 可以使用left、right、top、bottom四个属性
相对定位的参考位置在哪?
- 相对于自身原来的位置
相对定位的特点:
不会脱离文档流,不会对其他元素产生任何影响
定位后的元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
默认规则是:
- 定位的元素会盖在普通元素之上
- 都发生定位的两个元素,后写的元素会盖在先写的元素之上
left
不能和right
一起设置,top
和bottom
不能一起设置,只有left
和top
会生效相对定位的元素,也能继续浮动,但是不推荐这样做
相对定位的元素,也能通过margin设置外边距,但不推荐这样做
注意:绝大部分情况下,相对定位,会和绝对定位一起使用
# 绝对定位
如何设置绝对定位?
- 给元素设置position:absolute
- 可以使用left、right、top、bottom四个属性
绝对定位的参考点在哪?
- 参考它的包含块
什么是包含块?
- 对于没有脱离文档流的元素:包含块就是父元素
- 对于脱离文档流的元素,包含块就是第一个拥有定位属性的祖先元素(如果所有的祖先都没有定位,包含块就是整个页面)
绝对定位元素的特点:
- 脱离文档流,对后面的兄弟元素、父元素有影响
left
不能和right
一起设置,top
和bottom
不能一起设置,只有left
和top
会生效- 绝对定位和浮动不能同时设置,如果同时设置,浮动失效
- 绝对定位的元素,也能通过
margin
调整位置,但不推荐这样做 - 无论是什么元素(行内、行内块、块)设置为绝对定位之后,都变成了定位元素
何为定位元素?
——默认宽高都被内容撑开,且能自由设置宽高。
# 固定定位
如何设置固定定位?
- 给元素设置position:fixed
- 可以使用left、right、top、bottom四个属性
固定定位的参考点?
- 参考视口
固定定位元素的特点
- 脱离文档流,会对兄弟元素、父元素有影响
left
不能和right
一起设置,top
和bottom
不能一起设置,只有left
和top
会生效- 固定定位和浮动不能同时设置,如果同时设置,浮动失效
- 固定定位的元素,也能通过
margin
调整位置,但不推荐这样做 - 无论是什么元素(行内、行内块、块)设置为固定定位之后,都变成了定位元素
# 粘性定位
如何设置粘性定位?
- 给元素设置position:sticky
- 可以使用left、right、top、bottom四个属性
粘性定位的参考点在哪里?
- 离它最近的一个拥有“滚动机制”的祖先元素,即使这个祖先元素不是最近的真实可滚动祖先。
粘性定位元素的特点
- 不会脱离文档流,它是一种专门用于窗口滚动时的新的定位方式
- 最常用的值是top
- 粘性定位和浮动可以同时设置,但不推荐这样做
- 粘性定位的元素,也能通过margin调整位置,但不推荐这样做
# 定位层级
- 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
- 如果发生重叠,默认情况是:后面的元素,会显示在前面元素之上
- 可以通过css属性
z-index
调整元素的显示层级 z-index
的属性值是数字,没有单位,数字越大显示层级越高- 只有定位元素设置
z-index
才有效 - 如果
z-index
大的元素,依然没有覆盖掉z-index
小的元素,请检查其包含块的层级
# 定位的特殊应用
注意:
- 发生固定定位、绝对定位之后,元素就变成了定位元素,默认宽高被内容撑开,且依然可以设置宽高。
- 发生相对定位之后,元素依然是之前的显示模式
- 以下所说的特殊应用,只针对绝对定位和固定定位,不包括相对定位的元素
让定位元素的宽充满包含块
- 块宽与包含块一致,可以给定位元素同时设置
left
和right
为0 - 块高与包含块一致,可以给定位元素同时设置
top
和bottom
为0
让定位元素在包含块中居中
- 方案一
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
- 方案二
left: 50%;
top: 50%;
margin-left: 负的宽度一半;
margin-top: 负的高度一半;
注意:该定位的元素必须设置宽高!!!
原因:不设置宽高,方案一子元素会填充整个父元素,方案二需要用到元素的宽高
# CSS布局
# 版心
- 在PC端网页中,一般会有一个固定宽度且水平居中的盒子,来显示网页的主要内容,这是网页的版心
- 版心的宽度一般是960-1200像素之间
- 版心可以是一个,也可以是多个
# 常用类名
位置 | |
---|---|
顶部导航条 | topbar |
页头 | header、page-header |
导航 | nav、navigator、navbar |
搜索框 | search、search-box |
横幅、广告、宣传图 | banner |
主要内容 | content、main |
侧边栏 | aside、sidebar |
页脚 | footer、page-footer |
# 重置默认样式
很多元素都有默认样式,比如:
- p元素有默认上下margin
- h1~h6标题也有上下margin,且字体加粗
- body元素有默认的8px外边距
- 超链接有默认文字颜色和下划线
- ul元素有默认左padding
方案一:使用全局选择器
* {
margin: 0;
padding: 0;
...
}
此种方法,简单案例可以用一下,实际开发不会使用,并不是所有元素都有默认样式。
方案二:reset.css
选择具有默认样式的元素,清空其默认样式
经过reset后的网页,如同一张白纸,开发人员可以根据设计稿,精细的添加具体的样式
方案三:Normalize.css
在清除默认样式的基础上,保留了一些有价值的默认样式
相对于以上两个方案,有如下优点:
- 保护了有价值的默认样式,而不是完全去掉他们
- 为大部分HTML元素提供一般化的样式
- 新增对HTML5的设置
- 对并集选择器的使用比较谨慎
相对而言还是reset用的多一些,Normalize有点理想化了