选择器selector

CSS2.1选择器

标签选择器

也称元素选择器、类型选择器
直接使用元素的标签名当做选择器,选择页面上所有该标签

/* 选择所有span */
span{
color:red; 
}
/* 选择所有b */
b{
color:green;
}

无论所处元素的深浅,都能选到

<!-- p里面的span也会被选择 -->
   <p>我们一定<span>不负韶华,只争朝夕</span></p>
   <ul>
       <1i>小明</1i>
       <1i>小红</1i>
       <!-- li里面的span也会被选择 -->
       <1i><span>小强</span></1i>
       </u1>

“覆盖面”大,故通常用于标签的初始化

ul{
/*去掉无序列表的小圆点*/
list-style:none;
}
a{
/*去掉超级链接的下划线*/
text-decoration:none;
}

id选择器

#前缀
/选择id为para1的标签/

#para1{
    color:red;
}

class选择器

点前缀

/*选择class为warning的标签*/
.warning{
     color:red;   
}

多个标签可以相同类名
一个标签可以多个类名,类名用空格隔开

原子类
在做网页项目前,可以将所有的常用字号、文字颜色、行高、外边距、内边距等都设置为单独的类

.fs12{
font-size:12px;
}
.fs14{
font-size:14px;
}
.fs16{
font-size:16px;
}
.color-red{
color:red;
}
.color-blue{
color:blue;
}
.color-green{
color:green;
}

“则需选择”类名,快速添加样式

<p class="fs18 color-green">我是一个文字</p>

复合选择器

选择器名称示例意义
后代选择器.box .spec选择类名为box的标签内部的类名为spec的标签
交集选择器li.spec选择既是li标签,也属于spec类的标签
并集选择器ul,ol选择所有ul和ol标签
后代选择器

“后代”不一定是“儿子"

/*选择类名为box标签后代的p标签*/
 .box p {
            color: red;
        }
 <div class="box">
     <u1>
         <li>
/*将被选择*/
             <p>我是盒子中的段落</p>
         </li>
    </u1>
 </div>

很多空格,隔开好几代

.box ul li .spec em {
    color: red;
}
<div class="box">
    <ul>
        <1i>
            <p class="spec">我是段落<em>强调文字</em></p>
        </1i>
    </ul>
</div>
交集选择器

例如:选择有.spec类的h3标签

 h3.spec {
     font-style: italic;
 }
并集选择器

也叫分组选择器
逗号表示分组

/*同时选择ul标签和ol标签*/
 ul,
 ol {
     list-style: none;
 }
综合使用

选择器可以任何搭配、结合,从而形成复合选择器,我们必须要能一目了然的看出选择器代表的含义

div.box li p.spec em {
     color: red;
}
<div class="box">
    <ul>
        <li>
            <p>我是段落</p>
        </li>
        <li>
            <p class="spec">我是段落<em>强调文字</em></p>
        </li>
    </ul>
</div>

伪类

添加到选择器的描述性词语
指定要选择的元素的特殊状态,超级链接有4个特殊状态
4个特殊状态

伪类意义
a:link没有被访问的超级链接
a:visited已经被访问过的超级链接
a:hover正被鼠标悬停的超级链接
a:active正被激活的超级链接(按下按键但是还没有松开按键)

有顺序-爱恨准则LOVE HATE
:link→:visited→:hover→:active

CSS3新增选择器

关系选择器

名称举例意义
子选择器div>pdiv的子标签p
相邻兄弟选择器img+p图片后面紧跟着的段落
通用兄弟选择器p~spanp之后的所有同层级span

子选择器>

儿子

.box>p {
            color: #000;
        }

后代选择器,包括儿子孙子等多代

.box p {
    color: #000;
}

相邻兄弟选择器+

当第二个元素紧跟在第一个元素之后
且两个元素都是属于同一个父元素的子元素
则第二个元素将被选中

 img+span {
     color: #000;
 }
 <p>
      <img src="images/0.jpg" alt="">
