CSS核心样式

it2025-04-05  4

文章目录

CSS常用样式一、常用样式 -- 字体属性1、粗细 font-weight2、字体风格 font-style3、行高 line-height4、字体综合 font 二、常用样式 -- 文本属性1、水平对齐 text-align2、文本修饰 text-decoration3、缩进 text-indent 三、盒模型1、盒模型概述2、盒模型 - width3、盒模型 - height4、盒模型 - padding5、盒模型 - border6、盒模型 - margin7、盒模型扩展 - 清除默认样式8、盒模型扩展 - 高度 height 应用9、盒模型扩展 - 居中10、盒模型扩展 - 父子盒模型11、盒模型扩展 - margin 塌陷现象 四、标准文档流五、显示模式 display六、浮动属性1、浮动定义2、浮动的性质3、浮动存在的问题4、清除浮动 七、CSS 伪类选择器1、a 标签的伪类2、a 标签的伪类书写顺序3、a 标签的伪类实际应用 八、CSS 常用样式 -- 背景属性1、背景颜色 background-color2、背景图片 background-image3、背景重复 background-repeat4、背景定位 background-position①、单词表示法②、像素表示法 5、背景附着 background-attachment6、综合写法 background7、背景应用1、替换插入图2、padding 区域背景图3、精灵图技术 8、CSS3 新增背景属性1、背景半透明2、背景缩放 background-size3、多背景 九、定位属性1、相对定位2、绝对定位3、固定定位4、定位应用5、压盖顺序6、综合案例

CSS常用样式

一、常用样式 – 字体属性

1、粗细 font-weight

作用:设置文字是否进行加粗显示属性名:font-weight, 属于 font 属性的一个单一属性属性值有两种方式: 单词类型、数字类型

单词类型

属性值说明normal默认值,定义标准的字体bold定义粗体字体,b、strong标签的默认值bolder定义更粗的字体light定义更细的字体 .p1 { font-weight: normal; } .p2 { font-weight: bold; } .p3 { font-weight: bolder; } .p4 { font-weight: lighter; } <p class="p1"> 标准的字体,默认的字体 </p> <p class="p2"> 粗体 </p> <p class="p3"> 更粗的文字 </p> <p class="p4"> 细体 </p> <b> 这是 b 标签的默认文字 </b> <br> <strong> 这是 strong 标签的默认文字 </strong>

数字类型

100-900 之间的整百数字数字越大,文字显示越粗其中 400 等价于 normal,700 等价于 bold .p1 { font-weight: 400; } .p2 { font-weight: 700; }

最常用的是 normal、bold 两个字体

2、字体风格 font-style

作用:设置文字是否斜体显示属性名:font-style,属于 font 属性的一个单一属性属性值:单词

属性值

属性值说明normal设置正规的字体,大多数标签的默认值italic设置斜体的文字,主要针对为英文、要求英文以字体中的斜体样式显示oblique设置倾斜的文字,知识将文字倾斜显示,与字体无关 .p1 { font-style: normal; } .p2 { font-style: italic; } .p3 { font-style: oblique; }

实际应用中,更多的斜体效果习惯使用 italic 属性值

3、行高 line-height

作用:设置的是一行文字实际占有的高度,文字字号在行高中是垂直居中的属性名:line-height,属于 font 属性的一个单一属性

**属性值属性值

属性值说明px 的像素设置的行高的具体像素值百分比值设置的本身字号像素值的百分比 div{ font-size: 14px; /* 设置文字的行高 */ /* line-height: 26px; line-height: 200%; */ }

4、字体综合 font

字体、字号、行高、加粗、斜体都是 font 综合属性的单一属性font 属性五个单一属性的值可以进行合写,属性值可以有2到多个,值之间用空格进行分隔

写法1

font 进行综合书写时,必须有字号和字体参与,而且必须字号在前,字体在后,不能颠倒顺序 p { font: 16px "楷体"; }

写法2

font 属性经常对字体、字号、行高进行合写,书写顺序必须是字号、行高、字体,字号和行高之间必须用 / 进行分隔 p { font: 16px / 32px "楷体"; }

写法三

如果 font 属性需要设置加粗和斜体,两个属性值只能写在最前面,两个值之间可以互换位置。后面的字号、行高、字体不能更改位置 p { font: italic bold 16px / 32px "楷体"; }

二、常用样式 – 文本属性

1、水平对齐 text-align

作用:设置文本水平方向的对齐在盒子中,不论文本是单行还是多行,都会对应方向对齐属性值:三个方向的单词

属性值

属性值left居左对齐,大部分标签的默认值center居中对齐right居右对齐 p { width: 300px; height: 100px; background-color: aqua; } .p1 { text-align: left; } .p2 { text-align: center; } .p3 { text-align: right; } <p class="p1"> 这是一段居左文字 </p> <p class="p2"> 这是一段居中文字 </p> <p class="p3"> 这是一段居右文字 </p>

2、文本修饰 text-decoration

作用:设置文本整体是否有线条的修饰效果

属性值

属性值说明none没有修饰,大部分标签的默认值overline上划线line-through中划线、删除线,<del>标签的默认值underline下划线,<a> 标签的默认值 .none { text-decoration: none; } .overline { text-decoration: overline; } .through { text-decoration: line-through; } .underline { text-decoration: underline; } <p class="none"> 没有修饰 </p> <p class="overline"> 上划线 </p> <p class="through"> 删除线 </p> <p class="underline"> 下划线 </p> <del> del 标签 </del> <br> <a href=""> a 标签 </a> <br> <a href="" style="text-decoration: none;"> 去掉 a 标签的下划线 </a>

3、缩进 text-indent

作用:设置段落首行是否进行缩进

属性值

属性值说明auto默认值,浏览器可计算出实际的高度px像素定义的高度百分比(%)定义参考父级元素宽度 height 的百分比高度

实际工作中,最长使用 em 为单位的属性值。 属性值区分正负,正数表示向右缩进,负数表示向左缩进

div { width: 300px; height: 200px; background-color: aqua; } .p1 { text-indent: 30px; } .p2 { text-indent: 2em; } .p3 { text-indent: 20%; } .p4 { text-indent: -30px; }

三、盒模型

1、盒模型概述

盒模型又叫框模型,包含了五个用来描述盒子位置、尺寸的属性分别是: 宽度 width,高度 height,内边距 padding,边框 border,外边距 margin

常见盒模型区域

盒模型的属性中,根据不同属性的效果,可以划分区域:

书写元素内容区域:width + height盒子可以实体化的区域:width + height + padding + border盒子实际占位的位置:width + height + padding + border + margin

盒模型图

学会查看浏览器控制台中的盒模型图 (浏览器 F12 打开控制台)

2、盒模型 - width

作用:设置可以添加元素内容的区域的宽度

属性值

