浮动、定位、伪类、伪元素

目录

一、浮动

传统网页布局的三种方式

标准流(普通流/文档流)

浮动

float属性

浮动特性

常见网页布局

清除浮动

二、定位

定位组成

定位模式

static静态定位

relative相对定位

absolute绝对定位

fixed固定定位

sticky粘性定位

边偏移

三、伪类

:anchor伪类

:first-child伪类

:lang伪类

伪类和CSS类

四、伪元素

::first-line伪元素

::first-letter伪元素

::before伪元素

::after伪元素

::selection伪元素

多个伪元素组合

 CSS伪类/元素总结


一、浮动

传统网页布局的三种方式

网页布局的本质--用CSS来摆放盒子,把盒子摆放到相应位置;

CSS提供了三种传统布局方式(盒子如何排列顺序):

普通流(标准流)

浮动

定位

标准流(普通流/文档流)

标签按照规定好默认方式排列,是最基本的布局方式。

(1)块级元素会独占一行,从上向下顺序排列。eg:divhr、h1~h6、ul、ol、dl、form、table等。

(2)行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘会自动换行。eg:span、a、i、em等。

注:实际开发中,一个页面基本都包含了这三种布局方式。

浮动

由于一些效果(如左右对齐等)用标准流没办法很方便地实现,可以利用浮动来完成布局。

浮动最常应用于让多个块级元素一行内排列显示,而多个块级元素纵向排列用标准流更合适。

float属性

float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘及包含块或另一个浮动框的边缘。

语法:

选择器 { float:属性值; }

属性值:none(元素不浮动,默认);left(元素向左浮动);right(元素向右浮动);inherit(元素继承其父级的float值)

练习部分代码:

