作为第一篇技术干货,来写哪个方面的内容,我着实考虑了很久。

经过了整整30秒的深思熟虑,我决定就我第一次发现新大陆一样的内容,来进行一次讨论。

    1. 伪类:
      伪类对元素进行分类是基于特征(characteristics)而不是它们的名字、属性或者内容;原则上特征是不可以从文档树上推断得到的。
      这是百度百科给的解释。不过,大家心里应该都有伪类的概念,看来百科也许更懵逼也说不定。所以还是直接上代码吧。
    2. 简单的使用:
       <div id='ancestor'>
      <div id="father">
      <div id="son">
      </div>
      </div>
      </div> <style>
      #ancestor{
      width: 150px;
      height: 150px;
      background-color: #f00;
      }
      #father{
      width: 100px;
      height: 100px;
      background-color: #0f0;
      }
      #son{
      width: 50px;
      height: 50px;
      background-color: #00f;
      }
      #ancestor:hover{
      transform: rotate(45deg);
      }
      </style>

      这段代码,十分简单应该大家都能看的懂,效果也可以预知,下面我们就来做一点。

    3. 代码变异:
       <div id='ancestor'>
      <div id="father">
      <div id="son">
      </div>
      </div>
      </div> <style>
      #ancestor{
      width: 150px;
      height: 150px;
      background-color: #f00;
      }
      #father{
      width: 100px;
      height: 100px;
      background-color: #0f0;
      }
      #son{
      width: 50px;
      height: 50px;
      background-color: #00f;
      }
      #ancestor :hover{
      transform: rotate(45deg);
      }
      </style>

      2

      或许乍一看,感觉这段代码和之前的那一段一模一样,但是其实有一个很大的区别。
      相信拷贝代码去尝试过的小伙伴们,已经开始疑惑了。那就让我开始来哔哔一波吧。
      其实仔细关注了这两段代码之后,可以发现区别实际是在 #ancestor:hover 这个选择器上。第二段代码只是多加了一个空格。
      很多同学肯定已经灵光一闪,仿佛已经明白了什么。不过,还是我来提壶(醍醐)给大家灌个顶吧!

    4. 发生了什么:
      大家都知道选择器中,空格就是后代选择器。#ancestor :hover 所命中的,其实就是 #ancestor 所有后代元素的 :hover 属性。所以在 #ancestor 自身上。没有被添加到这个伪类,而 #father 、#son,被同时命中。就出现了大家所看到的效果。如果,想印证我的说法,可以使用 #ancestor>:hover 再做一次尝试. 或者再次添加更多的后代元素.看看他们是否一样有这个特殊效果。
      至于我们最通常使用的 #ancestor:hover 这一种使用的方式,实际上就是两个选择器组成的交集选择器,需要同时命中这两个条件才被适用。
      故而,我这一堆哔哔,也就是为了表明伪类、伪元素选择器,其实和我们使用的id选择器、类选择器等等常见的选择器一样,可以使用各种关系符,来组成各种奇怪而又好用的选择器。
    5. 这一堆哔哔,换来的实用性:
      很多人这个时候已经在吐槽了。伪类,只有在一些特殊的场景之下才会使用到,并不会很常用。
      我想说的是,伪类,并不仅仅是 :link:,:vistited,:hover,:active 等特殊状态的。
      还有一些,比如:first-child,:last-child,:nth-child 这些指向特定元素的。
      在我们使用这些伪类时,例如 li:first-child ,会命中的是 li 标签,同时必须是他自身父级的第一个元素。所以,很多人都会加上一个类名来实现给他的效果。
      但是,如果我们这样写呢。 ul > :first-child  是不是就会显的更有语义且优雅。
      亦或者,ul > ::before  给所有的子集中增加一个小箭头

