CSS选择器的详细说明(有误之处请指教)

CSS的选择器可分为以下几种,个人经历,其中1~6,8用的最多,7,9用得少:

1.元素选择器
2.类选择器(class)
3.id选择器
4.属性选择器
5.后代选择器和子元素选择器
6.相邻兄弟选择器
7.伪类
8.伪元素


一、元素选择器
元素选择器最为常见的,其名称就是html元素,甚至是html自己,如下:

<style type="text/css">
//img标签,图像标签
            img{
                padding-top:2.5px ;//定义内边距
                padding-left:15px ;//定义左边距
                cursor: pointer;//定义鼠标悬浮时样式
            }
            h1{
                font-size: 26px;//定义字体大小
                text-align: center;//定义文本居中
            }   
            a{
                color: red;
                text-decoration: none;//定义超链接消除下划线,默认值是有的
            }
</style>
<body>
//此时,以下标签则会呈现相应的样式
 <img src="">.........<img>
 <h1>.........................................</h1>
 <a>.........................</a>
</body>

二、类选择器
      类选择器也很常见,一般你自己命名一个名字(随你喜欢,翠花,狗蛋,狗剩都可以,讲真,不开玩笑)作为你的样式的名称,然后,在body中,你想在哪个标签中用这个样式,就在那个标签中用 class=“你样式的名字”来表示。如下:

点击这里可查看具体长什么样

//代码:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>实验一</title>
        <style type="text/css">
            .狗剩{
                width: 580px;
                height: 688px;
                margin:0 auto;
            }
            .border{
                border: gray 5px  double;
            }
            img{
                padding-top:2.5px ;
                padding-left:15px ;
                cursor: pointer;
            }
            h1{
                font-size: 26px;
                text-align: center;
            }
            .font1{
                font-size: 12px;
                color: gray;
                text-align: center;
            }
            .solid{
                border-bottom:1px solid gray;//这里是设置一个双实线的外框
            }
            a{
                color: red;
                text-decoration: none;
            }
            .font2{
                font-size: 16px;
                color: black;
                text-indent: 2em;
                text-align:left;
                padding-left:3px ;
            }
        </style>
    </head>
    <body>
         <div class="狗剩 border">

            <h1>传谷歌秘密开发Fuchsia项目 欲5年内取代Android</h1>
            <p class="font1">2018-07-20 07:00 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;腾讯科技 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <a href="http://www.zhku.edu.cn/">我要评论(0)</a></p>
            <p class="solid"></p>
            <img src="img/exp1.jpg"  title="点我也没用"/>
            <p class="font2">腾讯科技讯 据外媒报道,知情人士周四透露,在过去两年多的时间中,谷歌内部一群工程师一直
            在开发一款软件移动操作系统,希望用它最终来替代目前占全球移动操作系统市场主导地位的Android。
            </p>
            <p class="font2">不过随着这个团队的不断成长,它将不得不克服一些关于软件如何工作的激烈内部争论。</p>

            <p class="font2">这个名为Fuchsia的项目为了克服Android的局限性从零开始创建,原因是越来越多的个人设备和其他设备开始接入互联网。
                它的设计是为了更好地适应语音互动和频繁的安全更新,无论是笔记本电脑还是微小的互联网连接传感器,所有的设备都
                将使用同一的操作系统。</p>
         </div>
    </body>
</html>

另外,类选择器也可以结合元素标签一起使用:

//例如,您可能希望只有段落显示为红色文本
<html>
<head>
<style type="text/css">
p.important {color:red;}
</style>
</head>
<body>

<h1 class="important">I never give up.</h1>//不显示红色

<p class="important">I never give up.</p>//显示红色

</body>
</html>


