CSS 选择器
后代选择器
● 作用:选中指定元素中,符合要求的后代元素。
● 语法:选择器1 选择器2 选择器3 ...... 选择器n {}
(先写祖先,再写后代)
选择器之间,用空格隔开,空格可以理解为:” xxx 中的”,其实就是后代的意思。
选择器 1234….n ,可以是我们之前学的任何一种选择器。
● 举例:
/* 选中ul中的所有li */
ul li {
color: red;
}
/* 选中ul中所有li中的a */
ul li a {
color: orange;
}
/* 选中类名为subject元素中的所有li */
.subject li {
color: blue;
}
/* 选中类名为subject元素中的所有类名为front-end的li */
.subject li.front-end {
color: blue;
}
子代选择器
● 作用:选中指定元素中,符合要求的子元素(儿子元素)。(先写父,再写子)
子代选择器又称:子元素选择器、子选择器。
● 语法:选择器1 > 选择器2 > 选择器3 > ...... 选择器n {}
选择器之间,用 > 隔开, > 可以理解为:” xxx 的子代”,其实就是儿子的意思。
选择器 1234….n ,可以是我们之前学的任何一种选择器。
● 举例:
/* div中的子代a元素 */
div>a {
color: red;
}
/* 类名为 persons 的元素中的子代 a 元素 */
.persons>a{
color: red;
}
● 注意:
1.子代选择器,最终选择的是子代,不是父级。
2.子、孙子、重孙子、重重孙子 …… 统称后代!,子就是指儿子。
兄弟选择器
相邻兄弟选择器
● 作用:选中指定元素后,符合条件的相邻兄弟元素。
所谓相邻,就是紧挨着他的下一个,简记:睡在我下铺的兄弟。
● 语法: 选择器1+选择器2 {}
。
● 示例:
/* 选中div后相邻的兄弟p元素 */
div+p {
color:red;
}
通用兄弟选择器
● 作用:选中指定元素后,符合条件的所有兄弟元素。(简记:睡在我下铺的所有兄弟)
● 语法: 选择器1~选择器2 {}
。
● 实例:
/* 选中div后的所有的兄弟p元素 */
div~p {
color:red;
}
● 注意:两种兄弟选择器,选择的是下面的兄弟。
属性选择器
● 作用:选中属性值符合一定要求的元素。
● 语法:
属性 | 描述 |
---|---|
[属性名] |
选中具有某个属性的元素 |
[属性名="值"] |
选中包含某个属性,且属性值等于指定值的元素 |
[属性名^="值"] |
选中包含某个属性,且属性值以指定的值开头的元素 |
[属性名$="值"] |
选中包含某个属性,且属性值以指定的值结尾的元素。 |
[属性名*=“值”] |
选择包含某个属性,属性值包含指定值的元素。 |
● 举例
/* 选中具有title属性的元素 */
div[title]{color:red;}
/* 选中title属性值为atguigu的元素 */
div[title="atguigu"]{color:red;}
/* 选中title属性值以a开头的元素 */
div[title^="a"]{color:red;}
/* 选中title属性值以u结尾的元素 */
div[title$="u"]{color:red;}
/* 选中title属性值包含g的元素 */
div[title*="g"]{color:red;}
伪类选择器
● 作用:选中特殊状态的元素。
如何理解“伪” ? — 虚假的,不是真的。
如何理解“伪类”? — 像类( class ),但不是类,是元素的一种特殊状态。
● 常用的伪类选择器
动态伪类
伪类 | 描述 |
---|---|
:link |
超链接未被访问的状态。 |
:visited |
超链接访问过的状态。 |
:hover |
鼠标悬停在元素上的状态。 |
:active |
元素激活的状态。 |
:focus |
获取焦点的元素。 |
什么是激活?—— 按下鼠标不松开。
注意点:遵循 LVHA 的顺序,即: link 、 visited 、 hover 、 active 。表单类元素才能使用
:focus
伪类。
当用户:点击元素、触摸元素、或通过键盘的 “ tab ” 键等方式,选择元素时,就是获
得焦点。
结构伪类
伪类 | 描述 |
---|---|
:first-child |
所有兄弟元素中的第一个。 |
:last-child |
所有兄弟元素中的最后一个。 |
:nth-child(n) |
所有兄弟元素中的第 n 个。 |
:first-of-type |
所有同类型兄弟元素中的第一个。 |
:last-of-type |
所有同类型兄弟元素中的最后一个。 |
:nth-of-type(n) |
所有同类型兄弟元素中第 n 个 。 |
:nth-last-child(n) |
所有兄弟元素中的倒数第 n 个。 |
:nth-last-of-type(n) |
所有同类型兄弟元素中的倒数第 n 个 。 |
:only-child |
选择没有兄弟的元素(独生子女)。 |
:only-of-type |
选择没有同类型兄弟的元素。 |
:root |
根元素。 |
:empty |
内容为空元素(空格也算内容)。 |
关于 n 的值:
n | 描述 |
---|---|
0 或 不写 |
什么都选不中 —— 几乎不用。 |
n |
选中所有子元素 —— 几乎不用。 |
1~正无穷的整数 |
选中对应序号的子元素。 |
2n 或 even |
选中序号为偶数的子元素。 |
2n+1 或 odd |
选中序号为奇数的子元素。 |
-n+3 |
选中的是前 3 个。 |
否定伪类
伪类 | 描述 |
---|---|
:not(选择器) |
排除满足括号中条件的元素。 |
UI 伪类
伪类 | 描述 |
---|---|
:checked |
被选中的复选框或单选按钮。 |
:enable |
可用的表单元素(没有 disabled 属性)。 |
:disabled |
不可用的表单元素(有 disabled 属性)。 |
目标伪类(了解)
伪类 | 描述 |
---|---|
:target |
选中锚点指向的元素。 |
语言伪类(了解)
伪类 | 描述 |
---|---|
:lang() |
根据指定的语言选择元素(本质是看 lang 属性的值)。 |
伪元素选择器
来源:P84-伪元素选择器
作用:选中元素中的一些特殊位置
伪元素 | 描述 |
---|---|
::first-letter |
选中元素中的第一个文字 |
::first-line |
选中元素中的第一行文字 |
::selection |
选中被鼠标选中的内容 |
::placeholder |
选中输入框的提示文字 |
::before |
在元素最开始的位置,创建一个子元素(必须用 content 属性指定内容) |
::after |
在元素最后的位置,创建一个子元素(必须用 content 属性指定内容)。 |
文本属性
文本对齐-水平
来源:P102-文本对齐-水平
● 属性名: text-align
。
● 作用:控制文本的水平对齐方式。
● 常用值:
1.left
:左对齐(默认值)
2.right
:右对齐
3.center
:居中对齐
举例:
div {
text-align: center;
}
文本对齐-垂直
来源:P106-文本对齐-垂直
1.顶部:无需任何属性,在垂直方向上,默认就是顶部对齐。
2.居中:对于单行文字,让 height = line-height
即可。
问题:多行文字垂直居中怎么办?—— 后面我们用定位去做。
3.底部:对于单行文字,目前一个临时的方式:
让 line-height = ( height × 2 ) - font-size - x
。
备注: x 是根据字体族,动态决定的一个值。
问题:垂直方向上的底部对齐,更好的解决办法是什么?—— 后面我们用定位去做。
vertical-align
● 属性名: vertical-align
。
● 作用:用于指定同一行元素之间,或 表格单元格 内文字的垂直对齐方式。
● 常用值:
1.baseline
(默认值):使元素的基线与父元素的基线对齐。
2.top
:使元素的顶部与其所在行的顶部对齐。
3.middle
:使元素的中部与父元素的基线加上父元素字母 x
的一半对齐。
4.bottom
:使元素的底部与其所在行的底部对齐。
特别注意:
vertical-align
不能控制块元素。
盒子模型
盒子模型的组成
来源:P117-盒子模型的组成
CSS
会把所有的 HTM
L 元素都看成一个盒子,所有的样式也都是基于这个盒子。
1.margin
(外边距): 盒子与外界的距离。
2.border
(边框): 盒子的边框。
3.padding
(内边距): 紧贴内容的补白区域。
4.content
(内容):元素中的文本或后代元素都是它的内容。
图示如下:
盒子的大小 = content + 左右 padding + 左右 border 。
注意:外边距
margin
不会影响盒子的大小,但会影响盒子的位置。
关于默认宽度
来源:P119-关于默认宽度
所谓的默认宽度,就是不设置 width
属性时,元素所呈现出来的宽度。
● 总宽度 = 父的 content
— 自身的左右 margin
。
● 内容区的宽度 = 父的 content
— 自身的左右 margin
— 自身的左右 border
— 自身的左右 padding
。
盒子内边距(padding)
CSS 属性名 | 功能 | 属性值 |
---|---|---|
padding-top | 上内边距 | 长度 |
padding-right | 右内边距 | 长度 |
padding-bottom | 下内边距 | 长度 |
padding-left | 左内边距 | 长度 |
padding | 复合属性 | 长度,可以设置 1 ~ 4 个值 |
padding
复合属性的使用规则:
1.padding: 10px
; 四个方向内边距都是 10px 。
2.padding: 10px 20px
; 上下 10px ,左右 20px 。(上下、左右)
3.padding: 10px 20px 30px
; 上 10px ,左右 20px ,下 30px 。(上、左右、下)
4.padding: 10px 20px 30px 40px
; 上 10px ,右 20px ,下 30px ,左 40px 。(上、右、 下、左)
注意点:
1.padding
的值不能为负数。
2.行内元素 的左右内边距是没问题的,上下内边距不能完美的设置。
3.块级元素、行内块元素,四个方向内边距都可以完美设置。
盒子外边距_margin
CSS 属性名 | 功能 |
---|---|
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
margin | 复合属性,可以写 1~4 个值,规律同 padding (顺时针) |
margin 注意事项
1. 子元素的 margin
,是参考父元素的 content
计算的。(因为是父亲的 content 中承装着子元素)
2. 上 margin
、左 margin
:影响自己的位置;
下 margin
、右 margin
:影响后面兄弟元素 的位置。
3. 块级元素、行内块元素,均可以完美地设置四个方向的 margin
;
但行内元素,左右 margin
可以完美设置,上下 margin
设置无效。
4. margin
的值也可以是 auto
,
如果给一个块级元素设置左右 margin
都为 auto
,该块级元素会在父元素中水平居中。
5. margin
的值可以是负值。
margin 塌陷问题
什么是 margin 塌陷?
第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上。
如何解决 margin 塌陷?
● 方案一: 给父元素设置不为 0 的 padding
。
● 方案二: 给父元素设置宽度不为 0 的 border
。
● 方案三:给父元素设置 css 样式 overflow:hidden
。
margin 合并问题
什么是 margin 合并?
上面兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加。
如何解决 margin 塌陷?
无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了。
处理内容溢出
来源:P126-处理内容溢出
CSS 属性名 | 功能 | 属性值 |
---|---|---|
overflow | 溢出内容的处理方式 | visible :显示,默认值 hidden :隐藏 scroll :显示滚动条,不论内容是否溢出 auto :自动显示滚动条,内容不溢出不显示 |
overflow-x | 水平方向溢出内容的处理方式 | 同 overflow |
overflow-y | 垂直方向溢出内容给的处理方式 | 同 overflow |
注意:
1.overflow-x
、 overflow-y
不能一个是 hidden
,一个是 visible
,是实验性属性,不建议使用。
2.overflow
常用的值是 hidden
和 auto
,除了能处理溢出的显示方式,还可以解决很多疑难杂症。
隐藏元素的方式
来源:P127-隐藏元素的方式
方式 | 描述 |
---|---|
visibility 属性 |
visibility 属性默认值是 show ,如果设置为 hidden ,元素会隐藏。元素看不见了,还占有原来的位置(元素的大小依然保持)。 |
display 属性 |
设置 display:none ,就可以让元素隐藏。彻底地隐藏,不但看不见,也不占用任何位置,没有大小宽高。 |
布局小技巧
来源:P130-布局小技巧
1. 行内元素、行内块元素,可以被父元素当做文本处理。
即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐。
例如: text-align 、 line-height 、 text-indent 等。
2. 如何让子元素,在父亲中水平居中:
(1)若子元素为块元素,给父元素加上:margin:0 auto
; 。
(2)若子元素为行内元素、行内块元素,给父元素加上: text-align:center
。
3. 如何让子元素,在父亲中垂直居中:
(1)若子元素为块元素,给子元素加上: margin-top
,值为:
(父元素 `content` -子元素盒子 总高) / 2。
(2)若子元素为行内元素、行内块元素:
让父元素的 height = line-height
,每个子元素都加上: verticalalign:middle
; 。
补充:若想绝对垂直居中,父元素 font-size
设置为 0
。
空白问题
元素之间的空白问题
产生的原因:
行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。
解决方案:
方案 | 描述 |
---|---|
方案一 | 去掉换行和空格(不推荐) |
方案二 | 给父元素设置 font-size:0 ,再给需要显示文字的元素,单独设置字体大小(推荐) |
行内块的幽灵空白问题
产生原因:
行内块元素与文本的基线对齐,而文本的基线与文本最底端之间是有一定距离的。
解决方案:
方案 | 描述 |
---|---|
方案一 | 给行行内块设置 vertical ,值不为 baseline 即可设置为 middel 、 bottom 、 top 均可。 |
方案二 | 若父元素中只有一张图片,设置图片为 display:block |
方案三 | 给父元素设置 font-size: 0 。如果该行内块内部还有文本,则需单独设置 fontsize |
浮动
元素浮动后的特点
1. 脱离文档流。
2. 不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开(尽可能小),而且可以设置宽高。
3. 不会独占一行,可以与其他元素共用一行。
4. 不会 margin
合并,也不会 margin
塌陷,能够完美的设置四个方向的 margin
和 padding
。
5. 不会像行内块一样被当做文本处理(没有行内块的空白问题)。
案例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>02_元素浮动后的特点</title>
<style>
.outer {
width: 800px;
height: 400px;
padding: 10px;
background-color: gray;
text-align: center;
}
.box {
font-size: 20px;
padding: 10px;
}
.box1 {
background-color: skyblue;
}
.box2 {
background-color: orange;
float: left;
/* width: 200px; */
/* height: 200px; */
/* margin-left: 20px; */
/* margin-right: 20px; */
/* margin-top: 20px; */
/* margin-bottom: 20px; */
}
.box3 {
background-color: green;
float: left;
}
</style>
</head>
<body>
<div class="outer">
<div class="box box1">盒子1</div>
<div class="box box2">盒子2</div>
<div class="box box3">盒子3</div>
</div>
</body>
</html>
浮动效果 3D 示意图
浮动后的影响
来源:P136-浮动后的影响
影响 | 描述 |
---|---|
对兄弟元素的影响 | ●后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面; ●对前面的兄弟无影响。 |
对父元素的影响 | ●不能撑起父元素的高度,导致父元素高度塌陷; ●但父元素的宽度依然束缚浮动的元素。 |
解决浮动后产生的影响
方案 | 描述 |
---|---|
方案一 | 给父元素指定高度 |
方案二 | 给父元素也设置浮动,带来其他影响 |
方案三 | 给父元素设置 overflow:hidden |
方案四 | 在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置 clear:both |
方案五 | 给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同 ===> 推荐使用 .parent::after { content: ""; display: block; clear:both; } |
布局中的一个原则:设置浮动的时候,兄弟元素要么全都浮动,要么全都不浮动。
浮动布局小练习
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>06_浮动布局小练习</title>
<style>
* {
margin: 0;
padding: 0;
}
.leftfix {
float: left;
}
.rightfix {
float: right;
}
.clearfix::after {
content: '';
display: block;
clear: both;
}
.container {
width: 960px;
margin: 0 auto;
text-align: center;
}
.logo {
width: 200px;
}
.banner1 {
width: 540px;
margin: 0 10px;
}
.banner2 {
width: 200px;
}
.logo,.banner1,.banner2 {
height: 80px;
line-height: 80px;
background-color: #ccc;
}
.menu {
height: 30px;
background-color: #ccc;
margin-top: 10px;
line-height: 30px;
}
.item1,.item2 {
width: 368px;
height: 198px;
line-height: 198px;
border: 1px solid black;
margin-right: 10px;
}
.content {
margin-top: 10px;
}
.item3,.item4,.item5,.item6 {
width: 178px;
height: 198px;
line-height: 198px;
border: 1px solid black;
margin-right: 10px;
}
.bottom {
margin-top: 10px;
}
.item7,.item8,.item9 {
width: 198px;
height: 128px;
line-height: 128px;
border: 1px solid black;
}
.item8 {
margin: 10px 0;
}
.footer {
height: 60px;
background-color: #ccc;
margin-top: 10px;
line-height: 60px;
}
</style>
</head>
<body>
<div class="container">
<!-- 头部 -->
<div class="page-header clearfix">
<div class="logo leftfix">logo</div>
<div class="banner1 leftfix">banner1</div>
<div class="banner2 leftfix">banner2</div>
</div>
<!-- 菜单 -->
<div class="menu">菜单</div>
<!-- 内容区 -->
<div class="content clearfix">
<!-- 左侧 -->
<div class="left leftfix">
<!-- 上 -->
<div class="top clearfix">
<div class="item1 leftfix">栏目一</div>
<div class="item2 leftfix">栏目二</div>
</div>
<!-- 下 -->
<div class="bottom clearfix">
<div class="item3 leftfix">栏目三</div>
<div class="item4 leftfix">栏目四</div>
<div class="item5 leftfix">栏目五</div>
<div class="item6 leftfix">栏目六</div>
</div>
</div>
<!-- 右侧 -->
<div class="right rightfix">
<div class="item7">栏目七</div>
<div class="item8">栏目八</div>
<div class="item9">栏目九</div>
</div>
</div>
<!-- 页脚 -->
<div class="footer">页脚</div>
</div>
</body>
</html>
定位
一.相对定位
来源:P139-相对定位
1.如何设置相对定位?
● 给元素设置 position:relative
即可实现相对定位。
● 可以使用 left
、right
、top
、bottom
四个属性调整位置。
2.相对定位的参考点在哪里?
● 相对自己原来的位置
3.相对定位的特点:
(1)不会脱离文档流,元素位置的变化,只是视觉效果上的变化,不会对其他元素产生任何影响。
(2)定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的。
默认规则是:
● 定位的元素会盖在普通元素之上。
● 都发生定位的两个元素,后写的元素会盖在先写的元素之上。
(3)left
不能和 right
一起设置,如果一起设置,left
生效,right
失效。
top
和 bottom
不能一起设置,如果一起设置,top
生效,bottom
失效。
(4)相对定位的元素,也能继续浮动,但不推荐这样做。
(5)相对行为的元素,也能通过 margin
调整位置,但不推荐这样做。
注意:绝大多数情况下,相对定位,会与绝对定位配合使用。
二.绝对定位
来源:P140-绝对定位
1.如何设置绝对定位?
● 给元素设置 position: absolute
即可实现绝对定位。
● 可以使用 left
、 right
、 top
、 bottom
四个属性调整位置。
2.绝对定位的参考点在哪里?
● 参考它的包含块。
什么是包含块?
- 对于没有脱离文档流的元素:包含块就是父元素;
- 对于脱离文档流的元素:包含块是第一个拥有定位属性的祖先元素(如果所有祖先都没定位,那包含块就是整个页面)。
3.绝对定位元素的特点:
(1)脱离文档流,会对后面的兄弟元素、父元素有影响。
(2)left
不能和 right
一起设置, top
和 bottom
不能一起设置。
(3)绝对定位、浮动不能同时设置,如果同时设置,浮动失效,以定位为主。
(4)绝对定位的元素,也能通过 margin
调整位置,但不推荐这样做。
(5)无论是什么元素(行内、行内块、块级)设置为绝对定位之后,都变成了定位元素。
何为定位元素? —— 默认宽、高都被内容所撑开,且能自由设置宽高。
案例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>02_绝对定位</title>
<style>
.outer {
width: 500px;
background-color: skyblue;
border: 1px solid black;
padding: 20px;
position: relative;
}
.box {
width: 200px;
height: 200px;
font-size: 20px;
}
.box1 {
background-color: #888;
}
.box2 {
background-color: orange;
position: absolute;
top: 220px;
left: 20px;
}
.box3 {
background-color: green;
}
.outer:hover .box2 {
left:220px;
}
</style>
</head>
<body>
<div class="outer">
<div class="box box1">1</div>
<div class="box box2">2</div>
<div class="box box3">3</div>
</div>
</body>
</html>
绝对定位 3D 示意图
三.固定定位
来源:P141-固定定位
1.如何设置为固定定位?
● 给元素设置 position: fixed
即可实现固定定位。
● 可以使用 left
、 right
、 top
、 bottom
四个属性调整位置。
2.固定定位的参考点在哪里?
● 参考它的视口
什么是视口?—— 对于 PC 浏览器来说,视口就是我们看网页的那扇“窗户”。
3.固定定位元素的特点
(1)脱离文档流,会对后面的兄弟元素、父元素有影响。
(2)left
不能和 right
一起设置, top
和 bottom
不能一起设置。
(3)固定定位和浮动不能同时设置,如果同时设置,浮动失效,以固定定位为主。
(4)固定定位的元素,也能通过 margin
调整位置,但不推荐这样做。
(5)无论是什么元素(行内、行内块、块级)设置为固定定位之后,都变成了定位元素。
四.粘性定位
1.如何设置为粘性定位?
● 给元素设置 position:sticky
即可实现粘性定位。
● 可以使用 left
、 right
、 top
、 bottom
四个属性调整位置,不过最常用的是 top
值。
2.粘性定位的参考点在哪里?
● 离它最近的一个拥有“滚动机制”的祖先元素,即便这个祖先不是最近的真实可滚动祖先。
3.粘性定位元素的特点
● 不会脱离文档流,它是一种专门用于窗口滚动时的新的定位方式。
● 最常用的值是 top
值。
● 粘性定位和浮动可以同时设置,但不推荐这样做。
● 粘性定位的元素,也能通过 margin
调整位置,但不推荐这样做。
粘性定位和相对定位的特点基本一致,不同的是:粘性定位可以在元素到达某个位置时将其固定。
4.粘性定位元素失效条件
● 父容器超出粘性定位元素所在的范围之后失效。
案例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>04_粘性定位</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
height: 2000px;
}
.page-header {
height: 100px;
text-align: center;
line-height: 100px;
background-color: orange;
font-size: 20px;
}
/* .content { */
/* height: 200px; */
/* overflow: auto; */
/* overflow: scroll; */
/* } */
.item {
background-color: gray;
}
.first {
background-color: skyblue;
font-size: 40px;
position: sticky;
top: 0px;
/* float: right; */
/* margin-right: 100px; */
}
</style>
</head>
<body>
<!-- 头部 -->
<div class="page-header">头部</div>
<!-- 内容区 -->
<div class="content">
<!-- 每一项 -->
<div class="item">
<div class="first">A</div>
<h2>A1</h2>
<h2>A2</h2>
<h2>A3</h2>
<h2>A4</h2>
<h2>A5</h2>
<h2>A6</h2>
<h2>A7</h2>
<h2>A8</h2>
</div>
<div class="item">
<div class="first">B</div>
<h2>B1</h2>
<h2>B2</h2>
<h2>B3</h2>
<h2>B4</h2>
<h2>B5</h2>
<h2>B6</h2>
<h2>B7</h2>
<h2>B8</h2>
</div>
<div class="item">
<div class="first">C</div>
<h2>C1</h2>
<h2>C2</h2>
<h2>C3</h2>
<h2>C4</h2>
<h2>C5</h2>
<h2>C6</h2>
<h2>C7</h2>
<h2>C8</h2>
</div>
</div>
</body>
</html>
五. 定位层级
来源:P143-定位层级
1.定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的。
2.如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上。
3.可以通过 css 属性 z-index
调整元素的显示层级。
4.z-index
的属性值是数字,没有单位,值越大显示层级越高。
5.只有定位的元素设置 z-index
才有效。
6.如果 z-index
值大的元素,依然没有覆盖掉 z-index
值小的元素,那么请检查其包含块的层级。
六.定位的特殊应用
来源:P144-定位的特殊应用
注意:
1.发生固定定位、绝对定位后,元素都变成了定位元素,默认宽高被内容撑开,且依然可以设
置宽高。
2.发生相对定位后,元素依然是之前的显示模式。
3.以下所说的特殊应用,只针对绝对定位和固定定位的元素,不包括相对定位的元素。
让定位元素的宽充满包含块
- 块宽想与包含块一致,可以给定位元素同时设置
left
和right
为 0 。 - 高度想与包含块一致,
top
和bottom
设置为 0 。
案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test2</title>
<style>
.outer {
height: 400px;
background-color: #888;
position: relative;
}
.inner {
background-color: orange;
font-style: 20px;
padding: 20px;
border: 10px solid black;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner">hello</div>
</div>
</body>
</html>
让定位元素在包含块中居中
● 方案一(推荐):
left:0;
right:0;
top:0;
bottom:0;
margin:auto;
● 方案二:
left: 50%;
top: 50%;
margin-left: 负的宽度一半;
margin-top: 负的高度一半;
注意:该定位的元素必须设置宽高!!!
案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test2</title>
<style>
.outer {
height: 400px;
width: 800px;
background-color: #888;
position: relative;
}
.inner {
width: 400px;
height: 100px;
background-color: orange;
font-size: 20px;
position: absolute;
/* 方案一: */
/* left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto; */
/* 方案二: */
left: 50%;
top: 50%;
margin-left: -200px;
margin-top: -50px;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner">hello</div>
</div>
</body>
</html>
布局
版心
来源:P145-布局-版心
在 PC 端网页中,一般都会有一个固定宽度且水平居中的盒子,来显示网页的主要内容,这是网页的版心。
版心的宽度一般是 960 ~ 1200
像素之间。
版心可以是一个,也可以是多个。
常用布局名词
来源:P146-常用布局名词
位置 | 布局名词 |
---|---|
顶部导航条 | topbar |
页头 | header 、 page-header |
导航 | nav 、 navigator 、 navbar |
搜索框 | search 、 search-box |
横幅、广告、宣传图 | banner |
主要内容 | content 、main |
侧边栏 | aside 、 sidebar |
页脚 | footer 、 page-footer |
重置默认样式
来源:P147-重置默认样式
很多元素都有默认样式,比如:
1.p
元素有默认的上下 margin
。
2.h1~h6
标题也有上下 margin
,且字体加粗。
3.body
元素有默认的 8px
外边距。
4.超链接有默认的文字颜色和下划线。
5.ul
元素有默认的左 pading
。
6……..
在早期,元素默认样式,能够让我们快速的绘制网页,但如今网页的设计越来越复杂,内容越来越
多,而且很精细,这些默认样式会给我们绘制页面带来麻烦;而且这些默认样式,在不同的浏览器
上呈现出来的效果也不一样,所以我们需要重置这些默认样式。
方案一:使用全局选择器
* {
margin: 0;
padding: 0;
......
}
此种方法,在简单案例中可以用一下,但实际开发中不会使用,
因为 * 选择的是所有元素,而并不是所有的元素都有默认样式;
而且我们重置时,有时候是需要做特定处理的,
比如:想让 a 元素的文字是灰色,其他元素文字是蓝色。
方案二:reset.css
reset.css 选择到具有默认样式的元素,清空其默认的样式。
经过
reset
后的网页,好似“一张白纸”,开发人员可根据设计稿,精细的去添加具体的样式。
方案三:Normalize.css
Normalize.css 是一种最新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式。
● 官网地址:http://necolas.github.io/normalize.css/
相对于 reset.css , Normalize.css 有如下优点:
1.保护了有价值的默认样式,而不是完全去掉它们。
2.为大部分 HTML
元素提供一般化的样式。
3.新增对 HTML5
元素的设置。
4.对并集选择器的使用比较谨慎,有效避免调试工具杂乱。
备注: Normalize.css 的重置,和 reset.css 相比,更加的温和,开发时可根据实际情况进行选择