CSS选择器

一.CSS选择器常见的有几种?

1.基础选择器

选择器 含义
* 选中所有的元素,一般使用的较少,像margin、padding之类的还偶尔可以用一下
#id id选择器,用来匹配设定了的id的元素,它具有唯一性,一般在页面大的区块就会使用id选择器
.class 类选择器,用来匹配class包含的特定类的元素,不具有唯一性
element 适用于一般的标签选择器

下面写了一个小的例子:JS bin

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>基础选择器</title>
<style>
  *{
  margin:0px;
  padding: 0px;
   }
#logo img{
  height: 45px;
  }
.nav, .main{
  border: 1px solid #ccc
 }
p{
  color: red;
 }
</style>
</head>
<body>
  <div id="header">
    <a id="logo" href="#">![](http://upload-images.jianshu.io/upload_images/2244513-733244a8395264f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
    <ul class="nav">
      <li>视频</li>
      <li>导师</li>
      <li>课件</li>
      <li>报名</li>
    </ul>
  </div>
  <div id="content">
    <P>最有爱的前端互助社区</p>
    <ul class="main">
      <li>导师棒棒哒</li>
      <li>课程最实用</li>
    </ul>
  </div>
  <div id="footer">欢迎加入我们</div>
</body>
</html>
基础选择器示例

2.组合选择器

选择器 含义
E,F 多元素选择器,用,分隔,任何形式的选择器都可以作为其中的一部分,表示同时匹配元素E或者元素F,适用于当某些选择器具有相同的样式,可以简化代码
E F 后代选择器,中间用空格隔开,用于匹配元素E所有的后代F
E>F 直接子元素选择器,中间用>隔开,用于匹配E的最外层子元素,也就是直接子元素
E+F 直接相邻选择器,匹配E元素之后的相邻的同级元素F
E~F 普通兄弟选择器,用于匹配E元素之后的所有的同一级的元素F

还是要动手去实践,看了许久没有搞懂,自己动手写一写豁然开朗,还是要改掉眼高手低的坏毛病。下面给出一个小的例子。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>组合选择器</title>
    <style>
    h3[class="title 1"], p{
  color:red;
}
#content a{
  text-decoration: none;
}
#header > p{
  text-align: center;
}
#content + a{
  background: #ff0;
}
#header ~ p{
  border: 1px solid #ccc;
}
    </style>
</head>
<body>
  <div id="header">
    <h3 class="title 1">我是标题1</h3>
    <h3 class="title 2">我是标题2</h3>
    <p class="paragraph 1">我是段落1</p>
    <div>
       <p>我是段落2</p>
    </div>
  </div>
  <div id="content">
    <a href="#">按钮1</a>
    <div class="button">
      <a href="#">按钮2</a>
    </div>
  </div>
  <a href="#">按钮3</a> 
  <p>我是段落3</p>
</body>
</html>
组合元素选择器示例

3.属性选择器
属性选择器比较常用的就是element[attribute="value"],用于匹配属性为value的元素。下面写一个它的一个最简单的使用场景,就是应用于input输入。这样可以不用再对其设置class名称,直接选中需要的元素。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>属性选择器</title>
 <style>
input[type='text']{
  outline: none;
}
</style>
</head>
<body>
  <form name="myForm" method="post">
  用户名:<input name="username" type="text" placeholder="用户名"> <br/>
  密码:<input name="pwd" type="password" placeholder="密码" >  <br/>
  </form>
</body>
</html>
属性选择器使用场景之一

4.伪类选择器
为什么叫伪类呢?状态是动态变化的,当一个元素达到一个特定状态的时候,它可能得到一个伪类的样式;当状态改变的时候,它又会失去这个样式。所以说它的功能和class有些类似,但它是基于文档之外的抽象,所以叫伪类。
伪类选择器和一般的DOM中的元素样式不一样,它并不会改变任何DOM内容。只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于DOM来说却是不可见的。

