CSS Pseudo-classes

先来一条金科玉律:

伪类的效果可以通过添加一个实际的类来达到;伪元素的效果可以通过添加一个实际的元素来达到。

第一部分,Pseudo-classes,伪类

一、链接系

(这个应该是最熟悉的啦。)

a:link——未访问的链接

a:visited——已访问的链接

a:hover——鼠标悬浮在链接上时的样式

a:active——鼠标点击链接时的样式

上述4种伪类在同时应用到<a>元素时,考虑到样式的层叠关系,需要按照LoVeHA的顺序,否则容易出问题。

二、表单系

input:focus——指定焦点元素的样式;简单来说,就是鼠标光标闪动的那个地方,常用于表单的输入框。

input:disabled——指定带有disabled属性的<input>元素的样式

input:enabled——指定带有enabled属性的<input>元素的样式

input:checked——指定带有checked属性的<input>元素的样式

input:required——指定带有required属性的<input>元素的样式

input:optional——指定不带有required属性的<input>元素的样式

input:valid——指定带有有效值的<input>元素的样式

input:invalid——指定带有无效值的<input>元素的样式

input:read-only——指定带有readonly属性的<input>元素的样式

input:read-write——指定不带有readonly属性的<input>元素的样式

input:in-range——假如一个输入框中指定了最小值和最大值(type="number"/type="range"),当输入的值在指定的范围内时,就会应用这个样式

input:out-of-range——xxxxxx,当输入的值超出了指定的范围,就会应用这个样式。

三、交互系

:hover——理论上能用于所有元素,比如#header:hover,其意思是指,当用户鼠标悬浮在id值为header的元素上时,应用指定的样式。

:active——理论上能用于所有元素,比如#header:active,其意思是指,当用户鼠标点击id值为header的元素时,应用指定的样式。

:focus——理论上能用于所有能够被焦点化的元素,多用于表单元素,比如<input>、<textarea>等。

焦点化,通俗地理解,鼠标点一下,会出现光标(一闪一闪的)。

四、数字系

前方高能,备好纸笔。。。

:first-child

比如 p:first-child,第一步,在任何一个元素中,找到第一个子元素;第二步,这个子元素是不是p元素;如果是,就选它(如果不是,就跳过),然后寻找下一个。

:last-child

寻找最后一个子元素,步骤同上。

:nth-child()

这个伪类可以(必须)指定参数,以p:nth-child()举例,有以下几种方式。

提示:参数表达式中n都是从0开始算的。

1.    当参数为一个具体的数字,比如3,p:nth-child(3);第一步,在任何一个元素中,找到它的第3个子元素;第二步,这个子元素是不是p元素。

当参数为1的时候,即 :nth-child(1),等同于 :first-child。

有图才有真相:

CSS如下:

1 p:nth-child(3) {
2     color:orange;
3 }

页面效果:

第一幅图:

第二幅图:

一切尽在不言中。。。

2.    当参数为2n,那就选择所有的偶数子元素,等同于even;当参数为2n+1或2n-1,那就选择所有的奇数子元素,等同于odd;这个在做斑马线表格的时候经常用。

3.    当参数为n的倍数,比如3n,这个好理解。

4.    当参数为n+具体数字,比如n+3,表示从第3个子元素往后找;因为n从0开始,那么这个表达式的值就是从3开始,3、4、5。。。这样子。

5.    当参数为-n+具体数字,比如-n+3,表示从第3个子元素往前找;因为n从0开始,那么这个表达式的值就是从3开始,然后2、1。。。这样子。

6.    当参数为具体数字*n+1,比如3n+1,表示从1开始,隔3选一。

实践中可以根据需要自创表达式,自行发挥吧。

记住两步,第n个找到了之后,还要看元素类型对不对。

:nth-last-child

接受的参数与 :nth-child()一致,只不过这个要倒过来数。

:nth-of-type()

接受参数,参数类型同上。

比如 p:nth-of-type(3),先找到所有的p元素,然后找第3个p元素,给它应用样式。

有图有真相,请看下面:

CSS代码:

1 h1:nth-of-type(2) {
2     color:blue;
3 }
4
5 p:nth-of-type(3) {
6     color:orange;
7 }

下面上图:

记住两步,先找元素类型,再找第n个。

:first-of-type——略

:last-of-type——略

:only-child

比如 p:only-child,它表示,父元素中只有唯一一个子元素,而且这个子元素还必须是p元素。

:only-of-type