三、id选择器
      id选择器和类选择器类似,不过,类选择器是这种形式 .XXX而id选择器是这种形式 #XXX,关于它们俩的区别在这里也做一下说明吧:
      我们都知道XHTML/HTML是一种文本语言,我们对一个文本里的内容可以一目了然的,但服务器不会,它是死的,因此,我们需要用一个方法来描述它。一般情况下,html标签像ul p这些基本的HTML标签就可以做到了,但是,其他的元素类型或者说布局选择,这些该怎么表示呢,此时id和class就派上用场了。它们就像元素的身份特征,描述了这个元素该长什么样。其中,id就像身份证,class就像衣服,只要你愿意,随时可以借其他人穿,也就是说class样式可以用在不同的元素标签中,在w3school可以点击查看一文中这样描述:
       *区别 1:只能在文档中使用一次与类不同,在一个 HTML 文档中,ID 选择器会使用一次,而且仅一次。
       我的理解: 对于区别一,(经本人实践,在我的谷歌浏览器完全可以显示,可能有些浏览器不可以,但我觉得这句话不是强调这个意思,它应该说的是一种规范,我们平时书写时就应该注意id应该唯一,为什么呢?试想一下,在一个大项目中,css样式绝对是庞大的,此时,但你用js来操控特定的html文本标签时,你打算选用id还是class?说到这里大家应该心里多少有点“bilibili高数”了吧,这也就是id不重复的原因,否则js则操控的不只是特定标签了。)

       *区别 二:不能使用 ID 词列表不同于类选择器,ID 选择器不能结合使用,因为 ID 属性不允许有以空格分隔的词列表。
       我的理解:对于区别2,我们都知道类选择器可以写成一下这个样子,而id不予许,它是独一无二的。

<style type="text/css">
            .font1.font2{ //注意两个类名之间不能有空格
                font-size:20px;
                color: green;
            }
        </style>
        <body>
        <p class="font1 font2">never give up</p>//注意两个都要写上,不然没效果(感觉其实有点鸡肋)
    </body>

      *区别 3:ID 能包含更多含义类似于类选择器,可以独立于元素来选择 ID。有些情况下,您知道文档中会出现某个特定 ID 值,但是并不知道它会出现在哪个元素上,所以您想声明独立的 ID 选择器。例如,您可能知道在一个给定的文档中会有一个 ID 值为 mostImportant 的元素。您不知道这个最重要的东西是一个段落、一个短语、一个列表项还是一个小节标题。您只知道每个文档都会有这么一个最重要的内容,它可能 在任何元素中,而且只能出现一个。在这种情况下,可以编写如下规则:

#mostImportant {color:red; background:yellow;}
//这个规则会与以下各个元素匹配(这些元素不能在同一个文档中同时出现,因为它们都有相同的 ID 值):
<h1 id="mostImportant">This is important!</h1>
<em id="mostImportant">This is important!</em>
<ul id="mostImportant">This is important!</ul>


       我的理解:对于区别三,额呃呃呃,可能语文不好,我觉得它的描述有点没意义,直到我偶然看到一篇国外的文章时点击这里 才觉得“ ID 能包含更多含 义”应该是体现在这个方面:
      当我们想实现这样的一个功能,用户打开一个页面时,自动定位到我们想让用户最先看到的地方时,我们可以这样做设置网址为http://XXXXXXXXXXXX#id名,此时打开后,会定位到id标签处。经过本人实现,确实如此,不过你实验时,为了确切体验到,你需要足够多的内容来填充浏览器,这样得到的效果更明显。在很多项目中为了规范其实id 和 class都会该出,像这样:
<p id="XXX" class="VVVV"></p> //class是规定样式,id便于js操控。


四、属性选择器
      属性选择器的设置同样是为了我们方便修改某个标签的样式,这个很好用,特别在一个大项目中,为一个标签添加样式时,它的写法如下:

//形如:E[attribute] 选择器,表示选择拥有属性 attribute 的E元素,不考虑属性的值
a[rel] {
   color: red;
}

//还可以根据多个属性进行选择,只需将属性选择器链接在一起即可。例如,为了将同时有
// href 和 title 属性的 HTML 超链接的文本设置为红色,可以这样写:
a[href][title] {
   color:red;
}

关于它其他格式的详细说明:可以参考这位博主,他写得很详细,每个样式都有例子,通俗易懂。

五、后代选择器和子元素选择器
       对于后代选择器,如果您希望只对 A 元素中的 B元素应用样式,可以这样写A B{…………},这样其他标签,即使有B也不会呈现相应的颜色,如:

h1 strong {color:red;}

<h1>I <em>never<strong>give</strong></em> up</h1>//这里strong虽是em的儿子,h1的孙子也会显示红色,
                                                  //注意这里区分下面的子元素选择器

      对于子元素选择器,写法是这样的:A>B,如:

 h1>strong {color:red;}//选择h1的亲儿子红色,例如:

<h1>I<strong>never</strong> <strong>give</strong> up.</h1>//这里 never give 会显示红色

<h1>I <em>never<strong>give</strong></em> up</h1>//这里没显示红色,因为strong是em的儿子,h1的孙子