选择器 含义
E:link 匹配所有未被点击的链接
E:visited 匹配所有已被点击的链接
E:hover 匹配鼠标放置的E元素,必须要位于link和visited之后才能生效
E:active 匹配鼠标已经按下、但是还没有释放的E元素,必须要位于hover之后才能生效
E:lang(c) 匹配lang属性等于c的E元素,lang伪类可以为语言定义特殊的规则
E:focus 匹配获得当前焦点的E元素,比如说应用于form表单的输入框
E:first-child 匹配元素E的第一个子元素
E:last-child 匹配父元素的最后一个子元素,等同于:nth-last-child(1)
E:nth-child(n) 匹配其父元素的第n个子元素,第一个编号为1
E:nth-last-child(n) 匹配其父元素的倒数第n个子元素,第一个编号为1
E:nth-of-type(n) 与:nth-child()作用类似,但是仅匹配使用同种标签的元素
E:nth-last-of-type(n) 与:nth-last-child() 作用类似,但是仅匹配使用同种标签的元素
E:first-of-type 匹配父元素下使用同种标签的第一个子元素,等同于:nth-of-type(1)
E:last-of-type 匹配父元素下使用同种标签的最后一个子元素,等同于:nth-last-of-type(1)
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>伪类选择器</title>
<style>
a:link{
  color: #0f0;
}
a:visited{
  color: #ccc;
}
a:hover{
  color: red;
}
a:active{
  background: #00f;
}
q:lang(no){
  quotes: "~" "~"
}
input[type="text"]:focus{
  background: yellow;
}
p:first-child{
  font-weight: bold;
}
li:first-child{
  text-transform:uppercase;
}
span:last-child{
  color: red;
} 
.programming span:nth-child(2n){
  background-color: #ccc;
}
p:nth-of-type(2n+1){
  color: #ddee00;
}
.preference > span:first-child{ 
  border: 1px solid #44dd88;
}
.fruit > span:first-of-type{
 background: #00f;
}
</style>
</head>
<body>
  <a href="http://book.jirengu.com" target="myPage">饥人谷</a>
  <a href="http://www.w3cschool.com" target="myPage">w3cshool</a>
   <p>超人<q lang="no">会飞</q></p>
  <form name="myForm" method="post">
    姓名:<input name="username" type="text" placeholder="用户名" /><br/>
    密码:<input name="pwd" type="password" placeholder="密码" enable/><br/> 
  </form>
<div>
<p>学习步骤:</p>
<ul>
<li>听课</li>
<li>做<strong>作业</strong></li>
<li>总结</li>
</ul>
<p>记住<em>不要</em> 眼高手低</p>
</div>
  <div class="programming">
    <span>前端</span>
    <span>java</span>
    <span>c++</span>
  </div>
  <div class="preference">
    <span>旅游</span>
    <span>交<span>知心</span>朋友</span>
    <span>运动</span>
  </div> 
  <h1 class="fruit">
    <p>香蕉</p>
    <p>西瓜</p>
    <p>葡萄</P>
  <span>橙子</span>
  </h1>
</body>
</html>

结果截图

代码github地址
结果预览
在上面的代码中,大部分的伪类选择器应该都举了例子。关于E:first-child这一类和E:first-of-type这一类需要注意的地方,在我的另外一篇博客里有详细的说明。因为写的比较长,就分开写了,需要看看的可以点击伪类选择器之E:first-child系列和E:first-of-type系列。这里就不作详细说明了。
5.伪元素选择器
伪元素就是用于向某些选择器设置特殊效果。如果需要添加新元素加以标识的,就是伪元素,反之,如果只需要在既有元素上添加类别的,那就是伪类。在 CSS3 中为了区别伪元素和伪类为伪元素使用了双冒号作区分。

选择器 含义
E:first-line/E::first-line 匹配E元素内容的第一行,仅能被用于块级元素
E:first-letter/E::first-letter 匹配E元素内容的第一个字母或者第一个字,仅能被用于块级元素
E:before/E::before 在E元素之前插入生成的内容
E:after/E::after 在E元素之后插入生成的内容

这里重点讲一下E::before和E::after这两个伪元素。他们特有的属性 content,用于在 CSS 渲染中向元素逻辑上的头部或尾部添加内容,不会出现在DOM当中。除此之外还有:

  • [String] 使用引号包括一段字符串,将会向元素内容中添加字符串。
  • attr() 调用当前元素的属性,可以方便地将图片的 Alt 提示文字或者链接的 Href 地址等等显示出来。
  • url() / uri() 用于引用媒体文件。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>伪元素选择器</title>