/*将被选择*/
      <span>这是北京故宫</span>
      <span>这是北京故宫</span>
 </p>

通用兄弟选择器~

a~b
选择a元素之后所有同层级b元素;
从IE7开始兼容

h3~span {
    color: #000;
}
<span>我是后面的span</span>
<h3>我是一个三级标题</h3>
<span>我是后面的span</span>/*将被选择*/
<span>我是后面的span</span>/*将被选择*/
<p>我是一个段落</p>
<span>我是后面的span</span>/*将被选择*/
<div>
    <span>多了一个级别span</span>
    <span>多了一个级别span</span>
</div>

序号选择器

举例意义兼容性
:first-child第一个子元素IE7
:last-child最后一个子元素IE9
:nth-child(3)第3个子元素IE9
:nth-of-type(3)第3个某类型子元素IE9
:nth-last-child(3)倒数第3个子元素IE9
:nth-last-of-type(3)倒数第3个某类型子元素IE9

nth-child()
可写成an+b的形式,不能写b+an

 .box p:nth-child(3n+2) {
            color: green;
        }
    <div class="box2">
        <p>1</p>
        <p>2</p>/*将被选择*/
        <p>3</p>
        <p>4</p>
        <p>5</p>/*将被选择*/
        <p>6</p>
        <p>7</p>
        <p>8</p>/*将被选择*/
    </div>

2n+1等价于odd,表示奇数
2n等价于even,表示偶数

nth-child()和nth-of-type()

情况一:第三个子元素是h3不是p,选择器失效,无法选择

.box p:nth-child(3) {
            color: green;
        }
 <div class="box4">
     <p>我是1号p</p>
     <p>我是2号p</p>
     <h3>我是1号h3</h3>
     <h3>我是2号h3</h3>
     <p>我是3号p</p>/*不会被选择*/
     <p>我是4号p</p>
     <h3>我是3号h3</h3>
     <h3>我是4号h3</h3>
 </div>

情况二:nth-of-type()选择同种标签指定序号的子元素

.box p: nth-of-type (3) {
            color: green;
        }
 <div class="box4">
     <p>我是1号p</p>
     <p>我是2号p</p>
     <h3>我是1号h3</h3>
     <h3>我是2号h3</h3>
     <p>我是3号p</p>/*将被选择*/
     <p>我是4号p</p>
     <h3>我是3号h3</h3>
     <h3>我是4号h3</h3>
 </div>

属性选择器

举例意义
[alt]有这个属性匹配
[alt=“北京故宫"]精确匹配
[alt ^=“abc”]开头匹配
[alt $=“abc"]结尾匹配
[alt*=“abc"]任意位置匹配
[alt=“abc”]
[alt~=“abc”]有abc为空格分开的独立部分匹配

伪类

伪类意义
:empty选择空标签(注:空格、换行都不属于空标签)
:focus选择当前获得焦点的表单元素
:enabled选择当前有效的表单元素
:disabled选择当前无效的表单元素(无法选中的)
:checked选择当前已经勾选的单选按钮或者复选框
:root选择根元素,即<html>标签

伪元素

表示虚拟动态创建的元素
IE8可以兼容单冒号

伪类单冒号用于需要兼容 IE 浏览器
伪元素双冒号用于不需要兼容 IE 浏览器

对于CSS2已有的伪类,单冒号
对CSS3新增伪类,建议双冒号
在这里插入图片描述

::before、::after

::before匹配选中的元素的第一个子元素
必须设置content属性表示其中的内容

 a::before {
     content: '*';
 }

在这里插入图片描述

::after匹配选中的元素的最后一个子元素
必须设置content属性表示其中的内容

a::after {
    content: '&';
}

在这里插入图片描述

清除浮动
.clearfix:after {
	content:"."; 
	display:block; 
	height:0; 
	visibility:hidden; 
	clear:both; 
}
.clearfix { *zoom:1; }
雪碧图sprites

雪碧图通过将多个图片 icon 合为一张图,减少 http 请求
但是在制作雪碧图的过程中,或者现在很多的打包工具自动生成的雪碧图,都存在着需要为每个 icon 需要预留多少边距的问题。看看下图:

譬如上面这种情况(假设按钮中的图标是采用了雪碧图),产品某天突然要求按钮从状态左变为状态右,那么雪碧图原先预留的位置边距肯定就不够了,导致其他图形出现在按钮中。
而我们通常不会为了一个小 icon 多添加一个标签(不符合语义化)。
所以通常这种情况需要用到雪碧图的话,都是在按钮中设置一个伪元素,将伪元素的高宽设置为原本 icon 的大小,再利用绝对定位定位到需要的地方,这样无论雪碧图每个 icon 的边距是多少,都能够完美适应。

作为列表序号

问题:
1,2,3的序号
用span/图片,需要定位
用伪元素,删减后其他的列表序号会自动改变

ul{
       width:1000px;
       margin: 0 auto;
       counter-reset:li;
   }
   li{
       list-style: none;
   }

   ul>li{
       margin-top: 10px;
   }
ul>li:before{        
content: counter(li);
       counter-increment:li;
       padding: 0 5px;
       color: #fff;
       margin-right: 10px;
}
超链接特效

举例:配合 CSS定位实现一个鼠标移上去,超链接出现方括号的效果

<style>
	a {
	    position: relative;
	    display: inline-block;
	    outline: none;
	    color: #fff;
	    text-decoration: none;
	    font-size: 32px;
	padding: 5px 20px;
	}
	a:hover::before, a:hover::after { position: absolute; }
	a:hover::before { content: "\5B"; left: -10px; }
	a:hover::after { content: "\5D"; right:  -10px; }
</style>
<a>鼠标移上去出现方括号</a>
制作图案

例:搜索的放大镜,叉叉,箭头等
请欣赏:http://chokcoco.github.io/magicCss/html/index.html

扩大可点区域

当主元素无法扩大自身的时

&:before {
    content: "";
    display: block;
    position: absolute;
    width: 40px;
    left: 50%;
    margin-left: -20px;
    top: 0;
    height: 50px;    //任意值
}
替代<br>实现换行

行级元素则不会自动换行,但项目有需求
<br>实现换行,不仅在可维护性方面是一种糟糕的实践,而且污染了结构层的代码————《CSS SECRET》

.inline-element::after{
    content: "A";
    white-space: pre;
}

Unicode 中,0x000A 是门代表换行符
CSS 中,简化为 “A”。
content: “A”;在元素末尾添加了一个换行符
white-space: pre; 保留元素后面的空白符和换行符

::selection

应用于文档中被用户高亮的部分(使用鼠标圈选的部分)

::first-letter 和::first-line

::first-letter会选中某元素中(必须是块级元素)第一行的第一个字母
::first-line会选中某元素中(必须是块级元素)第一行全部文字

层叠性和选择器权重

层叠性

多个选择器同时作用于一个标签,效果叠加

<p id="para" class="spec">我是段落</p>
p {
    color: red;
}
.spec {
    font-style: italic;
}
#para {
    text-decoration: underline;
}

层叠性冲突处理规则

id权重>class权重>标签权重

选择器权重计算

通过(id的个数,class的个数,标签的个数)的形式

/* 对应id,class,标签的个数(2,0,1) */
  #box1 #box2 p {
      color: red;
  }
  /* (2,1,2) */
  #box1 div.box2 #box3 p {
      color: green;
  }
  /* (0,3,1) */
  .box1 .box2 .box3 p {
      color: blue;
  }

解析:
1)id权重最大,先分析id的个数,复杂选择器1=复杂选择器2>复杂选择器3,复杂选择器3权重最小;
2)分析class的个数,复杂选择器1<复杂选择器2,故复杂选择器2权重最大,color以green为准

!important提升权重

.spec {
    color: blue!important;
}

一般不允许使用,会带来不经意的样式冲突

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值