<!DOCTYPE>
<html>
<head>
    <style>
        .left{
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <div class="left">一个盒子</div>
</body>
</html>

大致效果:

浮动特性

浮动元素会脱离标准流;(脱离标准普通流的控制移动到指定位置,浮动的盒子不再保留原先的位置)

浮动的元素会一行内显示并且元素顶部对齐;

浮动的元素会具有行内块元素的特性;

常见网页布局

清除浮动

很多父盒子不便于给高度,但是子盒子的浮动不占有位置,最后父级盒子高度为0时,就会影响下面的标准流盒子。

本质是清除浮动元素造成的影响;

如果父盒子本身有高度,则不需要清除浮动;

清除浮动之后,父级就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了;

语法:

选择器{clear:属性值;}

属性值:left(清除左边的浮动);right(清除右边的浮动);both(清除左右两侧浮动的影响);none(允许两侧都有浮动元素);

我们可以通过向包含元素中添加 overflow:auto;来解决元素浮动溢出问题。

练习部分代码:

清除浮动的方式优点缺点
额外标签法(隔墙法)通俗易懂,便于书写添加了许多无意义的标签,结构化较差
父级overflow:hidden;书写简单溢出隐藏
父级after伪元素结构语义化正确可能有兼容性问题
父级双伪元素结构语义化正确可能有兼容性问题

二、定位

定位是将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。

有些情况(当滚动窗口时,盒子固定在屏幕的某个位置等)用标准流或者浮动无法实现。需要定位来做。

定位组成

由定位模式(用于指定一个元素在文档中的定位方式)和边偏移(决定了该元素的最终位置)组成。

定位模式

通过position属性来设置,属性值如下表:

属性值语义是否脱标移动位置使用频率
static静态定位不能使用边偏移很少
relative相对定位相对于自身位置移动常用
absolute绝对定位带有定位的父级常用
fixed固定定位浏览器可视区常用
sticky粘性定位浏览器可视区当前用得少


static静态定位

静态定位是元素的默认定位方式,无定位的意思。

语法:

选择器 { position:static;}

特点:

按照标准流特性摆放位置,没有边偏移;布局中较少使用;

relative相对定位

元素在移动位置的时候,是相对于原来的位置来说的。

语法:

选择器 { position:relative;}

特点:

不脱标,移动后继续保留原来位置。

absolute绝对定位

在元素移动位置的时候,是相对于它的祖先元素来说的.

语法:

选择器 { position:absolute;}

特点:

没有祖先元素或祖先元素没有定位,则以浏览器为准定位;否则,则以最近一级的有定位祖先元素为参考点移动位置。移动后不再占有原先位置。

fixed固定定位

固定定位是元素固定于浏览器可视区的位置。主要用于使元素的位置在浏览器页面滚动时不发生改变。

语法:

选择器 { position:fixed;}

特点:

以浏览器的可视窗口为参照点移动元素:跟父元素没有关系;不随滚动条滚动;

固定定位不占有原先的位置:脱标,可看作一种特殊的绝对定位;

sticky粘性定位

相对定位和固定定位的混合。

语法:

选择器 { position:sticky;top:10px;}

特点:

以浏览器的可视窗口为参照点移动元素(固定定位特点);粘性定位占有原先位置(相对定位特点);必须添加top、left、right、bottom其中一个才有效;

总结

边偏移

定位的盒子移动到最终位置。

属性例子概述
toptop:100px顶端偏移量,定义元素相对于其父元素上边线的距离
bottombottom:100px底部偏移量,定义元素相对于其父元素下边线的距离
leftleft:100px左侧偏移量,定义元素相对于其父元素左边线的距离
rightright:100px右侧偏移量,定义元素相对于其父元素右边线的距离

定位叠放顺序

使用定位布局时,可能会出现盒子重叠的情况。此时可以使用z-index来控制盒子的前后次序

(z轴)。

语法:

选择器 { z-index:1;}

数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上;属性值相同时,按照书写顺序,后来居上;数字后面不能加单位;只有定位的盒子才有z-index属性;

注:行内元素添加绝对或者固定定位,可以直接设置高度和宽度;块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。

三、伪类

伪类是用来添加一些选择器的特殊效果,名称不分大小写。

语法:

选择器:pseudo-class { property:属性值;}

:anchor伪类

显示链接不同的状态

a:link {color:#FF0000;} /* 未访问的链接 */
a:visited {color:#00FF00;} /* 已访问的链接 */
a:hover {color:#FF00FF;} /* 鼠标划过链接 */
a:active {color:#0000FF;} /* 已选中的链接 */

最终的顺序只有两种:link、visited、focus、hover、active或visited、link、focus、hover、active

:first-child伪类

用来选择父元素的第一个子元素。

示例练习:

p:first-child {
  color: blue;
}

:lang伪类

令你可以为不同的语言定义特殊的规则。

示例练习:

<html>
<head>
<style>
q:lang(test) {
  quotes: "It's a test";
}
</style>
</head>
<body>

<p>这是一个测试<q lang="test">一个测试</q></p>

</body>
</html>

伪类和CSS类

示例练习:

a.highlight:hover {
  color: #FF00FF;
}

四、伪元素

用来添加一些选择器的特殊效果。

语法:

选择器:pseudo-element { property:value;}

::first-line伪元素

用于向文本的首行设置特殊样式,只能用于块级元素。

该伪元素属性:

  • font properties
  • color properties 
  • background properties
  • word-spacing
  • letter-spacing
  • text-decoration
  • vertical-align
  • text-transform
  • line-height
  • clear

示例练习:

p::first-line {
  font-size:100%;
}

::first-letter伪元素

用于向文本的首字母设置特殊样式,只能用于块级元素,可以结合CSS类使用,可以多个结合使用。

属性:

  • font properties
  • color properties 
  • background properties
  • margin properties
  • padding properties
  • border properties
  • text-decoration
  • vertical-align (only if "float" is "none")
  • text-transform
  • line-height
  • float
  • clear

::before伪元素

可以在元素内容前面插入新内容。

示例练习:

p::before {
  content: url(test.gif);
}

::after伪元素

可以在元素内容后面插入新内容。

示例练习:

p::after {
  content: url(test.gif);
}

::selection伪元素

匹配用户选择的元素部分。

属性:

color

background

cursor

outline

多个伪元素组合

p::first-letter {
  font-size: xx-large;
}

::selection {
  color: white; 
  background: orange;
}

 CSS伪类/元素总结

选择器示例示例说明
:checkedinput:checked选择所有选中的表单元素
:disabledinput:disabled选择所有禁用的表单元素
:emptyp:empty选择所有没有子元素的p元素
:enabledinput:enabled选择所有启用的表单元素
:first-of-typep:first-of-type选择的每个 p 元素是其父元素的第一个 p 元素
:in-rangeinput:in-range选择元素指定范围内的值
:invalidinput:invalid选择所有无效的元素
:last-childp:last-child选择所有p元素的最后一个子元素
:last-of-typep:last-of-type选择每个p元素是其母元素的最后一个p元素
:not(selector):not(p)选择所有p以外的元素
:nth-child(n)p:nth-child(2)选择所有 p 元素的父元素的第二个子元素
:nth-last-child(n)p:nth-last-child(2)选择所有p元素倒数的第二个子元素
:nth-last-of-type(n)p:nth-last-of-type(2)选择所有p元素倒数的第二个为p的子元素
:nth-of-type(n)p:nth-of-type(2)选择所有p元素第二个为p的子元素
:only-of-typep:only-of-type选择所有仅有一个子元素为p的元素
:only-childp:only-child选择所有仅有一个子元素的p元素
:optionalinput:optional选择没有"required"的元素属性
:out-of-rangeinput:out-of-range选择指定范围以外的值的元素属性
:read-onlyinput:read-only选择只读属性的元素属性
:read-writeinput:read-write选择没有只读属性的元素属性
:requiredinput:required选择有"required"属性指定的元素属性
:rootroot选择文档的根元素
:target#news:target选择当前活动#news元素(点击URL包含锚的名字)
:validinput:valid选择所有有效值的属性
:linka:link选择所有未访问链接
:visiteda:visited选择所有访问过的链接
:activea:active选择正在活动链接
:hovera:hover把鼠标放在链接上的状态
:focusinput:focus选择元素输入后具有焦点
:first-letterp:first-letter选择每个<p> 元素的第一个字母
:first-linep:first-line选择每个<p> 元素的第一行
:first-childp:first-child选择器匹配属于任意元素的第一个子元素的 <p> 元素
:beforep:before在每个<p>元素之前插入内容
:afterp:after在每个<p>元素之后插入内容
:lang(language)p:lang(it)为<p>元素的lang属性选择一个开始值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值