<style>
a:after { content:"(" attr(href) ")"; }
a::before { content: url(http://www.jirengu.com/data/upload/2016/0321/16/56efb29eadb87.png); }
h1:before { content: "↗"; 
  }
p::first-line{
  color: red;
}
p::first-letter{
  border: 1px solid #ccc
}
</style>
</head>
<body>
  <a href="http://book.jirengu.com">饥人谷</a>
  <h1>前端</h1> 
  <p>学习</p>
</body>
</html>
</body>
</html>

二.选择器的优先级是怎样的?

优先级从高到低依次为:

  • 在属性后面使用 !important,会覆盖页面内任何位置定义的元素样式。
  • 作为style属性写在元素标签上的内联样式。
  • id选择器
  • 类选择器
  • 伪类选择器
  • 属性选择器
  • 标签选择器
  • 通配符选择器
  • 浏览器自定义
    总的来说,定位的越精准,优先级就越高。优先级高的样式会覆盖优先级低的。

三.class 和 id 的使用场景?

  • class名称是可以重复的,所以它一般用于给多个元素赋予同样的样式。如果还需要同样的样式,添加一个同名的class类就可以,这样能简化代码。
  • 在一个页面中id名称不能重复,它一般用于划分大的区块。

四.使用CSS选择器时为什么要划定适当的命名空间?

  • 使用语义化的命名可以使代码容易读懂。
  • 便于维护和多人协作。
  • 浏览器可能会因为不规范的命名产生不同的样式。

五.以下选择器分别是什么意思?

#header{
}    /* id选择器,选择id名称为header的元素 */
.header{
}   /* class选择器,选择class名称为header的元素 */
.header .logo{
}   /* 后代选择器,选择class名称为header元素的后代元素中class名称为logo的所有元素 */
.header.mobile{
}   /* 类选择器,选择class类同时具有header和mobile的元素 */
.header p, .header h3{
}   /* 多元素选择器,选择header中的p和h3元素 */
#header .nav>li{
}   /* 后代选择器,选择id为header的后代元素中class为nav的直接子元素(也就是nav的最外层子元素,即第一代子元素)li */
#header a:hover{
}   /* 后代元素选择器,选择id为header的所有后代元素a的鼠标悬停的效果 */

六.运行如下代码,解析下输出样式的原因。

<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>

这部分在上面提到的另外一篇博客中已经做了详细说明。


结果分析

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

text-align: center是让块级元素居中,只能作用在块级元素,比如说一个div或者段落上面,对内部行内元素(比如文字或者图片)生效。


示例

八.如果遇到一个属性想知道兼容性,在哪查看?

可以在Can I use上面查看。比如说输入inline-block,对应的在各个浏览器的兼容性就会显示出来。

截图


啊啊啊,这两篇博客真的花了我好长时间,还好一些常用选择器的基本含义是差不多理解了。学习的速度可以不追求那么快,但基础一定要打牢。继续加油吧,菇凉。


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

推荐阅读更多精彩内容

  • CSS选择器结构逻辑图 接下来按照结构逻辑图具体讲解各个选择器的作用及用法; 基本选择器 基本选择器主要有以下5类...
    FoolishFlyFox阅读 529评论 0 8
  • 1.CSS 元素选择器 最常见的 CSS 选择器是元素选择器。换句话说,文档的元素就是最基本的选择器。如果设置 H...
    饥人谷_小侯阅读 824评论 0 1
  • 其实平时用得多的选择器无非也就是那么几个,时间久了,许多不常用的选择器就慢慢忘记了。为了不让自己忘记这些选择器,今...
    盛夏晚清风阅读 1,761评论 0 5
  • 1.class 和 id 的使用场景? class:类选择器,一个标签可以有多个类且同一个类可以用到不同的标签上,...
    饥人谷_兔子君阅读 1,131评论 0 0
  • 一、CSS选择器常见的有几种? 基本选择器 通配选择器~选择文档中所有的html元素,用一个*表示 元素选择器~选...
    dengpan阅读 931评论 0 3