分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

CSS第一节--选择器(1)

发布时间:2023-09-06 01:54责任编辑:白小东关键词:CSS选择器

前言:本篇主要学习CSS中的选择器,包括CSS及CSS3中的,作为自己的学习总结。

第一部分:CSS初识

  1.何为CSS?有什么作用?

    CSS(Cascading Style Sheets):通常称为层叠样式表。

    作用:主要负责HTML元素样式添加及页面的布局,是结构和样式分离,从而达到美化页面的目的。

  2.CSS基本书写规则

    使用CSS时,需要遵从一定的规范。具体解释如下:

 ???????h1 { ???????????color: red; ???????????font-size: 25px; ???????}

    1>.选择器用于指定CSS样式作用的HTML对象,花括号内设置具体样式。

    2>.属性和属性值以“键值对”的形式出现,之间用英文“:”连接。

    3>.多个属性之间用英文分号“;”隔开。

  3.HTML中如何引入CSS?

    行内式:在元素标签中嵌入style样式。

 ???<h1 style="color: red; font-size: 25px">Status:</h1>

    内嵌式:在head中嵌入。

<head> ???<meta charset="UTF-8"> ???<meta name="viewport" content="width=device-width, initial-scale=1.0"> ???<meta http-equiv="X-UA-Compatible" content="ie=edge"> ???<title>Document</title> ???<style> ???????h1 { ???????????color: red; ???????????font-size: 25px; ???????} ???</style></head>

    外链式:在head标签中通过link标签引入。

<head> ???<meta charset="UTF-8"> ???<meta name="viewport" content="width=device-width, initial-scale=1.0"> ???<meta http-equiv="X-UA-Compatible" content="ie=edge"> ???<link rel="stylesheet" href="./index.css"> ???<title>Document</title></head>

    注意三者优先级:行内式>内嵌式>外链式

