CSS选择器

【一】基本选择器

【1】概览

  • 在CSS中,选择器用于选取HTML文档中的元素。

  • 根据选择器的类型和语法的不同,可以选择不同的元素。

  • 常用的有id选择器、类选择器、元素/标签选择器和通用选择器。

选择符名称版本描述
*通配选择符(Universal Selector)CSS2所有元素对象。
E类型选择符(Type Selector)CSS1以文档语言对象类型作为选择符。
#myidid选择符(ID Selector)CSS1以唯一标识符id属性等于myid的E对象作为选择符。
.myclassclass选择符(Class Selector)CSS1以class属性包含myclass的E对象作为选择符。

【2】选择器使用

(1)id选择器

  • 通过元素的id属性进行选取

  • 每个页面中id值是唯一的,所以在css中最好不要重复使用id选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>color</title>
    <style>
        /* 使用方法:# + id属性值 + {css属性名:css属性值} */
        #p1 {color: aqua;}
    </style>
</head>
<body>
<p id="p1">hello,world</p>
</body>
</html>

(2)类选择器

  • 通过元素的class属性进行选取。

  • 多个元素可以共享一个class,所以class选择器是应用样式的最佳方式。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>color</title>
    <style>
        /* 使用方法:. + id属性值 + {css属性名:css属性值} */
        .p1 {color: aqua;}
    </style>
</head>
<body>
<p class="p1">hello,world</p>
<p class="p1">hello</p>
<p class="p1">你好</p>
​
</body>
</html>

(3)元素/标签选择器

  • 通过元素标签名称进行选取

  • 例如选择所有的段落、列表等

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>color</title>
    <style>
        /* 使用方法:标签名 + {css属性名:css属性值} */
        span {color: aqua;}
        p {color: blue}
    </style>
</head>
<body>
<span>髣髴兮若轻云之蔽月</span>
<span>飘摇兮若流风之回雪</span>
<p>举头望明月</p>
<p>低头思故乡</p>
</body>
</html>

(4)通用选择器

  • *表示所有的元素

  • 对所有元素都有影响,即改变所有元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>color</title>
    <style>
        /* 使用方法:* + {css属性名:css属性值} */
        * {color: aqua;}
    </style>
</head>
<body>
<span>髣髴兮若轻云之蔽月</span>
<span>飘摇兮若流风之回雪</span>
<p>举头望明月</p>
<p>低头思故乡</p>
</body>
</html>

【二】关系选择器

【1】概览

  • 后代选择器

  • 儿子选择器

  • 毗邻选择器

  • 弟弟选择器

选择符名称版本描述
E F包含选择符(Descendant combinator)CSS1选择所有被E元素包含的F元素。
E>F子选择符(Child combinator)CSS2选择所有作为E元素的子元素F。
E+F相邻选择符(Adjacent sibling combinator)CSS2选择紧贴在E元素之后F元素。
E~F兄弟选择符(General sibling combinator)CSS3选择E元素所有兄弟元素F。

【2】标签关系

<div>div1
    <div>div2
        <p>p1</p>
    </div>
    <p>p2
        <span>span1</span>
    </p>
    <span>span2</span>
</div>
  • 分析亲属关系

    1. 对于div1来说div2,p2,span2都是儿子

    2. 对于div2、p2、span2来说,div1就是父亲

    3. 对于p1来说,div2是父亲,div1是爷爷

    4. 对于span2来说,div2,p2都是哥哥

    5. 在div1内部的所有标签无论层级,都称之为div1的后代

【3】使用方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试关系</title>
    <style>
        /*后代选择器*/
        /*div里面的所有span标签都变成红色*/
        /*空格*/
        div span{color: red;}
​
        /*儿子选择器*/
        /*div内的所有儿子标签变色,而其他标签(例如孙子辈)不会变色*/
        /*>*/
        div > span {color: blue;}
​
        /*毗邻选择器*/
        /*同级别紧挨着下面的第一个标签*/
        /*+*/
        div + p {color: aqua}
​
        /*弟弟选择器*/
        /*同级别下面的所有span标签,只要是在下面的无论辈分*/
        /*~*/
        div ~ span {color: antiquewhite}
    </style>
​
</head>
<body>
<div>div1
    <div>div2
        <p>p1</p>
    </div>
    <p>p2
        <span>span1</span>
    </p>
    <span>span2</span>
</div>
</body>
</html>

【三】属性选择器

【1】概览

  • 含有某个属性

  • 含有某个属性并且有某个值

  • 含有某个属性并且有某个值的某个标签

选择符版本描述
E[att]CSS2选择具有att属性的E元素。
E[att="val"]CSS2选择具有att属性且属性值等于val的E元素。
E[att~="val"]CSS2选择具有att属性且属性值为一用空格分隔的字词列表,其中一个等于val的E元素。
E[att^="val"]CSS3选择具有att属性且属性值为以val开头的字符串的E元素。
E[att$="val"]CSS3选择具有att属性且属性值为以val结尾的字符串的E元素。
E[att*="val"]CSS3选择具有att属性且属性值为包含val的字符串的E元素。
E[att|="val"]CSS2选择具有att属性且属性值为以val开头并用连接符"-"分隔的字符串的E元素,如果属性值仅为val,也将被选择。