后话,哔哔了这么久。其实实用性确实不是很高。我做这一篇随笔主要意义是,希望新手能正常理解,伪类、伪元素,到底是一个什么样的东西。其实它们并不特殊,和普通的选择器是一模一样的。不需要用特殊的眼光去看待他们。也不需要觉得它们有什么特别的用法。将他们看成普通的选择器,只不过他们命中的元素是一种特殊状态。记住这一点就好。

至:所有对伪类,伪元素持懵逼状态的各位。

以css伪类为基础,引发的选择器讨论 [新手向]的更多相关文章

  1. CSS伪类和伪元素

    一.伪类 CSS伪类用于向某些选择器添加特殊的效果,在W3规范中,CSS伪类有如下几个: CSS2.1 :active:向被激活的元素添加样式(激活是指点击鼠标那一下) :focus:向拥有键盘输入焦 ...

  2. CSS 伪类 (Pseudo-classes)

    CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪类 (Pseudo-classes)实例: 超链接 本例演示如何向文档中的超链接添加不同的颜色. 超链接 2 本例演示如何向超链接添加其他样式. ...

  3. (五)CSS伪类(Pseudo-class)

    CSS伪类用于向某些选择器添加特殊的效果.伪类的语法如下: selector : pseudo-class {property: value} CSS类也可以与伪类搭配使用: selector.cla ...

  4. 12、第十二节课,css伪类 (转)

    一.特殊选择器 1.* 用于匹配任何的标记 2.> 用于指定父子节点关系 3.E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F 4.E ~ F 匹配所有E元素之后的同级元素F 5. ...

  5. 【从0到1学Web前端】CSS伪类和伪元素

    1.CSS中的伪类 CSS 伪类用于向某些选择器加入特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 select ...

  6. css伪类 伪元素

    之前写了一篇 <详解 CSS 属性 - :before && :after> 的博文,当时自己没分清楚伪元素和伪类,所以在文章内把概念混淆了,庆幸 @riophae 兄指正 ...

  7. CSS 伪类 (Pseudo-classes)实例

    CSS 伪类 (Pseudo-classes)实例CSS 伪类用于向某些选择器添加特殊的效果在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访 ...

  8. HTML转义字符 Unicode和CSS伪类介绍

    CSS 伪类用于向某些选择器添加特殊的效果. a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ ...

  9. 【从0到1学Web前端】CSS伪类和伪元素 分类: HTML+CSS 2015-06-02 22:29 1065人阅读 评论(0) 收藏

    1.CSS中的伪类 CSS 伪类用于向某些选择器添加特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 select ...

随机推荐

  1. NFS启动时报错Linux NFS:could not open connection for tcp6

    1.1 启动时出现的错误 [root@znix ~]#/etc/init.d/nfs start Shutting down NFS daemon:                          ...

  2. 完善tab页面定位

    当我们用锚点定位到页面某个元素时,接下来按tab的话是想进入到目前元素( id="content")的下一个连接 <a href="#content"&g ...

  3. DataFrame使用总结1(超实用)

    DataFrame使用总结1(超实用): 1. 合并两个表 frame = [df1, df2] df = pd.concat(frame) res = pd.merge(df, df1, on=[' ...

  4. java Mybatis框架动态SQL

    1.if+where <select id="getgoods" resultType="Goods" > select * from goods ...

  5. 将Excel文件数据导入到SqlServer数据库的三种方案

    方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作. openFil ...

  6. [转载] Linux curl命令详解

    转载自http://www.linuxdiyf.com/linux/2800.html 命令:curl在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的htt ...

  7. css基础-语法篇

    CSS基础 1.css简介 cascading style sheets    汉译层叠样式表,WEB标准中的表现标准语言,表现标准语言在网页中主要对网页信息的显示进行控制,简单说就是如何修饰网页信息 ...

  8. Android隐藏软键盘

    1,用java代码隐藏: /**隐藏软键盘**/        View view = getWindow().peekDecorView();        if (view != null) { ...

  9. SSH框架基础

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  10. webapp填坑记录[更新中]

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...