第二部分:CSS选择器

  选择器:将CSS样式应用于特定的HTML元素,首先需要找到目标元素。将实现这种功能的部分称为选择器

  1.标签选择器

  使用标签名作为选择器,选中指定标签名的元素,为其设置样式。

  1>任意标签都可当做选择器

  2>所有名称相同的标签都会被选中。

 ???<style type="text/css"> ???????/* 选中所有p标签,设置颜色为绿色,字体为12px。 */ ???????p { ???????????color: green; ????????????font-size: 12px; ???????} ???</style>

  2.类选择器 -- "."

  类选择器使用"."进行标识,后面紧跟类名。

  所谓类就是元素的class属性,任何元素都可以有class属性,且class是可以重复的。

   <p class="green">CSS通常称为CSS样式表或层叠样式表(级联样式表)</p> ???<p>CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等</p>
 ???????/* 使用类选择器为p元素设置不同的样式*/ ???????.green { ???????????color: green; ????????} ???????.red { ???????????color: red ???????}

  3.id选择器 -- "#"

  id选择器用"#"进行标识,后面紧跟id名。

  任何标签都可以有id属性,命名以字母开头,可以包含数字、下划线,区分大小写。

  注意:W3C规定,同一个页面id名不能重复。

 ???<!-- 添加了两个id不一样的p元素 --> ???<p id="one">id选择器使用“#”进行标识,后面紧跟id名,其基本语法格式如下</p> ???<p id="last">id选择器使用“#”进行标识,后面紧跟id名,其基本语法格式如下</p>
 ???<style type="text/css"> ???????/* 通过id名分别为两个p元素设置样式 */ ???????#one { ???????????color: red; ???????} ???????#last { ???????????color: pink; ???????} ???</style>

  4.通配符选择器 -- "*"

  通配符选择器用"*"表示,匹配页面中所有的元素,实际中很少用到。

 ???<p>id选择器使用“#”进行标识,后面紧跟id名,其基本语法格式如下</p> ???<p>id选择器使用“#”进行标识,后面紧跟id名,其基本语法格式如下</p>
 ???<style type="text/css"> ???????/* 通过*选中页面上的两个p元素 */ ???????* { ???????????color: pink; ???????} ???</style>

  5.后代选择器

  选择器之间使用空格隔开的复合选择器就是后代选择器。

 ???<!-- div1的后代中包括两个p元素 --> ???<div id="div1"> ???????<p>div1中的后代元素</p> ???????<ul> ???????????<li><p>div1中的后代元素</p></li> ???????</ul> ???</div>
 ???????/* 使用后代选择器,选中div1中所有的p元素 */ ???????#div1 p { ???????????color: pink; ???????}

  6.交集选择器

  选择器之间无任何修饰符的复合选择器就是交集选择器,比如p.p1,表示选中类名为p1的p元素。

 ???<p id="p1">div1中的后代元素</p> ???<ul> ???????<li> ???????????<p>div1中的后代元素</p> ???????</li> ???</ul>
 ???<style type="text/css"> ???????/* 使用交集选择器,只选中id为p1的p标签 */ ???????p#p1 { ???????????color: red; ???????} ???</style>

  7.并集选择器

  选择器之间使用","连接的复合选择器就是并集选择器,比如选择器".p1, .p2",同时为p1和p2设置样式。

 ???<!-- 为p元素设置p1和p2的类名 --> ???<p class="p1">div1中的后代元素</p> ???<ul> ???????<li> ???????????<p class="p2">div1中的后代元素</p> ???????</li> ???</ul>
 ???<style type="text/css"> ???????/* 使用并集选择器,为两个p元素设置样式 */ ???????.p1,.p2 { ???????????color: red; ???????} ???</style>

  8.子选择器

  选择器之间使用">"连接的复合选择器就是子选择器,比如:div>p,选中了div中的子选择器。

 ???<div> ???????<!-- 此处p属于div的子选择器 --> ???????<p class="p1">div1中的后代元素</p> ???????<ul> ???????????<li> ???????????????<!-- 此处p属于li的子选择器,div的后代选择器 --> ???????????????<p class="p2">div1中的后代元素</p> ???????????</li> ???????</ul> ???</div>
 ???<style type="text/css"> ???????/* div中的儿子元素p会被设置成红色 */ ???????div>p { ??????????color: red; ???????} ???</style>

  9.兄弟选择器

  选择器之间使用"+"连接的复合选择器就是兄弟选择器,比如:.p1+p,选中类名为p1的p元素紧挨着的下一个兄弟元素。

 ???<div> ???????<p>选择器中的兄弟元素</p> ???????<p class="p1">选择器中的兄弟元素</p> ???????<!-- p1紧挨着的兄弟元素 --> ???????<p>选择器中的兄弟元素</p> ???????<p>选择器中的兄弟元素</p> ???????<p>选择器中的兄弟元素</p> ???</div>
 ???????/* .p1中紧挨着的下一个兄弟元素被选中设置 */ ???????.p1+p { ??????????color: red; ???????}

  10.属性选择器

  通过元素的属性,获取相应的元素并为其设置样式的选择器。

    1>.[attribute],根据属性名选择元素。

 ???????<p name=‘attr‘>属性选择器测试属性名</p> ???????<p name=‘attr1‘>属性选择器测试p元素</p> ???????<p name=‘attr2‘>属性选择器测试p元素</p>
 ???????/* 会选中所有有name属性的元素 */ ???????p[name] { ???????????color: red; ???????}

    2>.[attribute=value],选中属性值为value的元素。

 ???????<p name=‘attr‘>属性选择器测试属性名</p> ???????<p name=‘attr1‘>属性选择器测试p元素</p> ???????<p name=‘attr2‘>属性选择器测试p元素</p>
 ???????/* 有name属性,且值为attr的p元素会被选中 */ ???????p[name=‘attr‘] { ???????????color: red; ???????}

    3>.[attribute^=value],属性值以value开头的元素会被选中。(CSS3)

 ???????<p name=‘attr‘>属性选择器测试属性名</p> ???????<p name=‘name1‘>属性选择器测试p元素</p> ???????<p name=‘p2‘>属性选择器测试p元素</p>
 ???????/* 有属性name,且值以p开头的p元素会被选中 */ ???????p[name^=‘p‘] { ???????????color: red; ???????}

    4>.[attribute$=value],属性值以value结尾的元素会被选中。(CSS3)

 ???????<p name=‘attr‘>属性选择器测试属性名</p> ???????<p name=‘p‘>属性选择器测试p元素</p> ???????<p name=‘p2‘>属性选择器测试p元素</p>
 ???????/* 有属性name,且值以p结尾的p元素会被选中 */ ???????p[name$=‘p‘] { ???????????color: red; ???????}

    5>.[attribute*=value],属性值中包含value的元素会被选中。(CSS3)

 ???????<p name=‘attr‘>属性选择器测试属性名</p> ???????<p name=‘p‘>属性选择器测试p元素</p> ???????<p name=‘p2‘>属性选择器测试p元素</p>
 ???????/* 有属性name,且值中包含p的p元素会被选中 */ ???????p[name*=‘p‘] { ???????????color: red; ???????}

  11.伪类选择器

    伪类:用于向某些选择器添加特殊的效果,作用和元素中的类相同。

    如果我们想为元素的某些特殊状态设置样式,我们无法通过具体的class设置,比如a标签悬浮状态样式设置,我们可以用a:hover实现,它实现了和类相同的功能,但同时又不是真正的类,所以称其为伪类

    1>锚伪类