【2】使用方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试关系</title>
    <style>
    /*方式一:[type_name] {属性名:属性值}*/
    [username]{color: red;}
​
    /*方式二: [type_name=type_value] {属性名:属性值}*/
    [username="knight"]{color: aquamarine;}
    [username="ttdw"]{color: bisque;}
    </style>
​
</head>
<body>
<input type="text" username>
<input type="text" username="knight">
<input type="text" username="ttdw">
​
<p username="knight">测试</p>
<div username="ttdw">童童大王</div>
</body>
</html>

【四】伪类选择器

选择符版本描述
E:linkCSS1设置超链接a在未被访问前的样式。
E:visitedCSS1设置超链接a在其链接地址已被访问过时的样式。
E:hoverCSS1/2设置元素在其鼠标悬停时的样式。
E:activeCSS1/2设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式。
E:focusCSS1/2设置元素在成为输入焦点(该元素的onfocus事件发生)时的样式。
E:lang(fr)CSS2匹配使用特殊语言的E元素。
E:not(s)CSS3匹配不含有s选择符的元素E。
E:rootCSS3匹配E元素在文档的根元素。
E:first-childCSS2匹配父元素的第一个子元素E。
E:last-childCSS3匹配父元素的最后一个子元素E。
E:only-childCSS3匹配父元素仅有的一个子元素E。
E:nth-child(n)CSS3匹配父元素的第n个子元素E。
E:nth-last-child(n)CSS3匹配父元素的倒数第n个子元素E。
E:first-of-typeCSS3匹配父元素下第一个类型为E的子元素。
E:last-of-typeCSS3匹配父元素下的所有E子元素中的倒数第一个。
E:only-of-typeCSS3匹配父元素的所有子元素中唯一的那个子元素E。
E:nth-of-type(n)CSS3匹配父元素的第n个子元素E。
E:nth-last-of-type(n)CSS3匹配父元素的倒数第n个子元素E。
E:emptyCSS3匹配没有任何子元素(包括text节点)的元素E。
E:checkedCSS3匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时)
E:enabledCSS3匹配用户界面上处于可用状态的元素E。
E:disabledCSS3匹配用户界面上处于禁用状态的元素E。
E:targetCSS3匹配相关URL指向的E元素。
@page:firstCSS2设置页面容器第一页使用的样式。仅用于@page规则
@page:leftCSS2设置页面容器位于装订线左边的所有页面使用的样式。仅用于@page规则
@page:rightCSS2设置页面容器位于装订线右边的所有页面使用的样式。仅用于@page规则

【1】使用方法

(1)超链接设置样式顺序

超链接状态顺序:
a:link {}
a:visited {}
a:hover {}
a:active {}
E:link { sRules }
  设置超链接a在未被访问前的样式。
  如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现
  超链接的4种状态,需要有特定的书写顺序才能生效。

E:visited { sRules }
  设置超链接a在其链接地址已被访问过时的样式。
  如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现
  超链接的4种状态,需要有特定的书写顺序才能生效。

E:hover { sRules }
  设置元素在其鼠标悬停时的样式。
  如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现
  超链接的4种状态,需要有特定的书写顺序才能生效。

E:active { sRules }
  设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式。
  如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现
  超链接的4种状态,需要有特定的书写顺序才能生效。

E:focus { sRules }
  设置对象在成为输入焦点(该对象的onfocus事件发生)时的样式。
  webkit内核浏览器会默认给:focus状态的元素加上outline的样式。

(2)使用示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试关系</title>
    <style>
        /*为被访问之前的颜色*/
		a:link {color: bisque}
        /*已经被访问过后的颜色*/
        a:visited {color: blue}
        /*鼠标光点悬浮在上的颜色*/
        a:hover {color: aquamarine}
        /*鼠标点击未松开时的颜色*/
        a:active {color: red}
        /*设置对象在成为输入焦点时的样式*/
        input:focus{color: coral}
    </style>

</head>
<body>
<a href="https://www.baidu.com/">当前网址是否存在</a>
<input type="text">
</body>
</html>

(3)补充

E:first-child { sRules }
  匹配父元素的第一个子元素E。
  要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素
  E必须是它的兄弟元素中的第一个元素,换言之,E必须是父元素的第一个子元素。
  与之类似的伪类还有E:last-child,只不过情况正好相反,需要它是最后一个子元素。

E:last-child { sRules }
  匹配父元素的最后一个子元素E。
  要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素
  E必须是它的兄弟元素中的最后一个元素,换言之,E必须是父元素的最后一个子元素。
  与之类似的伪类还有E:first-child,只不过情况正好相反,需要它是第一个子元素。
E:only-child { sRules }
  匹配父元素仅有的一个子元素E。
  要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素