属性值说明auto默认值,浏览器可计算出实际的宽度px像素定义的宽度百分比(%)定义参考父级元素宽度 width 的百分比宽度 .box { width: 300px; background-color: coral; } .p1 { width: 150px; background-color: darkturquoise; } .p2 { width: 40%; background-color: deepskyblue; } <div class="box"> <p class="p1"> px 定义的宽度 </p> <p class="p2"> % 定义的宽度 </p> </div>

特殊应用

如果一个元素不添加 width 属性,默认属性值为 auto,不同的元素浏览器会根据其特点自动计算出实际宽度,例如 <div> 元素等独占一行的,其 width 属性的值会自动撑满父元素的 width 区域,如果是 <span> 元素等不需要独占一行的,其 width属性的值是内部元素内容自动撑开的宽度<body> 元素比较特殊,不需要设置 width 属性,宽度会自动适应浏览器窗口的宽度 .box { width: 300px; height: 200px; background-color: coral; } .p1 { background-color: darkturquoise; } .s { background-color: deepskyblue; } <div class="box"> <p class="p1"> 不定义宽度撑满 </p> <span class="s"> 文字有多少就有多大 </span> </div>

3、盒模型 - height

作用:设置可以添加元素内容的区域的高度

属性值

属性值说明auto默认值,浏览器可计算出实际的高度px像素定义的高度百分比(%)定义参考父级元素宽度 width 的百分比高度 .box { /* 宽度 */ width: 300px; /* 高度 */ height: 200px; background-color: coral; } .p1 { width: 150px; height: 100px ; background-color: darkturquoise; } .p2 { height: 30%; background-color: deepskyblue; }

特殊应用

如果一个元素不添加 height 属性,默认属性值为auto,浏览器会自动计算出实际高度,也就是是内部元素内容自动撑开的高度。元素的高度自适应内部内容的高度

4、盒模型 - padding

作用:设置的是元素的边框内部到宽高区域之间的距离特点:可以去加载背景,不能书写嵌套的内容属性值:常用 px 为单位的数值padding 是一个复合属性,可以根据内边距的方向不同划分为四个方向的单一属性

单一属性

书写四个方向单一属性时,一般是按照顺时针规律书写:上、右、下、左

.p1 { width: 150px; height: 100px ; background-color: darkturquoise; padding-top: 20px; padding-right: 30px; padding-bottom: 40px; padding-left: 50px; }

简写

有时为了化简书写,一般习惯将四个方向的单一属性进行合写成 padding 属性

padding 属性值:可以有 1- 4 个值,值之间用空格进行分隔,根据四个方向属性值不同,padding 有多种值的书写表示方法,根据 padding 的属性值的个数不同,区分了四种表示法:

四值法

设置四个属性值,分配方向上、右、下、左 .p1 { padding: 20px 30px 40px 50px; }

三值法

设置三个值分配给上、左右、下 .p1 { padding: 20px 30px 50px; }

二值法

设置两个值,分配给上下、左右 .p1 { padding: 20px 50px; }

单值法

设置属性值只有一个,分配方向上右下左,四边的值相同 .p1 { padding: 20px; }

案例

制作三边内边距相同,一边不同

方法1:使用四值法、三值法,进行属性值设置 .p1 { /* padding: 10px 10px 10px 20px; */ padding: 10px 10px 20px; } 方法2:利用综合属性和单一属性之间的层叠,对综合属性设置单值法,将四边内边距设置相同,在后面使用单一属性写法,再次定义某个方向的属性值不同,可以实现单一属性层叠综合属性的一部分 .p1 { padding: 10px; padding-left: 20px; }

其中第二种用法更加灵活,推荐使用,使用过程中注意书写顺序,单一属性必须书写在后,才能层叠掉综合属性中重复的部分

5、盒模型 - border

作用:设置的是内边距外面的边界区域,作为盒子的实体化的最外层属性值:由三个值组成,分为线的宽度、线的形状、线的颜色border 属性是一个复合属性,根据划分依据不同可以有两种单一属性的划分方式 .box { /* 宽度 */ width: 300px; /* 高度 */ height: 200px; background-color: coral; border: 20px solid red; } <div class="box"> <p> 第一段的高度 </p> </div>

按照属性值的类型划分

线宽:border-width

作用:设置边框线的宽度属性值:常用 px 形式的数值,四个方向都有边框,属性值类似于 .box{ border-width: 10px 20px 30px 40px; }

线型:border-style

作用:设置边框的线条形状属性值:形状的单词,总体也是类似 padding 的综合属性写法属性值的单词可能性: 属性值说明none定义无边框solid定义实线dashed定义虚线,在大多数浏览器中呈现为实线dotted定义点状边框,在大多数浏览器中呈现为实现double定义双线,双线的宽度等于 border-width 的值groove定义 3D 凹槽边框,效果取决于 border-color 的值ridge定义 3D 垄状边框,效果取决于 border-color 的值inset定义 3D 内容凹陷边框,效果取决于 border-color 的值outset定义 3D 内容凸出边框,效果取决于 border-color 的值border-style: dashed;

颜色:border-color

作用:设置边框的颜色属性值:颜色名或颜色值,整体类似 padding 综合属性写法 .box { /* 宽度 */ width: 300px; /* 高度 */ height: 200px; background-color: coral; border: 10px solid red; border-style: dashed none solid dotted; border-color: sandybrown blue red orange; }

根据边框的方向划分

上边框:border-top右边框:border-right下边框:border-bottom左边框:border-left每个单一属性都必须与复合属性 border 一致,设置三个属性值 .box { /* 宽度 */ width: 300px; /* 高度 */ height: 200px; background-color: coral; border-top: 10px solid red; border-right: 10px solid blue; }

根据方向和类型,进一步细分

类似 border-top 的单一方向属性,也可以根据属性值类型继续进行单一属性划分单一属性写法:border - 方向 - 类型注意:细分时必须先写方向划分再写类型划分,否则属性名错误 .box { /* 宽度 */ width: 300px; /* 高度 */ height: 200px; background-color: coral; border: 10px solid red; border-top-color: darkgreen; }

6、盒模型 - margin

作用:设置的是盒子与盒子之间的距离特点:不能渲染背景属性值:常用 px 为单位的数值外边距的设置方式与内边距 padding 一模一样的 单一属性复合属性的四种值margin-top: 10px;margin: 10px 20px 30px 40px;margin-right: 20px;margin: 10px 20px 30px;margin-left: 30px;margin: 10px 20px;margin-bottom: 40px;margin: 10px; .box { /* 宽度 */ width: 300px; /* 高度 */ height: 200px; background-color: coral; border: 5px solid red; margin: 10px 20px 30px 40px; }

7、盒模型扩展 - 清除默认样式

大部分标签都有一个浏览器加载的默认样式,会对布局造成一些影响, 为了避免默认样式对整体布局效果造成影响,一定要清除默认样式

