复合选择器就是两个或多个基本选择器,通过不同方式连接而成的选择器,主要包括“交集”选择器、“并集”选择器、“后代”选择器。

交集选择器

“交集”复合选择器是由两个选择器直接连接构成,其结果是选中二者各自元素范围的交集。其中第一个必须是标记选择器,第二个必须是类别选择器或者ID选择器。这两个选择器之间不能有空格,必须连续书写。

注意其中第一个必须是标记选择器,如p.class1,但有时候会看到.class1.class2,即2个都是类选择器,在其他浏览器中是允许出现这种情况的,但IE6不兼容。如下表:

两个类选择器的“交集”复合选择器浏览器支持表
Mac: Safari 4.0 支持
Mac: Chrome 5.0 支持
Mac: FireFox 3.6 支持
Mac: Opera 10 支持
Win: FireFox 3.6 支持
Win: Opera 10 支持
Win: IE6 不支持
Win: IE7 支持
Win: IE8 支持

复合选择器的使用

这是个简单的tab菜单:

如下是html代码:

1
2
3
4
5
6
<ul class="nav">
    <li class="first"><a href="">节目</a></li>
    <li class="current"><a href="">合集</a></li>
    <li><a href="">草稿</a></li>
    <li class="last"><a href="">项目</a></li>
</ul>

为了实现以上效果,我们在css中可以使用复合选择器。

选择<a> 标签

可以用一个选择器来定义所有的 <a> 元素, 如下:

.nav li a { }

选择第一个 <a> 元素

为了增加列表左上角的圆角效果, 你需要选择第一个 <a> 元素. 这可以用如下的选择器来实现:

.nav li.first a { }

选择最后一个 <a> 元素

为了增加列表右上角的圆角效果, 你需要选择最后一个 <a> 元素. 这可以用如下的选择器来实现:

.nav li.last a { }

突出显示当前页

通过改变tab的颜色来显示页面是当前页,我们可以在类名中加入current这个类名来实现,如下:

.nav li.current a { }

为当前页面的左右上角添加圆角样式

现在有个问题,第一个和最后一个选项被选中的时候拐角是直角的.为了达到选中时候是当前页的样式,拐角也是圆角效果,我们需要给专门给它们写特殊的选择器,由于现在我们的类名都在同一个元素中,所以我们最终可以用交集复合选择器来实现,如下:

.nav .first.current a { }
.nav .last.current a { }

结果

这看上去很简单,是不是?就像上面提到的,现在的问题是:IE5和IE6都不支持类名交集复合选择器。IE5和IE6在识别类名时候只会识别最后一个类名。效果如下:

.nav .first.current a { }
.nav .last.current a { }

IE5和IE6把这2个选择器解析为:

.nav .current a { }
.nav .current a { }

这意味着这些浏览器会给所有的当前页都增加圆角效果,效果如下:

在IE7下也是没问题的,说明IE7也支持类名交集复合选择器。

解决的办法

可以给第一个和最后一个li单独加一个current的样式,但这样增加了js的负担。

1
2
3
4
5
6
<ul class="nav">;
    <li class="first first_current"><a href="">节目</a></li>;
    <li class="current"><a href="">合集</a></li>;
    <li><a href="">草稿</a></li>;
    <li class="last last_current"><a href="">项目</a></li>;
</ul>;

.nav .first_current a { }
.nav .last_current a { }

讨论

有一种方法可以让我们不用在页面中增加像first、last这种多余的类名,那就是使用css3的样式。css3让我们选择元素变得越来越简单,实现头尾效果可用如下效果:

li:first-of-type a { }
li:last-of-type a { }

转载于:https://www.cnblogs.com/Tanghongchang/p/7256338.html