E:nth-child(n) { sRules }
  匹配父元素的第n个子元素E,假设该子元素不是E,则选择符无效。
  要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素
  该选择符允许使用一个乘法因子(n)来作为换算方式,比如我们想选中所有的偶数子元素E,那么选择符可以写成:E:nth-child(2n)

E:nth-last-child(n) { sRules }
  匹配父元素的倒数第n个子元素E,假设该子元素不是E,则选择符无效。
  要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素
  该选择符允许使用一个乘法因子(n)来作为换算方式,比如我们想选中倒数第一个子元素E,那么选择符可以写成:E:nth-last-child(1)

【五】伪元素选择器

【1】概览

选择符版本描述
E:first-letter/E::first-letterCSS1/3设置对象内的第一个字符的样式。
E:first-line/E::first-lineCSS1/3设置对象内的第一行的样式。
E:before/E::beforeCSS2/3设置在对象前(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用
E:after/E::afterCSS2/3设置在对象后(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用
E::placeholderCSS3设置对象文字占位符的样式。
E::selectionCSS3设置对象被选择时的颜色。

【2】注解

E:first-letter/E::first-letter { sRules }
  设置对象内的第一个字符的样式。
  此伪对象仅作用于块对象。内联对象要使用该伪对象,必须先将其设置为块级对象。
  该伪类常被用来配合font-size属性和float属性制作首字下沉效果。
  IE6在使用该选择符时有个显式的BUG:选择符与包含规则的花括号之间不能紧挨着,需留有空格或换行。同时还存在该BUG的选择符包括:E:first-line
  CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。
  即E:first-letter可转化为E::first-letter

E:first-line/E::first-line { sRules }
  设置对象内的第一行的样式。
  此伪对象仅作用于块对象。内联对象要使用该伪对象,必须先将其设置为块级对象。
  IE6在使用该选择符时有个显式的BUG:选择符与包含规则的花括号之间不能紧挨着,需留有空格或换行。同时还存在该BUG的选择符包括:E:first-letter
  CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。
  即E:first-line可转化为E::first-line

E:before/E::before { sRules }
  设置在对象前(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用,并且必须定义content属性
  CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。
  即E:before可转化为E::before

E:after/E::after { sRules }
  设置在对象后(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用,并且必须定义content属性
  CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。
  即E:after可转化为E::after

E::placeholder { sRules }
  设置对象文字占位符的样式。
  ::placeholder 伪元素用于控制表单输入框占位符的外观,它允许开发者/设计师改变文字占位符的样式,默认的文字占位符为浅灰色。
  当表单背景色为类似的颜色时它可能效果并不是很明显,那么就可以使用这个伪元素来改变文字占位符的颜色。
  需要注意的是,除了Firefox是 ::[prefix]placeholder,其他浏览器都是使用 ::[prefix]input-placeholder\

E::selection { sRules }
  设置对象被选择时的样式。
  需要注意的是,::selection只能定义被选择时的background-color,color及text-shadow(IE11尚不支持定义该属性)。

【3】使用示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试关系</title>
    <style>
    /*修改首个字,大小颜色*/
    p:first-letter {
        font-size:48px;
        color: coral;
    }

    /*在文本开头添加内容    */
    p:before{
        content: '是的';
        color: bisque;
    }
    p:after{
        content: '嘿嘿';
        color: aqua;
    }
    </style>
    
</head>
<body>
<p>她真好看</p>
</body>
</html>

【六】分组与嵌套

【1】分组

(1)使用方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试关系</title>
    <style>
        /*查找p或者span*/        
        p,span{
            color: coral;
        }
    </style>
</head>
<body>
<div>div1
	<div>div2
		<p>p1</p>
        <div>div4</div>
	</div>
	<p>p2
		<span>span1</span>
	</p>
	<span>span2</span>
    <div>div3</div>
</div>
</body>
</html>

【2】嵌套

(1)使用方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试关系</title>
    <style>
        /*查找id是d1的内部class包含c1的儿子标签*/
		/*查找id是c2的p标签*/
        #d1>.c1,p.c2{
            color: coral;
        }
		/*查找div内部id是d2的后代标签*/
		div #d2{
			color: bisque;
		}
    </style>
</head>
<body>
<div>div1
	<div id="d3">div2
		<p class="c2">p1</p>
        <div class="c1">div4</div>
	</div>
	<p id="d1">p2
		<span class="c1">span1</span>
		<p class="c2">p5</p>
	<span id="d2">span2</span>
    <div>div3</div>
</div>
</body>
</html>

【七】选择器优先级

【1】概述

  • !important

  • 行内 style 属性

  • id选择器

  • 类选择器

  • 标签选择器

  • 行内选择器

【2】选择器相同,书写顺序不同

  • 就近原则:谁离的近,就使用谁的样式

【3】选择器不同

  • !important > 行内 style 属性 > 行内选择器 > id选择器 > 类选择器 > 标签选择器

  • 精确度越高,优先级越高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值