盒模型属性中内外边距:大部分容器级标签都有默认边距,要么用标签选择器的并集方式,要么通配符清除

ul 和 ol 两种列表有默认的列表前缀:清除 list–style 属性

a 标签的默认样式,顺带设置页面中常用的a的公共样式:设置 color 和 text- decoration

清除默认加粗效果:设置font-weight

* { margin: 0; padding: 0; } ul { list-style: none; /* 清除列表前边的 点 */ } a { color: red; text-decoration: none; /* 清除超级链接的下划线 */ } h1,h2,h6,b { font-weight: normal; /* 清除默认加粗效果 */ } <div> 这是 div </div> <h1> 这是一级标题 </h1> <h2> 这是一级标题 </h2> <p> 这是一个段落 </p> <ul> <li>列表1</li> <li>列表2</li> </ul> <a href="https://www.lagou.com/"> 拉勾网 </a>

还可以给 <body> 标签设置整体文字样式,让大部分后代标签全部去继承 /* 公共样式 */ body { color: orange; font-size: 24px; font-family: "楷体"; }

8、盒模型扩展 - 高度 height 应用

根据不同的需求,高度属性可以设置也可以不设置如果设置了高度:盒子占有的高度位置就确定死了,后面的同级元素会紧挨着加载如果不设置高度:会根据标签内部内容高度自动撑开以 <div> 标签为例,根据情况不同选择是否设置高度:

必须设置高度

设计图中盒子高度占位是固定的,后面同级元素在高度下面加载自身盒子内部内容过多会溢出盒子区域 div { width: 200px; height: 200px; border: 5px solid red; }

overflow 属性

设置了高度的盒子,如果内部元素的加载高度超过父级,会出现溢出效果可以通过一个溢出的属性 overflow,进行溢出部分内容的显示效果设置 属性值说明visible默认值,可见的可视的,溢出部分显示的hidden溢出部分直接隐藏,隐藏超过边框范围的内容scroll溢出的部分出现滚动条,可以拖动滚动条看到隐藏部分,多出盒子高度的部分不显示,不论有没有溢出,水平和垂直方向都会出现滚动条auto自动的,如果没有溢出就正常显示,如果有溢出,溢出方向出现滚动条 div { width: 200px; height: 200px; border: 5px solid red; overflow: auto; /* 溢出自动出现滚动条 */ }

必须不设置高度

要求盒子高度必须自适应内部内容的高度,或者设置 height 的属性值是自动的 div { width: 200px; height: auto; /* 高度根据文本自适应 */ border: 5px solid red; }

9、盒模型扩展 - 居中

文本水平居中

水平居中:text-align属性,不论单行或多行都可以设置 div { width: 200px; height: 200px; border: 5px solid red; /* 边框 */ text-align: center; /* 水平居中 */ }

文本垂直居中

单行文本垂直居中:让文字行高 line-height 等于盒子高度 height div { width: 200px; height: 200px; border: 5px solid red; /* 边框 */ text-align: center; /* 水平居中 */ line-height: 200px; /* 单行文本垂直居中 */ } 多行文本垂直居中:让元素高度自适应或者正好等于多行文字的高度,设置元素内边距上下值相同 div { width: 200px; border: 5px solid red; /* 边框 */ text-align: center; /* 水平居中 */ padding: 20px 0; }

元素垂直居中

一个元素内部嵌套的子元素,在父元素中居中垂直居中:与多行文字类似,让父元素高度自适应,子元素高度自动撑开父级的高度,再给父元素设置相同的上下边距 .box { width: 200px; border: 1px solid red; padding: 20px 0; } .demo { background-color: orange; width: 100px; height: 100px; }

元素水平居中

针对类似 <div> 样式上必须独占一行的盒子,如果子盒子宽度低于父盒子宽度,可以设置子盒子的 margin 值,水平方向的值都设置为 auto原因:auto 只在水平方向有作用,水平方向的 margin 如果设置为 auto,边距会自动无限增大,直到撑满整个父元素除了子元素宽度之外剩余的区域,如果两个水平方向都是 auto,两边都要无限大,只能达到一个平衡,两边距离相同,导致盒子居中 .box { width: 200px; border: 1px solid red; padding: 20px 0; } .demo { background-color: orange; width: 100px; height: 100px; margin: 0 auto; }

示例

.box { width: 500px; border: 1px solid red; padding: 20px 0; } .demo { background-color: orange; width: 400px; /* height: 100px; */ padding: 20px 0; margin: 0 auto; text-align: center; } <div class="box"> <div class="demo"> 水平和垂直居中 </div> </div>

10、盒模型扩展 - 父子盒模型

一般情况下,一个父元素内部可以放一个或多个子元素,而且多个子元素要排成一行显示,必须保证父元素的宽度一定要足够(不考虑溢出况),需要遵循一个设置尺寸的规律:所有子元素的宽度加在一起不能大于父元素的宽度 width父元素的width ≥ 所有子元素 width + padding + border + margin如果不满足条件:要么多余的子元素掉下来不能在一排,要么溢出父元素

错误示例

*{ margin: 0; padding: 0; } .box { margin-left: 50px; margin-top: 50px; width: 600px; height: 100px; /* 边框 */ border: 1px solid red; } .box p { float: left; /* 向左浮动, 先做测试用 */ background-color: salmon; width: 200px; height: 100px; /* 右边距 */ margin-right: 10px; } .box2 { float: left; width: 200px; height: 200px; border: 5px solid red; } .box2 p { width: 200px; height: 200px; border: 5px dashed blue; } <div class="box"> <p> 1 </p> <p> 2 </p> <p> 3 </p> </div> <div class="box2"> <p> 5 </p> </div>

解决方法

计算或量取尺寸时一定要计算准确,一像素都不能偏差

特殊情况

父子盒模型中,只有一个子元素,且子元素是类似 <div> 标签必须占一行的不设置子元素的 width 属性,子元素的 width 属性值会自动加载父级元素的 width如果同时设置了子元素水平方向的 padding 和 border 、margin,不需要手动去进行内减,子元素的 width 会自动收缩尺寸子元素所有的水平方向的位置所有属性的加和等于父元素的 width .box2 p { /* width: 190px; */ height: 190px; border: 5px dashed blue; }

11、盒模型扩展 - margin 塌陷现象

在垂直方向如果有两个元素的外边距有相遇的,浏览器中加载的真正的外边距不是两个间距的加和,而是两个边距中值较大的,边距值小的塌陷到了边距值大的值内部

同级元素塌陷

上面的元素有下边距,下面的元素有上边距,两个边距相遇,真正的盒子间距离是较大的那个值 *{ margin: 0; padding: 0; } .box1 { width: 100px; height: 100px; background-color: blue; margin-bottom: 50px; /* 向下间距 */ } .box2 { width: 100px; height: 100px; background-color: burlywood; margin-top: 100px; /* 向上间距 */ }