另外,子元素选择器也可以结合后代选择器,例如:

table.company td > p

//它表示,选择这样的P标签,它是td的亲儿子,且属于这样的一个表格,表格带有company属性
//例如:
!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .company{
                width: 280px;
            }
            table.company td > p{
                font-size: 18px;
                color:gray;
            }
        </style>
    </head>
    <body>
        <table class="company">
            <td><p>这是真的</p></td> //它会显示相应样式
        </table>

        <table>
            <td><p>这是真的</p></td>//它不会
        </table>
    </body>
</html>



六、相邻兄弟选择器
       如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器。这里注意两点:1.两个元素相邻 2.拥有着共同的父亲。3.它影响的是后面的元素 即 A+B只影响B

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
    h1 + p {  
        color:red;
    }
</style>
</head>
<body>
    <h1>This is a heading.</h1>//它没变
    <p>This is paragraph.</p> //只有它变红
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
</body>
</html>

//再比如:
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
li + li {font-weight:bold;}
</style>
</head>

<body>
<div>
  <ul>
    <li>List item 1</li>//他不会变红
    <li>List item 2</li>//他变红了,因为它是一的兄弟
    <li>List item 3</li>//他也变红,它是二的兄弟
  </ul>
</div>
</body>
</html>

另外,除了“+”,还有“~”,它的作用是查找某一个指定元素的后面的所有兄弟结点
例如:

<style type="text/css">
    h1 ~ p{
        color:red;
    }
</style>
</head>
<body>
    <p>1</p> //不变红
    <h1>2</h1>//不变红
    <p>3</p>//变红
    <p>4</p>//变红
    <p>5</p>//变红
</body>


七、伪类
       w3school给出的解释是CSS 伪类用于向某些选择器添加特殊的效果。最常见的伪类可以说是超链接了:

//注意这几个是有顺序的,任意颠倒将不会呈现相应的样式
a:link {color: #FF0000}     /* 未访问的链接 */
a:visited {color: #00FF00}  /* 已访问的链接 */
a:hover {color: #FF00FF}    /* 鼠标移动到链接上 */
a:active {color: #0000FF}   /* 选定的链接 */

      除此之外,伪类还有:(1)first-child (2)lang(这个基本没用过)

//first-child作用:选择某元素的第一个儿子是A。这个特定伪类很容易遭到误解,请看下面:
//例如:A:first-child,起作用的是A,不是A的第一个儿子
<html>
<head>
<style type="text/css">
p:first-child {color:red;}
li:first-child {color:red;}
</style>
</head>

<body>
<div>
<p>These are the necessary steps:</p>//显示红色,p是div的第一个儿子
<ul>
<li>Intert Key</li>//显示红色,这个li为ul的第一个儿子
<li>Turn key <strong>clockwise</strong></li>
<li>Push accelerator</li>
</ul>
<p>Do <em>notpush the brake at the same time as the accelerator.</em> </p>//不显示红色,因为不是选择
                                                                          //P的第一个儿子。
</div>
</body>

</html>
//对于lang,这样定义:lang 伪类使你有能力为不同的语言定义特殊的规则。在下面的例子中,lang 类为属性值为
 //no 的 q 元素定义引号的类型:
 <html>
<head>
<style type="text/css">
q:lang(no)
   {
   quotes: "~" "~"
   }
</style>

</head>
<body>
<p>文字<q lang="no">段落中的引用的文字</q>文字</p>
</body></html>

运行效果:

文字~段落中的引用的文字~文字

八、伪元素
      关于伪元素,因为经验不足,也是查了很多文章才慢慢理清,首先说一下为什么叫伪元素?为什么叫伪类?(1)伪元素可以通过添加相应的元素实现相应的功能个 (2)伪类可以通过添加相应的类实现相应的功能
      伪元素有这几种:
      :first-letter 向文本的第一个字母添加特殊样式。
      :first-line 向文本的首行添加特殊样式。
      :before 在元素之前添加内容。
      :after 在元素之后添加内容。

h1:before
  {
  content:url(logo.gif); //在每个h1之前加入图片
  }
 h1:after
  {
  content:url(logo.gif);//在每个h2之后加入图片
  }

关于它们详细说明查看这里这位大神在里面阐述了具体的由来,例子也很详细。





转载于:https://www.cnblogs.com/fsn-nervergiveup/p/9747997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值