使用css的类名交集复合选择器 《转》相关推荐

  1. 使用css的类名交集复合选择器

    首先先看一下基本定义: 复合选择器就是两个或多个基本选择器,通过不同方式连接而成的选择器,主要包括"交集"选择器."并集"选择器."后代"选 ...

  2. CSS基本知识之复合选择器、元素显示模式、背景图片位置,精灵图

    CSS基本知识之复合选择器.元素显示模式.背景图片位置,精灵图 一.复合选择器 在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进 ...

  3. CSS(二)——复合选择器、元素显示模式、背景、三大特性

    文章目录 *1.Emmet语法 *1.1 快速生成HTML结构语法 *1.2 快速生成CSS样式语法 1.CSS 的复合选择器 1.1 什么是复合选择器 1.2 后代选择器 (重要) 1.3子选择器( ...

  4. CSS 2 emmet语法 复合选择器 元素显示模式

    目录 Emmet语法 1.1快速生成HTML结构标签 1.2快速生成CSS样式语法 CSS的复合选择器 1.1什么是复合选择器 1.2后代选择器(重要) 1.3子选择器(重要) 1.4并集选择器(重要 ...

  5. WEB前端学习 (3)CSS复习二 ( 复合选择器+元素显示模式+ 背景)

    一 CSS 复合选择器 总结:复合选择器 1. 后代选择器 后代选择器又称为包含选择器,可以选择父元素里面子元素.其写法就是把外层标签写在前面,内层标签写在 后面,中间用空格分隔.当标签发生嵌套时,内 ...

  6. CSS第四篇(复合选择器)

    1.后代选择器 概念:后代选择器又称为包含选择器 作用:用于选择元素或元素的子孙后代,一个标签之后的所有标签都会选择 写法:把外层标签写在前面,内层标签写在后面,中间用空格隔开 父级 子级{属性:属性 ...

  7. css3 复合选择器,CSS复合选择器

    复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,目的是为了可以选择更准确更精细的目标元素标签. 交集选择器 交集选择器由两个选择器构成,其中第一个为标签选择器,第二个为class选择器, ...

  8. HTML CSS之复合选择器中的交集选择器、并集选择器、后代选择器、子元素选择器、相邻兄弟选择器、属性选择器

    复合选择器是通过基本选择器进行组合后构成的,常用的复合选择器有:交集选择器.并集选择器.后代选择器.子元素选择器.相邻兄弟选择器和属性选择器等. 交集选择器 交集选择器由两个选择器直接构成,其中第一个 ...

  9. CSS复合选择器( 交集、 并集、后代、子元素、兄弟、伪类、伪元素)

    CSS复合选择器 总结 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,目的是为了可以选择更准确更精细的目标元素标签. :first-child与:first-of-type区别 :fi ...

  10. 前端笔记(4)css,复合选择器,标签的显示模式,行高,css背景,css三大特性

    css样式表/层叠样式表(2) (1)css复合选择器 后代选择器 子元素选择器 交集选择器(不常用) 并集选择器 链接伪类选择器 (2)标签的显示模式 块级元素block-level 行内元素inl ...

最新文章

  1. SAP Cloud Platform上的WebIDE fullstack在哪里打开
  2. JeecgCloud 微服务开发平台-部署文档
  3. Django安装(for Mac)
  4. 数据丢失与重复_面试官:如何保证消息的可靠性传输?如何处理消息丢失的问题?...
  5. R6900P/R7000P 梅林固件
  6. 怎样解决CMD命令行窗口中文乱码问题
  7. 恩智浦imx8qxp-mek的 device Tree 结构
  8. Windows 10 到期时间如何查看
  9. flask的pin码攻击——新版本下pin码的生成方式
  10. Spring关于AOP配置举例(XML配置文件方式)
  11. MFC 16 进制HEX显示控件
  12. 小程序源码:全新独立后台修复登录在线答题-多玩法安装简单
  13. 不知道时光机特效什么软件好?这几个时光机特效软件安利给你
  14. CRAFT: Character Region Awareness for Text Detection ---- 论文阅读笔记
  15. autoconf使用环境
  16. 免安装版(解压缩版)MySQL安装
  17. 关于ASO优化的这些你懂了吗?
  18. 苹果iphone4s英文系统怎么显示中文联系人?
  19. 宝茱姐被丑不垃圾香菇蘑菇头拖下水
  20. springbootvue电影购票网站

热门文章

  1. 基于MATLAB 关于圆的研究
  2. 基于Caffe的人脸检测实现
  3. 对于机器学习而言如何翻越测试集
  4. 推荐系统开源软件汇总和评点
  5. 如何整合Mybatis与Spring框架?
  6. 蛮力法求最大字段和时间复杂度_中文分词算法之--最大匹配法
  7. C++ boost multiprecision类型转换 u256转double
  8. 【Django 2021年最新版教程13】Cookie是什么 如何使用
  9. Kubernetes 小白学习笔记(31)--kubernetes云原生应用开发-istio架构和安装
  10. mysql数据同步到ElasticSearch中 之 logstash