父子元素塌陷

父子元素之间也会出现 margin 塌陷,父元素和子元素都设置了同方向的margin-top 值,两个属性之间没有其他的内容进行隔离,导致两个属性相遇,发生 margin 塌陷 .box3 { width: 100px; height: 100px; background-color: burlywood; margin-top: 100px; /* 向上间距 */ } .box3 p { margin-top: 30px; width: 40px; height: 40px; background-color: darkcyan; }

本身父元素与上一个元素的距离是0,子元素如果设置了垂直方向的上边距,会带着父级一起掉下来 .box3 { width: 100px; height: 100px; background-color: burlywood; } .box3 p { margin-top: 30px; width: 40px; height: 40px; background-color: darkcyan; }

解决 margin 塌陷问题的方法

同级元素:如果两个元素垂直方向有间距,只需要设置给一个元素,不要进行拆分 .box1 { width: 100px; height: 100px; background-color: blue; /* margin-bottom: 50px; 向下间距 */ margin-bottom: 100px; } .box2 { width: 100px; height: 100px; background-color: burlywood; /*margin-top: 100px; 向上间距 */ } 父子元素:让两个边距不要相遇,中间可以使用父元素 border 或 padding 将边距分隔开,更加常用的方法,父子盒模型之间的距离就不要用儿子的 margin 去踹出来,而是父级的 padding 挤出来 .box3 { width: 100px; height: 70px; background-color: burlywood; padding-top: 30px; margin-top: 100px; /* 向上间距 */ } .box3 p { /* margin-top: 30px; */ width: 40px; height: 40px; background-color: darkcyan; }

另外注意:水平方向的 margin 没有塌陷现象

四、标准文档流

标准文档流,指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式。前面内容发生了变化,后面的内容位置也会随着发生变化

HTML就是一种标准文档流文件

HTML中的标准文档流特点通过两种方式体现:微观现象和元素等级

理解标准文档流的特点

微观现象元素等级

微观现象

空白折叠现象文字类的元素如果排在一行会出现一种高低不齐、底边对齐效果 <span> 这是一段文字 </span> <a href=""> 超级链接 </a> <input type="text" name="" id=""> <img src="lagou_small.jpg" alt="">

自动换行,元素内一行内容写满元素的 width 时会自动进行换行 /*设置一个 div 框 把内容放在一个固定的宽度中以便观察*/ div { width: 200px; border: 1px solid red; }

元素等级

在标准流中,大部分元素是区分等级的,习惯将元素划分为几种常见的加载级别:块级元素、行内元素、行内块元素等。块级元素:大部分容器级标签包括 p 标签都是块级元素,比如 <div> 、<h1> 等行内元素:大部分的文本级标签,比如 <span>、<a>、<b> 等行内块元素:比如 <img>、<input> 等各种等级的元素有自己的加载特点

块级元素

块级元素可以设置宽高,在浏览器中正常加载块级元素必须独占一行,不能与其他任何标签并排一行块级元素如果不设置宽度,会自动撑满父级的 width 区域;高度不设置,会被内容自动撑开高度

行内元素

行内元素不能正常加载宽度和高度属性,其他的盒模型属性虽然能设置,但是容易出现加载问题行内元素可以与其他的行内或行内块元素并排一行显示行内元素不论是否设置宽高,宽度和高度都只能被内容自动撑开 div { width: 200px; border: 1px solid red; } span { width: 200px; height: 50PX; background-color: salmon; border: 2PX solid red; padding: 10px; margin: 10px; }

行内块元素

行内块元素可以设置宽度和高度行内块元素可以与其他的行内或行内块并排一行显示行内块元素如果不设置宽高,要么以原始尺寸加载要么被内容自动撑开行内块依旧具有标准流的微观性质,例如空白折叠现象 .imgl { width: 50px; height: 50px; } <input type="button" value=""> <input type="button" value="普通按钮"> <img src="lagou_small.jpg" alt="" class="imgl">

五、显示模式 display

标准流中的元素有自己默认的浏览器加载模式,但是加载模式不是一成不 变的,后期可以通过 display 属性更改一个标签的显示模式属性值:元素根据属性值不同,可以加载对应元素等级的显示模式的特点

属性值

属性值作用block表示元素要以块级元素模式加载,具备块级特点inline表示元素要以行内元素模式加载,具备行内特点inline-block表示标签要以行内快模式加载,具备行内块特点none表示标签及内部内容直接隐藏,让出原有标准流的位置 div, span { width: 200px; height: 100px; } div { background-color: rosybrown; } span { background-color: sandybrown; } .s1 { display: block; } .box2 { display: inline; } .s2 { display: block; } .box3, .s3 { display: inline-block; } .box4 { display: none; }

脱离标准流

display 属性更改的显示模式并没有改变标准流本质性质,页面还是只能从上往下加载,存在空白折叠现象等微观性质。要想实现更多的界面布局效果需要脱离标准流的限制标签元素脱离标准流的方法包括:浮动、绝对定位、固定定位

六、浮动属性

1、浮动定义

浮动是一种非常重要的布局属性属性名:float,漂流、浮动的意思属性值: left 左浮动right 右浮动 作用:让元素脱离标准流,同一级的浮动的元素可以并排在一排显示

示例图

注:中间的间隙是设置了 margin,以便于更好的观察

2、浮动的性质

浮动的元素脱离标准流

标准文档流特点:区分行块 块级元素:可以设置宽高,必须独占一行行内元素:不能设置宽高,可以并排一行 浮动的元素脱离了标准流的限制,具备行块二象性,浮动的元素可以设置宽高,还可以并排一行,而且不会有空白折叠现象,如果元素不设置宽高,可以被元素内容自动撑开

浮动的元素依次贴边

浮动属性值:left、right

浮动方向设置不同,进行布局时,加载位置方向不同

以 left 为例