a:link {color: #FF0000} ???????    /* 未访问的链接 */a:visited {color: #00FF00} ???????????/* 已访问的链接 */a:hover {color: #FF00FF} ?????????????/* 鼠标移动到链接上 */a:active {color: #0000FF} ????????????/* 选定的链接 */

    注意:1.a:hover 必须被置于 a:link 和 a:visited 之后,才会有效。2.a:active 必须被置于 a:hover 之后,才会有效。

    2>序选择器(与顺序相关) --> (CSS3)

      第一类:选择子元素中的第一个或最后一个

       注意: 带type和不带有type的区别

        1>不带type表示选中E的父元素中的第一个元素且其必须是E类型,否则不选中(强调第一个)

        2>带type表示选中E的父元素中的第一次出现的E元素,否则不选中(强调第一次)

        E:first-child:查找E的父级元素中的第一个E元素
             举例:li:first-child 查找li父元素中第一个元素。
                如果第一个元素是li就选中,如果不是li就不选中
           E:last-child:查找E的父级元素中的最后一个E元素
                举例:li:last-child 查找li父元素中最后一个元素。
                如果最后一个元素是li就选中,如果不是li就不选中
                E:first-of-type:获取E父级元素中第一次出现的E元素
                举例:li:first-of-type
                这里强调的是第一次,而不是第一个,如果第一个不是,会依次往下找,直到找到li标签。
         E:last-of-type:
                 用法同first-of-type
 ???????<ul> ???????????<span>test</span> ???????????<li>篮球</li> ???????????<li>足球</li> ???????????<li>羽毛球</li> ???????????<li>乒乓球</li> ???????</ul>
 ???????/* li父元素ul的第一个元素不是li而是span,所以无法选中 */ ???????li:first-child { ???????????color: green; ???????} ???????/* 选中li父元素ul中的最后一个li元素 */ ???????li:last-child { ???????????color: green; ???????} ???????/* 选中li父元素ul中第一次出现的li,而非第一个 */ ???????li:first-of-type { ???????????color: red; ???????} ???????/* 选中li父元素ul中最后一次出现的li,而非最后一个 */ ???????li:last-of-type { ???????????color: red; ???????}     
    
    第二类:根据子元素的索引选择(元素索引从1开始计算) 

      注意: 带type和不带有type的区别

        1>不带type表示从E的父元素中的第一个元素索引开始计算。

        2>type表相当于先将E的父元素中所有类型为E的子元素挑出来,重新计算索引。

    E:nth-child(n):表示E父级元素中第n个元素,且只有当第n个元素是E类型时才会选中,否则不能选中
 ???<div> ???????<ul class="u1"> ???????????<span>test</span> ???????????<li>篮球</li> ???????????<li>足球</li> ???????</ul> ???????<ul class="u2"> ???????????<li>篮球</li> ???????????<span>test</span> ???????????<li>足球</li> ???????</ul> ???</div>
 ????????/* li父元素ul中索引为2且为li的元素会被选中(选择器索引从1开始),如果不是li元素则不会被选中 */ ???????li:nth-child(2) { ???????????color: red; ???????}  
     E:nth-child(even)  选中所有索引是偶数的E元素。
                  举例:li:nth-child(even); -->li的父元素是ul,元素索引从1开始,其中的<li>1</li>和<li>3</li>会被选中。这里是从div元素开始算起的(ul中所有的元素都会计算在内)        
     E:nth-child(odd)  选中所有索引是奇数的E元素,用法含义同E:nth-child(even)
 ???<div> ???????<ul class="u1"> ???????????<span>索引为1奇数,但不是li元素</span> ???????????<li>索引为2偶数,是li元素</li> ???????????<li>索引为3奇数,是li元素</li> ???????????<li>索引为4偶数,是li元素</li> ???????</ul> ???</div>
 ???????li:nth-child(odd) { ???????????color: red; ???????} ???????li:nth-child(even) { ???????????color: yellow; ???????}  
    
    E:nth-of-type(n)     n是从0到子元素的长度,当n<=0选取无效(没有元素的索引会<=0的)
        E:nth-of-type(-n + 2) 选中了前2个元素。
        E:nth-last-of-type(-n + 2) 选中了最后2个元素。 
 ???<div> ???????<ul class="u1"> ???????????<span>索引为1奇数,但不是li元素</span> ???????????<li>索引为2偶数,是li元素</li> ???????????<li>索引为3奇数,是li元素</li> ???????????<li>索引为4偶数,是li元素</li> ???????</ul> ???</div>
 ???????/* n的取值0到li元素的长度个数,当-n+2表达式结果为0不再继续计算 */ ???????li:nth-of-type(-n + 2){ ???????????color: red; ???????} ???????li:nth-last-of-type(-n + 2){ ???????????color: red; ???????}

    E:nth-of-type(even) 作用相当于先把E元素过滤出来,然后选中所有的索引值为偶数的E元素。用法雷同不再举例

    E:nth-of-type(odd)同E:nth-of-type(even)的用法相同。 

  12.伪元素选择器

  伪元素:是HTML 中并不存在的元素,用于将特殊的效果添加到某些选择器。

  CSS3中对伪元素的描述:

    伪元素的由两个冒号::开头,然后是伪元素的名称 。

    使用两个冒号::是为了区别伪类和伪元素(CSS2中并没有区别)。当然,考虑到兼容性,CSS2中已存的伪元素仍然可以使用一个冒号:的语法,但是CSS3中新增的伪元素必须使用两个冒号::

    一个选择器只能使用一个伪元素,并且伪元素必须处于选择器语句的最后。 

  如何区分伪类和伪元素?

    作用都是用于将特殊的效果添加到某些选择器,但是伪元素会在最后的结构上生成

  伪元素选择器:

    :first-letter,选中文本中的第一个字母

    :first-line,选中文本中的第一行

 ???<div> ???????<p class="p1">These are the necessary steps:</p> ???????<p class="p3"> ???????????????These are the necessary steps<br/> ???????????????These are the necessary steps: ???????????????These are the necessary steps: ???????</p> ???</div>
 ????????/* 类名为p1的p元素内容中的第一个字母会被选中加粗 */ ???????p.p1:first-letter { ???????????font-weight: bold; ???????} ???????/* 类名为p3的p元素内容中的第一行会被选中加粗 */ ???????p.p3:first-line { ???????????font-weight: bold; ???????}

  CSS3伪元素选择器:

    ::after,在元素的前面添加内容

    ::before,在元素的后面添加内容

<head> ???<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> ???<title>Document</title> ???<style type="text/css"> ???????p::before { ???????????content: "p元素之前内容"; ???????????color: red; ???????} ???????p::after { ???????????content: "p元素之后内容"; ???????????color: yellow; ???????} ???</style></head><body> ???<div> ???????<p>测试伪元素</p> ???</div></body>

  最后生成的结构:

  

  总结:本篇总结了自己学习过程中遇到的CSS选择器,通过总结又回顾了一次,加深了自己的理解,这里并没有列举完所有的选择器,大家可以一起学习完善。

CSS第一节--选择器(1)

原文地址:https://www.cnblogs.com/diweikang/p/9048991.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved