CSS选择器

  • CSS选择器常见的有几种?
  • 类型选择器(元素选择器):
只需指定希望应用样式的元素名称
p {color: black;}
h1 {font-weight:bold;}
  • 后代选择器
用来寻找特定元素或元素组的后代,后代选择器由两个选择器之间的空格表示。
blockquote p {padding-left: 2em;}
//此例表示只给blockquote块引用标签的后代的p元素的增加两个字体大小宽度的左内边距。
示例

上述选择器适用于那些应用范围广的一般样式。

  • ID选择器和类选择器
寻找更特定的元素,ID选择器由一个"#"字符表示,类选择器由一个"."点号表示。
#intro {font-size: 20px;}//使简介段落中的文本大小设置为20px
.date-posted {color: green;}//使日期显示为绿色
ID和类选择器
  • 通用选择器
通配符 * 表示选择所有可用元素,通用选择器一般用来对页面上的所有元素应用样式。
    *  {margin: 0; padding: 0;}//删除每个元素上默认的浏览器内边距和外边距。
  • 伪类选择器
有时候我们需要根据文档结构之外的其他条件对元素应用样式,例如表单和链接的状态。
应用于链接:
a:link {color: blue;}//a链接未访问时颜色为蓝色
a:visited {color:green;}//a链接访问过后颜色为绿色
a:hover, a:focus, a:active {color:red};//当a链接被指向、被焦点选中、被点击时颜色为黄色.
应用于表单和表格:
tr:hover {background-color: red;}
input:focus {background-color: yellow;}
表单焦点选择时

表格移入时
把伪类连在一起,创建了更复杂的行为,比如在已访问链接和未访问链接上实现不同的鼠标悬停效果。
a:visited:hover {color: olive;}//当a链接被访问过后鼠标悬停在上面时显示橄榄绿色。
被访问过后的悬停
  • :link和:visited称为链接伪类,只能应用于锚元素。
  • :hover、:active和:focus称为动态伪类,理论上可以应用于任何元素,但IE6只应用于:active和:hover,IE7在任何元素上都支持:hover,但是忽略:active和:focus。
  • 子选择器:
后代选择器选择一个元素的所有后代包括“子元素”和“孙元素”、“曾孙元素。。。”,而子选择器只选择元素的直接后代,既“子元素”
#nav>li {background-color: green; padding-left: 20px;}//外层列表项的背景颜色为绿色,而嵌套列表中的列表项不受影响。
  • IE6不支持子选择器
可以用通配符选择器覆盖来达到子选择器的效果。
#nav li {background-color: green; padding-left: 20px;}
#nav li * {background-color: none; padding-left: 0;}
子选择器
  • 相邻同胞选择器:
可用于定位同一个父元素下某个之后的元素
例:使用相邻同胞选择器让顶级标题后面的一个段落显示为灰色加粗,并且字号比后续段落大一点
h2 + p {
 font-size: 1.4em;
 color: #777; 
font-weight:bold;
}
相邻同胞选择器
  • 普通兄弟选择器:
例:对应相邻同胞选择器,让顶级标题后面的所有段落显示为灰色加粗,并且字号比后续段落大一点
h2 ~ p {
 font-size: 1.4em;
 color: #777; 
font-weight:bold;
}
普通兄弟选择器
  • 属性选择器
属性选择器可以根据某个属性是否存在或属性的值来寻找元素。
例:有title属性的p元素文本为红色,底边加一个虚线使得这段文本更加突出,并且使用动态伪类使得这个带有title属性的p元素在被选中和悬停时鼠标符号改为问号。
p[title]{
  color:red;
  border-bottom: 1px dotted #999;
}
p[title]:hover, p[title]:focus{
  cursor: help;
}
属性选择器达到有意思的效果
  • 选择器的优先级是怎样的?
  • 选择器的优先级取决于选择器的特定性


    css选择器优先级计算
  • 选择器优先级一致:下面的样式会覆盖前面的

!important:div{color:blue;!important}优先级最高
内联样式:<h3 style="font-size:12px;">这是h3标题</h3>优先级排第二


经过试验后代选择器优先级大于子选择器
  • class 和 id 的使用场景?
  • 如果你想要创建一个“组”,以便增加样式,就可以使用了class类,把你的元素放在这里类中,这样就能为这个类中的所有元素一起指定样式了。如果你想对多个元素重用某种样式,才能真正发挥类的作用。
  • 如果只有一个元素需要制定样式,这种情况下应该使用ID。比如有些东西你希望页面上只能有一个,比如页脚、导航条、页眉,这些东西在页面上不会出现两个。
  • 当然,即使只有一个元素,你也可以单独对它使用类,如果给这儿类增加另一个元素,那你这个元素就没有唯一的样式了。
  • id的使用场景:

1 包含页面页脚的一个段落。
2 包含“每日精选”的<img>图片。
3 包含任务列表的一个<ol>元素.

  • class的使用场景:

1 包含公司简介的一组标题和段落。
2 包含电影评论的一组<p>元素。
3 包含某人引用的一些<q>元素。

  • 使用CSS选择器时为什么要划定适当的命名空间?
  • 保持 CSS 便于维护
  • 保持代码清晰易懂
  • 保持代码的可拓展性
  • 划定适当命名空间的技巧
  • 控制css样式行宽的大小,比如保持在80字节以下。
  • 使用四个空格而非TAB,把样式声明拆分为多行。
  • 使用多个文件写样式。
  • 给你的样式文件设置目录

可参照weakish作者的《编写可维护的CSS》一文
https://segmentfault.com/a/1190000000388784

  • 以下选择器分别是什么意思?