父元素宽度足够,所有子元素会按照 HTML 书写顺序,依次向左进行贴边,父元素左边 ← 子元素 1 ← 子元素 2 ← 子元素 3 ← 子元素 4 * { margin: 0; padding: 0; } .box { width: 400px; height: 200px; border: 1px solid #000; /* 设置这两个是留点间隙方便截图 */ margin-left: 20px; margin-top: 20px; } .box p { float: left; width: 100px; height: 100px; } .box .p1 { background-color:red; } .box .p2 { background-color: royalblue; } .box .p3 { background-color: slateblue; } .box .p4 { background-color: tomato; }

父元素宽度如果不够,例如不能放下一个子元素 4,那么子元素 4 在贴边时,会跳过上一个子元素 3,向更上一个子元素 2 进行贴边,如果子元素 2 后面位置不够,继续跳过子元素 2 向前面的子元素 1 进行贴边

如果子元素 4 在跳过子元素 3 向更前面的子元素 2 贴边时,子元素 2 的高度不高于子元素 3,子元素 2 没有延伸出一个高度的边让子元素 4 贴边,那么子元素 4 就会跳过子元素 2 向子元素 1 进行贴边

如果贴边的这个子元素 4 宽度小于子元素 2,子元素 2 的高度低于子元素 1和子元素 3,形成一个凹陷,子元素 4 会受前面子元素 3 高度影响,不会出现钻空现象

如果子元素 1 后面的距离也放不下子元素 4,子元素 4 最终会贴到父元素左边,如果子元素 4 的宽度超过了父元素,只会出现溢出现象

右浮动与左浮动贴边效果是一致的,只是贴边方向不同,按照 HTML 书写顺序依次向右向上一个元素贴边,第一个元素贴父元素的右边

案例:利用浮动依次贴边的性质,用列表结构模拟平均分布的表格布局结构

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> 案例 </title> <style> * { margin: 0; padding: 0; } ul { /* 清除前缀 点 */ list-style: none; width: 408px; height: 156px; padding-top: 2px; padding-left: 2px; background-color: #000; } ul li { float: left; width: 100px; height: 50px; margin-right: 2px; margin-bottom: 2px; background-color: royalblue; } </style> </head> <body> <ul> <li>👈1</li><li>👈2</li><li>👈3</li><li>👈4</li><li>👈5</li><li>👈6</li> <li>👈7</li><li>👈8</li> <li>👈9</li><li>👈10</li><li>👈11</li><li>👈12</li> </ul> </body> </html>

边框效果是通过调适间距进行实现

注意:同一个盒子中,可以有左浮动和右浮动的子盒子并存,子盒子会根据浮动方向,向上一个同方向的子盒子进行贴边,如果空间不够,也会发生之前依次贴边的各种情况

贴边性质应用

利用浮动的这个依次贴边性质,可以完成多种网页布局效果。例如: 上述平均分布表格效果导航栏效果常见的电商或企业网站布局

练习

做个如图的分布

代码地址

浮动的元素没有margin塌陷

浮动的元素让出标准流位置

元素浮动之后,脱离了标准流,会将原来占有的标准流位置让给后面的一个同级元素

在 IE6 、 7浏览器中,会出现兼容问题

由于浏览器中有兼容性问题,不会使用这种属性制作压盖效果,真正的压盖效果使用后期学习的定位制作如果没有特殊需求,不允许一个父元素中的子元素有的浮动有的不浮动,同级元素中有一个浮动其他的也要浮动

字围现象

与前面压盖效果结构类似,同级元素中前面的元素浮动,后面的元素不浮动,不浮动的元素内部还有一些文字,浮动的蓝盒子会压盖住粉盒子的一部分,但是文字内容不会被盖住,粉盒子中的文字会让开蓝盒子位置,围绕它进行加载 * { margin: 0; padding: 0; } .box { width: 400px; border: 1px solid #000; margin: 20px; } .box img { float: left; width: 150px; margin: 5px; } .box p { width: 400px; background-color: aqua; }

3、浮动存在的问题

浮动的问题1

标准流中的元素,不设置高度的情况下,都能被内部的标准流元素自动撑高,如果内部的子元素进行了浮动,浮动的子元素是撑不高标准流父亲的

!

浮动的问题2

父元素没有高度,会影响后面元素的标准流位置,如果浮动的子元素足够高时,有可能影响到后面浮动元素的贴边

以上的问题需要被解决,解决方法是清除浮动带来的影响

4、清除浮动

清除浮动一:height

给标准流的父元素强制给一个合适的高度 .box { width: 1000px; height: 100px; border: 2px solid red; margin: 20px; }

解决:父元素有了高度,前面的浮动不能影响后面元素的标准流位置和贴边问题:父元素高度不是自适应,一旦子元素高度变化,问题可能再次出现

清除浮动二:clear属性

clear,清除作用:清除标签元素自身受到的前面的浮动元素的影响

属性值:

属性值作用left清除前面左浮动带来的影响right清除前面右浮动带来的影响both清除前面所有浮动带来的影响 给标准流父元素添加 clear 属性,父元素不受前面浮动影响,不会再占有浮动让出的位置 .box { width: 1000px; /* height: 100px; */ border: 2px solid red; margin: 20px; clear: both; }

解决:浮动元素影响后面元素标准流位置和贴边问题:父元素不能高度自适应,两个父元素之间如果有 margin 效果不正确

清除浮动三:隔墙法

外墙法:在两个大的父盒子之间,添加一个空的 <div> 标签,标签上带有 clear 属性 .cl { clear: both; }

解决:浮动影响后面元素标准流位置和贴边,模拟父元素间的距离问题:父元素没有高度自适应内墙法:在父元素内部,所有的浮动子元素后面添加一个空的 <div> 元素,标签高度为 0,添加 clear 属性

<div class="box"> <p></p> <p></p> <p></p> <p></p> <div class="cl"></div> </div>

清除浮动四:伪类

本质是使用伪类方法利用 css 代码书写一堵内墙

伪类选择器:通过选中的标签添加伪类,去选中标签的某个状态或位置:after:这个伪类表示选中的是某个标签内部的最后的位置书写方法:前面必须加普通的选择器,后面连续书写伪类名称将伪类添加给一个选中父盒子的选择器后面,一般给需要清除浮动的父盒子设置一个 clearfix 的类名 .cleasrfix:after { content: "1"; /* 文字内容 */ display: block; /* 转换为块级 */ height: 0; /* 设置为 0 ,不会撑高父盒子 */ clear: both; /* 清除前边的浮动 */ visibility: hidden; /* 隐藏文字,会保留位置 */ } <div class="box cleasrfix"> <p></p> <p></p> <p></p> <p></p> </div>

解决了父元素高度自适应,浮动影响后面的元素位置和贴边

清除浮动五:溢出隐藏

小偏方:给内部有浮动子元素的父元素添加溢出隐藏 overflow: hidden; 属性,可以解决浮动的所有问题 .box { width: 1000px; /* height: 100px; */ border: 2px solid red; margin: 20px; /* clear: both; */ overflow: hidden; }

overflow属性

元素高度设置后,overflow:hidden;效果是将超过高度的部分直接隐藏 .demo { width: 100px; height: 100px; border: 1px solid red; overflow: hidden; }

元素高度没有设置时,如果元素同时设置了overflow:hidden属性,元素会自适应内容的高度 .demo { width: 100px; border: 1px solid red; overflow: hidden; } 高度自适应原因:一个元素没有设置高度,同时设置了溢出隐藏,浏览器在加载盒子尺寸时,遇到溢出隐藏浏览器会强制性去检索内部的子元素的高度,不论子元素是标准流还是浮动,都会将最高的高度作为父盒子高度加载浮动影响后面的元素:父元素有了高度后,可以管理住内部所有的浮动元素,不会延伸到后面标签中影响贴边

如果父元素高度是固定的,建议使用 height 属性解决 如果父元素高度需要自适应,建议使用 overflow 属性解决浮动问题

七、CSS 伪类选择器

伪类和类之间有一定的相似之处,也存在明显的区别普通的类:必须给标签设置对应的 class 属性值,才能选中标签,而且类选择器后面添加的属性,会立即加载到浏览器之上伪类:不需要给标签添加任何属性,伪类名都是语法提前规定好的,书写时伪类必须搭配其他选择器使用,伪类选择器后面添加的样式不一定立即加载到浏览器之上,只有用户触发了对应的行为,伪类的样式才会立即加载

1、a 标签的伪类

<a> 标签可以根据用户行为不同,划分为四种状态,通过 标签的伪类可以将四 种状态选中设置为不同的样式效果,用户触发对应行为,就可以加载对应的样式 /* 访问前状态 */ a:link { color: gray } /* 访问后状态 */ a:visited { color: cyan; } /* 鼠标悬停状态 */ a:hover { color: red; } /* 鼠标点击状态 */ a:active { color: yellow; } <a href="https://www.lagou.com"> 这是一个 a 标签 </a>

2、a 标签的伪类书写顺序

<a> 标签上可能会同时触发 2 到 3 个状态,每个状态的属性都会进行加载,相同的属性之间会发生层叠伪类的权重是相同的,只能根据书写顺序,后写的层叠先写的,所以伪类书写顺序非常重要要想让每个伪类的状态正常加载,书写顺序必须是:访问前 link、访问后 visited、鼠标移上 hover、鼠标点击 active

3、a 标签的伪类实际应用

一般会将访问前和访问后状态设置为一样的效果,保证了页面的统一性,可以选择性的设置鼠标移上和鼠标点击状态 a:link, a:visited { color: #666; } a:hover { color: red; } 更加常用的一种设置方式如下: <a> 标签任何普通的选择器,可以同时选中四种状态,可以将四种状态设置为相同 的样式,属性可以设置所有的 默认显示样式的属性,包括盒模型、文字等a:hover 伪类选择器:设置鼠标移上时不一样的样式属性 a { width: 150px; height: 50px; background-color: skyblue; font-size: "楷体"; text-align: center; color: #fff; text-decoration: none; display: block; } a:hover { color: red; }

八、CSS 常用样式 – 背景属性

1、背景颜色 background-color

属性名:background-color作用:在盒子区域添加背景颜色的修饰加载区域:在 border 及以内加载背景颜色属性值:颜色名、颜色值 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .box { width: 200px; height: 200px; padding: 30px; border: 5px dashed red; margin: 20px; background-color: slateblue; } </style> </head> <body> <div class="box"> 背景颜色 </div> </body> </html>

2、背景图片 background-image

属性名:background-image作用:给盒子添加图片的背景修饰加载范围:默认的加载到边框及以内部分。后期如果图片不重复加载,加载从 border 以内开始属性值:url(图片路径)url:uniform resource locator,统一资源定位符,小括号内部书写查找图片的路径 .box { width: 200px; height: 200px; padding: 30px; border: 5px dashed red; margin: 20px; /* background-color: slateblue; 背景颜色 */ background-image: url(images/lagouwang.jpg); }

如果图片不重复,从 border 以内开始加载

背景图和背景颜色可以同时设置,背景图会压盖背景颜色,没有背景图的区域会显示背 景颜色

3、背景重复 background-repeat

属性名:background-repeat作用:设置添加的背景图是否要在盒子中重复进行加载根据属性值不同,有四种重复加载方式 属性值作用repeat重复,默认属性值,表示会使用背景图片重复加载填满整个盒子背景区域no-­repeat不重复,不论背景图是否大于盒子范围,都只加载一次图片repeat-­-x水平重复,使用背景图片水平重复加载铺满第一行,垂直方向不重复repeat-­-y垂直重复,使用背景图片垂直重复加载铺满第一列,水平方向不重复 .box { width: 200px; height: 200px; padding: 30px; border: 5px dashed red; margin: 20px; /* background-color: slateblue; 背景颜色 */ background-image: url(images/lagou_small.jpg); /* background-repeat: repeat; */ /* background-repeat: no-repeat; */ /* background-repeat: repeat-x; */ background-repeat: repeat-y; }

4、背景定位 background-position

属性名:background-position作用:主要用于设置不重复的图片在背景区域的加载开始位置属性值:分为三种写法,单词表示法、像素表示法、百分比表示法。不论哪种写法属性值都有两个,值之间用空格分隔第一个属性值:表示背景图片在水平方向的位置第二个属性值:表示背景图片在垂直方向的位置

①、单词表示法

属性值都是使用代表方向的单词进行书写水平方向可选单词:left、center、right垂直方向可选单词:top、center、bottom单词表示图片与盒子背景区域进行对应方向的对齐 background-position: right bottom; /* 对应方向对齐 */

②、像素表示法

使用像素值作为背景定位的属性值

第一个属性值:像素是几,表示背景图片左上角针对 border 以内的左上顶点水平方向位移的距离

第二个属性值:像素是几,表示背景图片左上角针对 border 以内的左上顶点垂直方向位移的距离

background-position: 50px 50px;

像素值区分正负,正负代表位移方向不同:

正数:表示图片针对盒子的原点向右、向下移动负数:表示图片针对盒子的原点向左、向上移动

百分比表示法使用百分比数字作为属性值

100% 代表的数值:水平方向,等价于盒子的 border 以内的背景区域宽度减去图片的宽度垂直方向,等价于盒子的 border 以内的背景区域高度减去图片的高度

5、背景附着 background-attachment

属性名:background-attachment作用:设置的是背景图片是否要随着页面或者盒子的滚动而滚动。 属性值 属性值说明scroll滚动的,表示背景图片与盒子保持相对位置不变,随着页面的滚动而滚走fixed固定的,背景图的定位的参考点从盒子 border 以内的左上顶点变为了浏览器窗口的左 上顶点,页面滚动时,浏览器窗口的左上顶点是不变的,导致背景图固定在浏览器窗口的某个位置,不会随着页面滚动而滚走

6、综合写法 background

background 属性可以将五个单一属性的值进行合写属性值:可以有 1-5 个属性值,值之间用空格进行分隔,背景定位的两个属性值算作 一个属性值,不能被分开也不能颠倒顺序。五个属性值之间可以互换位置 body { background: url(images/bj.jpg) no-repeat center top scroll #666; }

注意事项

注意1:如果属性值没有设置完全,其他没有设置的单一属性会按照默认值加载

background: pink;

注意2:如果想去层叠综合属性中的一部分,其他的属性保持不变,最好使用单一属性写法进行层叠

body { background: url(images/bj.jpg) no-repeat center top #666; background-attachment: scroll; }

7、背景应用

1、替换插入图

h1 标签是权重最高的标签,一般会在内部书写最重要的内容,比如 logo 图片、最大的标题等另外 <h1> 内部的文字,可以帮助提高 SEO 搜索排名在设置的是 logo 图片时,如果使用插入图,就不能书写搜索关键字 <h1> <a href=""><img src="images/lagouwang.jpg"> </a> </h1>

背景图替换插入图方法

如果想解决 SEO 问题,可以将 HTML 结构中,插入图换成搜索关键字,然后使用 css 添加背景图给标签或标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } h1 { width: 200px; height: 100px; } h1 a { display: block; width: 200px; height: 100px; background: url(images/lagou_small.jpg) no-repeat; } </style> </head> <body> <h1> <a href=""> 拉钩|招聘|教育|666 </a> </h1> </body> </html>

文字隐藏方法

1、将字号设置为 0。IE8 及以上或高版本 浏览器可以隐藏文字,但是 IE7 及以下有 兼容问题 font-size: 0;

2、可以设置给标签一个 text-indent 属性,属性值为负的很大的值,文字会走到盒子外部,直接再设置溢出隐藏属性,将溢出文字隐藏 h1 a { display: block; width: 200px; height: 100px; background: url(images/lagou_small.jpg) no-repeat; /* font-size: 0; */ text-indent: -20em; overflow: hidden; }

2、padding 区域背景图

在一个盒子中有背景图部分,而且有文字内容,文字会让开背景图区域进行加载,背景区域应该使用 padding 挤出位置

四个方向的 padding 都可能用于添加背景图

.list { width: 300px; padding-left: 10px; border: 1px solid #000; margin: 10px; list-style: none; font: 16px/32px "楷体" } .list li { padding-left: 25px; background: url(images/tubiao.png) no-repeat left center ; }

3、精灵图技术

当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户

然而,一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时, 服务器就会频繁地接受和发送请求,这将大大降低页面的加载速度

为了有效地减少服务器接受和发送请求的次数,提高页面的加载速度,出现了 CSS 精灵技术(也称 CSS Sprites、CSS 雪碧)

css 精灵

CSS 精灵是一种处理网页背景图像的方式它将一个页面涉及到的所有零星背景图像都集中到一张大图中去,然后将大图应用于网页,这样,当用户访问该页面时,只需向服务发送一次请求,网页中的背景图像即可全部展示出来通常情况下,这个由很多小的背景图像合成的大图被称为精灵图

css 精灵的技术依据

将网页中需要用到的小尺寸背景图制作成一张背景透明的 png 图片利用背景定位技术,将精灵图的每个小图片加载到对应的标签上

制作精灵图的注意事项

精灵图上放的都是小的装饰性质的背景图片,插入图片不能往上放精灵图的宽度取决于最宽的那个背景图片的标签宽度精灵图可以横向摆放也可以纵向摆放,但是每个图片之间必须留够足够的空白, 保证背景图片加载到一个标签内部时,不能出现多余内容在精灵图的最底端,尽量留一点空白,方便以后添加其他精灵图

可以通过网上的在线进行制作精灵图

在线制作精灵图

8、CSS3 新增背景属性

1、背景半透明

CSS3 支持背景半透明的写法,颜色值增加了一种 rgba 模式rgba 模式:在 rgb 基础上增加了一个不透明度的设置,不透明度 alpha 取值范围在 0-1 之间,0 表示完全透明,1 表示完全不透明,0.5 表示半透明书写方式:rgba(红色,绿色,蓝色,不透明度)注意: 背景半透明是指盒子背景半透明, 盒子里面的内容不受影响 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> p{ width: 100px; height: 100px; } .p1 { background-color: rgba(0, 255, 0, 1); } .p2 { background-color: rgba(0, 255, 0, 0.5); } </style> </head> <body> <p class="p1"></p> <p class="p2"> b半透明 </p> </body> </html>

同样, 可以给文字和边框透明,都是 rgba 的格式来写

color: rgba(0,0,0,0.5); border: 1px solid rgba(0,0,0,0.5);

2、背景缩放 background-size

通过 background-size 设置背景图片的尺寸,就像我们设置 <img> 的尺寸一样,在移动 Web 开发中做屏幕适配应用非常广泛

属性值说明px 值1 - 2个像素值,只设置 1 个值,垂直方向等比例拉伸,设置2个值,按照设置值 加载百分比同像素值设置方法相同,设置百分比时,数值参照盒子的宽、高属性cover自动调整缩放比例,把背景图像扩展至足够大,以使背景图像完全覆盖背景区域,如有溢出部分则会被隐藏contain自动调整缩放比例,把图像图像扩展至最大尺寸,保证图片始终完整显示在背景区域 .box1 { background-size: 50px 50px; } .box2 { background-size: 50% 50%; } .box3 { background-size: cover; } .box4 { background-size: contain; } <div class="box1"> px 值 </div> <div class="box2"> 百分比 </div> <div class="box3"> cover </div> <div class="box4"> contain </div>

3、多背景

SS3 中规定,一个盒子上,可以添加多个背景图片background-image 的属性值书写时,以逗号分隔多背景的 URL路径地址注意:背景加载时,先写的背景压盖后写的背景图片 background-image: url(images/pdx.jpg) ,url(images/lagouwang.jpg);

九、定位属性

定位属性 position

属性名:position

属性值:

relative 相对定位absolute 绝对定位fixed 固定定位

作用:设置定位的元素,它需要根据某个参考元素发生位置的偏移

偏移量属性

定位的元素要想发生位置的移动,必须搭配偏移量属性进行设置

水平方向:left、right垂直方向:top、bottom属性值:常用 px 为单位的数值,或者百分比

1、相对定位

属性值:relative,相对的意思参考元素:标签加载的原始位置必须搭配偏移量属性才能发生位置移动 * { margin: 0; padding: 0; } .box { width: 200px; margin: 20px; } .box p { width: 100px; height: 100px; margin-bottom: 10px; background-color: skyblue; } .box .para { position: relative; left: 100px; top: 100px; background: yellowgreen; } <div class="box"> <p> 1 </p> <p> 2 </p> <p class="para"> 3 </p> <p> 4 </p> </div>

相对定位的性质

性质:相对定位的元素不脱离标签的原始状态(标准流、浮动),不会让出原来占有的位置元素显示效果上,原位留坑,形影分离

注意事项

①、偏移量属性的值是区分正负的 正数:表示偏移方向与属性名方向相反负数:表示偏移方向与属性名方向相同 .box .para { position: relative; left: -100px; top: -100px; background: yellowgreen; } ②、同一个方向,不能设置两个偏移量属性,如果水平方向同时设置了 left 和 right 属性,只会加载 left 属性。垂直方向只加载 top 属性建议:书写时从水平方向和垂直方向各挑一个属性进行组合 .box .para { position: relative; left: -50px; top: -50px; right: -50px; bottom: -50px; background: yellowgreen; }

③、由于相对定位的参考元素是自身,left 的正值等价于 right 的负值,top 的 正值等价于 bottom 的负值

为了方便记忆,可以选择只使用 left、top 组合

实际应用

由于相对定位元素比较稳定,不会随意让出位置,可以将相对定位的元素作为后 期绝对定位的参考元素,就是所说的子绝父相情况相对定位比较稳定,可以在占有原始位置的情况下,对加载效果区域进行位置调整,进行微调设置。或者对文字进行微调

代码地址

2、绝对定位

属性值:absolute,绝对的意思参考元素:参考的是距离最近的有定位的祖先元素,如果祖先都没有定位,参考 <body>必须搭配偏移量属性才会发生位置移动 .box .para { position: absolute; left: 100px; top: 100px; background: yellowgreen; }

绝对定位的性质

性质:绝对定位的元素脱离标准流,会让出标准流位置,可以设置宽高,也可以随时定义位置,绝对定位的元素不设置宽高只能被内容撑开注意1:绝对定位的参考元素是不固定的,不同的参考元素以及不同的偏移量组合, 会导致绝对定位元素的参考点不同,具体位移效果不同注意2:在绝对定位中,由于参考点不同,left 正值不再等价于 right 的负值 .box .para { position: absolute; /* left: 100px; */ top: 100px; right: 100px; background: yellowgreen; }

<body> 为参考元素的参考点

以 <body> 为参考元素时,参考点的确定与偏移量方向有关第一,如果有 top 参与的定位,参考点就是 页面的左上顶点和右上顶点。自 身的对比点是盒子的所有盒模型属性最外面的左上角或右上角第二,如果有 bottom 参与的绝对定位,参考点是页面首屏的左下顶点或 右下顶点。对比点是盒子的所有盒模型属性最外面的左下角或右下角

实际应用中,如果以 <body> 为参考元素,不同分辨率的浏览器中,绝对定位的元 素位置是不同的,所以较少使用 <body> 作为参考元素

祖先级为参考元素

如果祖先级中有定位的元素,就不会去参考 <body>参考元素:参考的是祖先元素中有任意定位的,在 HTML 结构中距离目标最近的祖先

根据绝对定位的参考元素的定位类型不同,有三种定位组合 方式:子绝父相、子绝父绝、子绝父固,由于相对定位的祖 先级位置更稳定,大多使用子绝父相的情况

祖先元素参考点

如果绝对定位的参考元素是某个祖先级,参考点是盒子 border 以内的四个顶点,组合方向决定了参考点, 绝对定位的元素只关心对比点和参考点之间的距离,会忽视 参考元素的 padding 区域left、top:参考点是祖先的 border 以内的左上顶点,对比点是盒子自身的左上角right、top:参考点是祖先的 border 以内的右上顶点,对比点是盒子自身的右上角left、bottom:参考点是祖先的 border 以内的左下顶点,对比点是盒子自身的左下角right、bottom:参考点是祖先的 border 以内的右下顶点,对比点是盒子自身的右下角

3、固定定位

属性值:fixed,固定的意思参考元素:浏览器窗口参考点:浏览器窗口的四个顶点。跟偏移量组合方向有关由于浏览器窗口的四个顶点位置不会发生变化,会导致固定定位的元素会始终显示在定位位置 .backtop { position: fixed; /* 固定定位*/ right: 500px; bottom: 500px; width: 100px; height: 50px; background-color: #ccc; font: 18px/50px "楷体"; text-align: center; text-decoration: none; } <a href="#" class="backtop"> 顶部位置 </a>

固定定位的性质

性质:固定定位的元素脱离标准流,让出标准流位置,可以设置宽高,根据偏移量 属性可以任意设置在浏览器窗口的位置。固定定位的元素会始终显示在浏览器窗口上

4、定位应用

定位 position 根据属性值不同有三种类型的定位效 果,其中绝对定位和固定定位的元素会脱离标准流,, 三种定位在页面中有各自的使用场景

压盖效果

所有的定位类型都可以实现压盖效果由于绝对定位的元素脱标,不占标准流位置,压盖效果更彻底,实际工作中,常见的是绝对定位制作的压盖 .box p { position: absolute; /* 绝对*/ top: 100px; left: 100px; width: 100px; height: 100px; background-color: coral; } <div class="box"> <img src="images/lagouwang.jpg" alt=""> <p> </p> </div>

居中

定位的元素,如果想在参考元素中居中显示,有自己的居中方法: 第一步:在居中的方向使用一个偏移量属性,例如 left,设置属性值为 50%。导致 图片的左顶点移动到参考元素的中心位置 百分比形式的属性值,百分百参考的是参考元素的 border 以内的宽度、高度 第二步:给绝对定位的子盒子设置一个同方向的 margin,例如 margin-left,属性值 为负的自身宽度的一半 .box p { position: absolute; /* 绝对*/ left: 50%; top: 50px; width: 100px; height: 100px; margin-left: -50px; background-color: coral; }

扩展应用

①、解决标准流中,宽的子盒子在窄的父盒子中的居中,可以设置大的子盒子相对定位,利用相对定位居中的方法进行居中

.box1 p { position: relative; width: 600px; height: 100px; margin-left: -100px; background-color: sandybrown; }

②、浮动的元素居中,在不改变原始浮动状态情况下,可以利用相对定位居中方法

5、压盖顺序

实际使用定位时,可能出现多个定位的元素加载到同一个位置的情况,这时候压盖的顺序是可以控制的

默认压盖顺序

定位的元素不区分定位类型,都会去压盖标准流或浮动的元素如果都是定位的元素,在 HTML 中后写的定位压盖先写的定位因此,书写代码时,需要注意压盖效果,必须合理设置 HTML 元素的书写顺序

自定义压盖顺序

如果想更改定位的元素的压盖顺序,可以设置一个 z-index 属性属性值:数字 /* 给灰色设置 z-index */ z-index: 1;

自定义压盖顺序注意事项

属性值大的会压盖属性值小的,设置z-index属性的会压盖没有设置的如果属性值相同,比较HTML书写顺序,后写的压盖先写的z-index属性只能设置给定位的元素才会生效,如果给没有定位的元素设置,不会生效父子盒模型中,如果父子盒子都进行了定位,与其他的父子级有压盖的部分: 父级盒子:如果不设置z-index,后写的压盖先写的;如果设置了z-index,值大的压盖值小的子级盒子:如果父级没有设置z-index属性,子级z-index大的会压盖小的;如果父级设置了 z-index值,无论子级值是多少,都是父级的值大的子级压盖父级值小的子级,俗称“从父效应”

6、综合案例

静态轮播图

代码地址

最新回复(0)