比如 p:only-of-type,它表示,父元素中有几个子元素都没关系,但是p元素只能有一个。

:empty

比如 p:empty,它表示,如果有一个完全空的(连空格都没有的)p元素,就选它。

两步,先找完全空的元素,再看是不是p元素。

小发现:

如果html是这样子的,<p> </p>,中间有空格,在页面上是没有这个p元素的位置的;

如果html是这样的,<p>&nbsp;</p>,中间有一个&nbsp; , 在页面上会显示一个空白行。

(额。但是不知道这个区别有什么用。。。)

时间: 2024-10-12 04:01:29

CSS Pseudo-classes的相关文章

[CSS] DOM Hierarchy Pseudo Classes :first-child :last-child :nth-child (demystified)

DOM hierarchy pseudo-classes allow you to style specific elements based on where they fall in the hierarchy and what type of elements they are. You can also use :nth-child to target custom element patterns, like every other element. <!doctype html>

[CSS3] Define Form Element States with CSS Form Pseudo Classes

Using just semantic CSS Pseudo-Classes you can help define important states for form elements that ensure the user provides the correct data without frustration. input:focus { outline: none; box-shadow: 3px 3px 1px rgba(0,0,0,0.2); border: 1px solid

[CSS3] Identify Interactive HTML Elements with CSS Link Pseudo Classes

The interactive pseudo-classes for links (and buttons) allow us to make sure the user knows what elements on the page are interactive and that they can use them to navigate the website. Targeting the a tag with href attr: a[href]:hover { text-decorat

[CSS3] Target HTML Elements not Explicitly set in the DOM with CSS Pseudo Elements

Pseudo elements allow us to target elements that are not explicitly set in the DOM. Using ::before ::after we can actually create and manipulate elements in the DOM that do not impact the content. While ::first-letter ::first-line ::selection ::place

CSS Selectors

Table of Contents Universal Selector Element Selector Class Selector ID Selector Attribute Selector Attribute Equals Attribute Begins With Attribute Begins With Language Code Attribute Ends With Attribute Contains Attribute Contains Word Group Select

CSS隐藏元素的几种方法

使用CSS隐藏元素的方法很多,在这里简单总结一下: 1.display:none display:none 应该是最常用的一种隐藏元素的方法,使用该方法隐藏的元素脱离文档流不占据空间,不会被浏览器解析,不能点击,搜索引擎可能会认为被隐藏的文字属于垃圾信息而被忽略,而且屏幕阅读器(是为视觉上有障碍的人设计的读取屏幕内容的程序)会忽略被隐藏的文字. 2.visibility:hidden 使用 visibility:hidden 隐藏的元素,不能点击,但是会占据文档空间,不够灵活,一般配合 posi

关于页面reflow

什么是 reflow 浏览器为了重新渲染部分或整个页面,重新计算页面元素位置和几何结构(geometries)的进程叫做 reflow. 某个节点reflow时会重新计算节点的尺寸和位置,而且还有可能触发其子节点.祖先节点和页面上的其他节点reflow,在这之后再触发一次repaint. 由于 reflow 是一种浏览器中的用户拦截(user-blocking)操作,所以了解如何减少 reflow 次数,及不同的文档属性(DOM 层级(DOM depth),CSS 效率,不用类型的 style

浏览器渲染展示网页的过程

渲染过程: 1. 解析HTML(HTML Parser) 2. 构建DOM树(DOM Tree) 3. 构建渲染树(Render Tree) 4. 绘制渲染树(Painting) 解释: 通过请求得到的 HTML 经过解析(HTML parser)生成 DOM Tree.而在 CSS 解析完毕后,需要将解析的结果与 DOM Tree 的内容一起进行分析建立一棵 Render Tree,最终用来进行绘图(Painting). 图示: 回流(reflow)与重绘(repaint) 回流(reflow

Javascript定时器(三)——setTimeout(func, 0)

setTimeout(func, 0)可以使用在很多地方,拆分循环.模拟事件捕获.页面渲染等 一.setTimeout中的delay参数为0,并不是指马上执行 <script type="text/javascript"> function delay1() { console.log('delay1'); } function delay2() { console.log('delay2'); } function delay3() { console.log('dela

reflow和repaint区别?

作者:zccst 重绘和重排之前也知道,但也没有可以详细了解他们的机制,区别,以及对性能的影响. A repaint occurs when changes are made to an elements skin that changes visibility, but do not affect its layout. Examples of this include outline, visibility, or background color. According to Opera,