#header{}/*选择id名为header的元素*/
.header{}/*选择class名为header的元素*/
.header .logo{}/*选择class名为header元素下后代class名为logo的元素*/
.header.mobile{}/*选择在class名为header mobile的元素*/
.header p, .header h3{}/*选择class名为header元素下后代里的p元素和class名为header元素下后代里的h3元素*/
#header .nav>li{}/*选择id名为header元素下后代class名为nav的元素下第一代子元素为li的元素*/
#header a:hover{}/*选择id名为header元素下后代的a元素鼠标悬停的状态*/
  • 列出你知道的伪类选择器
伪元素选择器 功能描述
::first-line 匹配文本块的首行
::first-letter 选择文本块的首字母
:before 在选中元素的内容之前插入内容
:after 在选中元素的内容之后插入内容
结构性伪类选择器 功能描述
根元素选择器
:root 匹配文档中的根元素
子元素选择器
:first-child 选择元素的第一个子元素
:last-child 选择元素的最后一个子元素
:only-child 选择元素的唯一子元素
:only-of-type 选择元素指定类型的唯一元素
:nth-child选择器
:nth-chlid(n) 选择父元素的第n个子元素
:nth-last-child(n) 选择父元素的倒数第n个子元素
:nth-of-type(n) 选择父元素定义类型的第n个子元素
:nth-last-of-type(n) 选择父元素定义类型的倒数第n个子元素
UI伪类选择器 功能描述
:enabled 选择启用状态的元素
:disabled 选择禁用状态的元素
:checked 选择被选中的input元素(单选和复选)
:default 选择默认元素
:valid 根据输入验证选择有效或无效的input元素
:invalid
:in-range 选择在指定范围之内或之外受限的input元素
:out-of-range
:required 根据是否允许:required属性选贼input元素
:optional
动态伪类选择器 功能描述
:link 选择链接元素
:visited 选择用户已访问的链接元素
:hover 匹配鼠标悬停在其上的元素
:active 匹配用户即将点击的元素
:focus 当前获得焦点的元素
  • :first-child和:first-of-type的作用和区别
  • :first-child结构上父元素下第一个元素
  • :first-of-type结构上父元素下相同类型子元素中的第一个,不再限制是第一个子元素了,只要是该类型元素的第一个就行了
  • p:first-child表示第一个元素为p标签。
  • p:first-of-type表示第一个p标签的元素。
  • 效果相同的情况


    效果相同
  • p:first-child无效的情况,这里我们需要两个判断
    1 找到第一个元素(下图找到的第一个元素是div)
    2 判断找到的第一个元素是否为p标签,如果是则匹配样式,不是则不匹配
    (这里选择器找到的第一个元素是div不是p所以css无效)


    first-child无效
  • 而用p:first-of-type选择的话,这里只需要一个判断
    1 找到第一个为p标签的元素(这里选择器直接找到所有的p标签然后选择第一个p元素匹配样式)


    first-of-type有效
  • 运行如下代码,解析下输出样式的原因。
<style>
    .item1:first-child{ color: red;}
    .item1:first-of-type{ background: blue;}
</style> 
<div class="ct"> 
    <p class="item1">aa</p> 
    <h3 class="item1">bb</h3> 
    <h3 class="item1">ccc</h3> 
</div>
效果
  • .item1:first-child{ color: red;}
    这条选择器找到class="item1"元素的父类
    class="ct"下的第一个元素且class为item1的元素字体颜色为红。

  • .item1:first-of-type{ background: blue;}
    表示class="item1"元素的父类class="ct"下同一类型元素组里的第一个元素且class为item1的元素背景色为蓝色。
    上段代码中<p class="item1">aa</p> 和<h3 class="item1">bb</h3> 都是当前父类下class为item1的p元素和h3元素组的第一个元素,所以被选中。

  • 改变一下html上面class的命名,观察h3的样式匹配(of-type的判断最后是要具体选择到标签上)


    效果
  • 下面加入第二个div,可以观察:first-of-type选择器


    第一个例子
  • 这里找到了class为item1的div但是这个div在父元素下同类型中是第二个div所以无效了。


    第二个例子
  • 这里的新例子使用了:nth-of-type(2),选择了第二个元素,可以证明:first-of-type这个伪类选择器判断条件里有一个判断

    新例子

  • text-align: center的作用是什么,作用在什么元素上?能让什么元素水平居中

  • 作用是使行内元素居中,只能作用在行内元素上,而不能使块元素居中


    只能使行内元素居中
  • 如果遇到一个属性想知道兼容性,在哪查看?

  • http://caniuse.com/可以搜索属性兼容性。

  • http://caniuse.com/#search=new%20elements 搜索new elements可查看HTML5新增加的语义标签。

本博客版权归 杨然和饥人谷所有,转载需说明来源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 1.class 和 id 的使用场景? class:类选择器,一个标签可以有多个类且同一个类可以用到不同的标签上,...
    饥人谷_兔子君阅读 1,179评论 0 0
  • 一、CSS选择器常见的有几种? 基本选择器 通配选择器~选择文档中所有的html元素,用一个*表示 元素选择器~选...
    dengpan阅读 959评论 0 3
  • 一,CSS选择器常见的有几种? 答: 基础选择器 组合选择器 属性选择器 伪类选择器 伪元素选择器 基础选择器 组...
    kingBirds阅读 1,780评论 0 0
  • class和id的使用场景 class指定标签的类名,属性值可出现在多个标签中。id指定标签的唯一标识,为某一元素...
    饥人谷_saybye阅读 446评论 0 0
  • 韩式田园风格设计的表现形式 导语:装修风格有很多种,每个人的喜好都不尽相同,经常会有业主纠结说到底哪种才是最适合自...
    变更丶阅读 441评论 0 1