CSS选择器学习笔记(BETA 1.1)

新版本的Edge支持度都比较好,IE不行,CSS选择器原文链接 (加上了一小部分自己的理解,以及原文不说人话的文字描述的改写,基本是看过案例或者用过,有待补充)

  • CSS使用的一部分想法,className在大规模项目中是非常痛苦的存在(本人起名废),所以推荐使用集中类型的属性设定之后多次应用,可以根据自己需要总结一些常用class之后直接调用,不需要单独写。↓
<!DOCTYPE html>
<html>
<head>
<style> 
 .egText { 
   font-size: 14px;
   font-weight: bolder;
 }
 .egColor {
   color: #409EFF;
 }
</style>
</head>
<body>

<div>
   <span class="egText egColor ">A div element.</span>
   ...
</div>

<div class="egText  egColor ">B div element.</div>

</body>
</html>

单独类别(基础中的基础)

  • * 通配符(所有元素)

  • .class 所有 class = “className” 的元素

  • #id 所有 id = “id” 的元素

  • element 选择所有 element 比如p

互相作用关系

elementui的标签基本会带class属性 与 className 性质等同
#id.classelement 三者在实际使用中的用法相同

  • element1,element2 选择 所有element1 和 element2 元素(逗号为并列选择)

  • element1 element2 选择 element1内所有element2 元素(空格为子级选择)

<!DOCTYPE html>
<html>
<head>
<style> 
  .attrA .attrB { 
    color:#ff0000;
  }
</style>
</head>
<body>

<div #id="title" class="attrA">
    <span #id="content" class="attrB">A div element.</span><!-- 变化 -->
</div>
<div class="attrA attrB">B div element.</div>

</body>
</html>

↑其中 .attrA .attrB { color:#ff0000; } 等同于 div span { color:#ff0000; } 等同于 #title #content { color:#ff0000; }
唯一性最强的是#id系列,慎用element系列(杀伤范围过大)

  • element1element2 选择 element1element2 同时存在的元素(中间没有空格,需要同时满足两个class都存在,常用来指向一个元素)
<!DOCTYPE html>
<html>
<head>
<style> 
  .attrA.attrB {
    color:#ff0000;
  }
</style>
</head>
<body>

<div class="attrA">
    <span class="attrB">A div element.</span>
</div>
<div class="attrA attrB">B div element.</div> <!-- 变化 -->

</body>
</html>
  • element1>element2 选择 所有父级是 element1element2

  • element1+element2 选择 element1 下第一个element2

  • element1~element2 选择 element1 之后的每一个 element2 元素(在线代码测试时,发现ul套了一层div就不认识了,应该是同一层的兄弟关系才起作用)

<!DOCTYPE html>
<html>
<head>
<style> 
  p~ul {
    background:#ff0000;
  }
</style>
</head>
<body>

<div>A div element.</div>
<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

<p>The first paragraph.</p>
<!--此后的ul均为选中,其他不会被选中-->
<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

<h2>Another list</h2>
<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

</body>
</html>

带判断条件的 [ ]

  • [attribute] 所有带 attribute 属性的元素
    a[target] { background-color:yellow; }

  • [attribute=value] 所有 attribute = value 的元素
    a[target = _blank] { background-color:yellow; }

  • [attribute~=value] 选择 attribute 含 value所有 元素
    [title~=flower] { background-color:yellow; }

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
  [title~=flower] {
    border:5px solid yellow;
  }
</style>
</head>

<body>
  <p>
    图片的 title 属性中如果带有 "flower" 单词,则会设置为黄色边框。
  </p>
  <img src="klematis.jpg" title="klematis flower" width="150" height="113" /> <!-- 变色 -->
  <img src="img_flwr.gif" title="flowers" width="224" height="162" /> <!--  变色 -->
  <img src="landscape.jpg" title="landscape" width="160" height="120" />
  <p>
    <b>注意:</b>
    如果 [<i>attribute</i>~=<i>value</i>] 
    要在 IE8 及其更早版本下起作用, DOCTYPE 是必须声明的。
  </p>
</body>
</html>
  • [attribute|=language] 选择 attribute属性等于language或是以它为开头所有 属性
    [lang|=en] ( [title|="flower"] )
<!DOCTYPE html>
<html>
<head>
<style>
  [lang|=en] {
    background:yellow;
  }
</style>
</head>

<body>
  <p lang="en">Hello!</p> <!--变色-->
  <p lang="en-us">Hi!</p> <!--变色-->
  <p lang="en-gb">Ello!</p> <!--变色-->
  <p lang="us">Hi!</p>
  <p lang="no">Hei!</p>
  <p>
    <b>Note:</b> 
    For [<i>attribute</i>|=<i>value</i>] 
    to work in IE8 and earlier, a DOCTYPE must be declared.
  </p>
</body>
</html>
  • [attribute^=value] 选择每一个 attribute 属性的值以 value 开头的元素
    div[class^="test"] { background:#ffff00; }

  • [attribute$=value] 选择每一个 attribute 属性的值以 value 结尾的元素
    div[class$="test"] { background:#ffff00; }

  • [attribute*=value] 选择每一个 attribute 属性的值包含 value 的元素
    div[class*="test"] { background:#ffff00; }

伪类(定义特殊属性)

常用,内容类
  • :before p:before { content:"Read this: "; } 在插入图形中会常用,以及需要添加一部分文本,也可以设置开头,就好比剧本那种 XXX:xxxxx 在前面把 XXX 统一加上,也可以在前面添加一些东西

  • :after p:after { content:"- Remember this"; } 在插入图形中会常用,在段尾添加一些东西都可以用,与before经常会联合起来使用

a链接常用
  • :link 选择所有未访问链接 a:link { background-color:yellow; } 可以与:visited一起使用,作为两类的区分,需要同一个元素才能生效
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
  a:link {
    background-color:yellow;
  }
</style>
</head>
<body>
<!--单独使用:link,点击的时候没发现原增加的背景色在点击后有变化,添加visited之后才有效果-->
<a href="//www.runoob.com/">runoob.com</a>
<a href="//www.google.com">Google</a>
<a href="//www.wikipedia.org">Wikipedia</a>

<p><b>注意:</b>:link选择样式链接到你还没有去过的链接。</p>

</body>
</html>
  • :visited 选择所有访问过的链接 a:visited { background-color:green; } 可以与:link一起使用,作为两类的区分,需要同一个元素才能生效
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
  a:link { background-color:yellow; }
  a:visited { background-color:green; }
</style>
</head>

<body>
  <a href="//www.runoob.com/">runoob.com</a>
  <a href="//www.baidu.com">百度</a>
  <a href="//www.wikipedia.org">Wikipedia</a>
  <p><b>注意:</b>:link选择样式链接到你还没有去过的链接。</p>
</body>
</html>
  • :target 针对a链接的target作锚点时的选中状态,锚点对应部分会根据 :target 的样式进行渲染
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
  :target {
    border: 2px solid #D4D4D4;
    background-color: #e5eecc;
  }
</style>
</head>
<body>

<h1>This is a heading</h1>

<p><a href="#news1">Jump to New content 1</a></p>
<p><a href="#news2">Jump to New content 2</a></p>

<p>Click on the links above and the :target selector highlight the current active HTML anchor.</p>

<p id="news1"><b>New content 1...</b></p>
<p id="news2"><b>New content 2...</b></p>

<p><b>注意:</b> IE 8 以及更早版本的浏览器不支持 :target 选择器.</p>

</body>
</html>
button常用
  • :active 选择活动链接 a:active { background-color:yellow; } 点击时当下的样式,不持续,只有点击时有效

  • :hover 鼠标移到链接上的样式 a:hover { background-color:yellow; }

  • :focus 选择具有焦点输入元素 input:focus { background-color:yellow; }

针对状态常用(比较多是针对input原生的各种状态)
  • :enabled 选择每一个已启用的输入元素 input[type="text"]:enabled { background:#ffff00; } (每一个 type=text 的已开启的 input)
<form action="">
  First name: <input type="text" value="Mickey" /><br>
  Last name: <input type="text" value="Mouse" /><br>
  Country: <input type="text" disabled="disabled" value="Disneyland" /> 
  <br>
</form>
  • :disabled 选择每一个禁用的输入元素 input[type="text"]:disabled { background:#dddddd; } (针对 enabled 而用,默认都是enabled)

  • :checked 选择每个选中的输入元素 input:checked { height: 50px; width: 50px; }

  • :out-of-range input框设定 min 和 max 后,超出范围之后的样式修改,可与in-range同用,可单独使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
input:out-of-range {
    border:2px solid red;
}
</style>
</head>
<body>

<h3> :out-of-range 选择器实例演示。</h3>

<input type="number" min="5" max="10" value="17" />

<p>在input中输入一个值 (小于 5 或者 大于 10), 查看样式的变化。</p>

</body>
</html>
  • :in-range 与out-of-range对应,input的伪类,可以单独生效
    input:in-range { border:2px solid yellow; }

  • :read-write 匹配可读及可写的元素,与readonly相配合使用,渲染所有非readonly的内容

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
  input:read-write {
    background-color: yellow;
  }
</style>
</head>
<body>

<h3> :read-write 选择器实例演示。</h3>

<p>普通的input元素:<br><input value="hello"></p>

<p>只读的input元素:<br><input readonly value="hello"></p>

<p> :read-write 选择器选取没有设置 "readonly" 属性的元素。</p>

</body>
</html>
  • :read-only 只针对拥有readonly属性的对象进行样式设置
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
input:read-only
{
    background-color: yellow;
}
</style>
</head>
<body>

<h3> :read-only 选择器实例演示。</h3>


<p>普通的input元素:<br><input value="hello"></p>

<p>只读的input元素:<br><input readonly value="hello"></p>

<p> :read-write 选择器选取没有设置 "readonly" 属性的元素。</p>
<p> :readonly 择器选取设置 "readonly" 属性的元素。</p>

</body>
</html>
  • :optional input没有写 required 的所有元素内容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
input:optional
{
background-color: yellow;
}
</style>
</head>
<body>

<h3>:optional 选择器演示实例。</h3>

<p>可选的 input 元素:<br><input></p>

<p>必填的 input 元素:<br><input required></p>

<p> :optional 选择器用于表单中未设置"required" 属性的元素。</p>

</body>
</html>
  • :required input里所有带上 required 属性的元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
input:required
{
    background-color: yellow;
}
</style>
</head>
<body>

<h3>A demonstration of the :required selector.</h3>

<p>An optional input element:<br><input></p>

<p>A required input element:<br><input required></p>

<p> :required选择器选择表单元素有“需要”属性.</p>

</body>
</html>
  • :valid 针对input的type属性,自带校验不匹配则不现实样式效果,与 :invalid 对应,可以单独使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
input:valid
{
    background-color: yellow;
}
</style>
</head>
<body>

<h3> :valid 选择器实例演示。</h3>

<input type="email" value="support@exampel.com" />

<p>请输入非法 e-mail 地址,查看样式变化。</p>

</body>
</html>
  • :invalid 不匹配input自带校验规则,则会显示样式,与 :valid 对应,可以单独使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
input:invalid
{
    border:2px solid red;
}
</style>
</head>
<body>

<h3> :invalid 选择器实例演示。</h3>

<input type="email" value="supportEmail" />

<p>请输入合法 e-mail 地址,查看样式变化。</p>

</body>
</html>
  • :default input:default { box-shadow: 0 0 1px 1px red; } 给input默认值的一个醒目点,慎重使用(可用于比如radio,checkbox状态)
<!DOCTYPE html>
<html>
<head>
<style> 
input:default {
  box-shadow: 0 0 1px 1px red;
}
</style>
</head>
<body>

<h1>The default Selector</h1>
<p>The :default selector selects the default form element in a group of related elements.</p>
<p>The "male" radio button is checked by default:</p>

<form action="">
  <input type="radio" name="gender" value="male" checked> Male<br>
  <input type="radio" name="gender" value="female"> Female<br>
  <input type="radio" name="gender" value="other"> Other
</form>

<p>The :default selector is not supported in Internet Explorer 11 and earlier versions.</p>

</body>
</html>
  • :indeterminate input:indeterminate { box-shadow: 0 0 1px 1px red; } 表不确定的状态↓checkbox专属(用于多选)

    elementui相关表现参考

  • ::placeholder::placeholder { color: red; } 直接硬控placeholder的属性,有兼容写法(针对edge),使用需谨慎

文字类常用
  • :first-letter 选择第一个字母元素 p:first-letter { font-size:200%; color:#8A2BE2; } (首字母变大变色)

可用属性:font || color || background || margin || padding || border || text-decoration || vertical-align (only if float is 'none') || text-transform || line-height || float || clear

  • :first-line 选择第一行原素 p:first-line { background-color:yellow; }

可用属性:font || color || background || word-spacing || letter-spacing || text-decoration || vertical-align || text-transform || line-height || clear

  • ::selection 元素中被用户选中或处于高亮状态的部分(选择案例中的文本会变色,高亮部分状态变更还未知)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style type="text/css">
::selection
{
color:#ff0000;
}
::-moz-selection
{
color:#ff0000;
}
</style>
</head>
<body>

<h1>尝试选择本页的一些文本</h1>

<p>这是一些文本.</p>

<div>这是div元素中的一些文本.</div>

<a href="//www.w3cschool.cc/" target="_blank">链接W3Cschool!</a>

</body>
</html>
  • ::marker 就是给ul li ol li系列标识的一个符号专用css类名
<!DOCTYPE html>
<html>
<head>
<style>
::marker { 
  color: red;
}
</style>
</head>
<body>

<h1>Demo of the ::marker selector</h1>

<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

<ol>
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ol>

</body>
</html>
前面的标点和序号变色效果图
常用选择类(针对子元素)
  • :first-of-type p:first-of-type { background:#ff0000; }(其父元素下的第一个P元素)

  • :last-of-type p:last-of-type { background:#ff0000; }(其父元素下的最后一个P元素)

  • :only-of-type p:only-of-type { background:#ff0000; }(其父元素下的唯一一个P元素)

  • :nth-of-type(n) p:nth-of-type(2) { background:#ff0000; }(兄弟元素,父元素下的第2个p元素)

  • :nth-last-of-type(n) p:nth-last-of-type(2) { background:#ff0000; }(兄弟元素,父元素下的倒数第2个p元素)

  • :first-child 父元素的第一个子元素(以所有子元素来计算) p:first-child { background-color:yellow; }

  • :last-child p:last-child { background:#ff0000; }(父元素中最后一个元素是p元素,其他元素无效)

  • :only-child p:only-child { background:#ff0000; }(父元素中唯一子元素的 p 元素)

  • :nth-child(n)p:nth-child(2) { background:#ff0000; }(父元素中的第2个子元素是p的元素,如果是其他元素排第二位则无效)

  • :nth-last-child(n) p:nth-last-child(2) { background:#ff0000; }(父元素中的倒数第2个子元素是p的元素,如果是其他元素则无效)

  • :not(selector) except :not(p) { background:#ff0000; }

  • :has 常用于反向选择 div:has(p) { color:#000000; }

  • :is 用于多选 :is(h1, h2, h3) { color: red; } (感觉多选的方法有很多,实用性有待考究)

特殊类
  • :lang(language) 首先有lang属性,然后只针对语言类的起始字母为条件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
p:lang(it)
{ 
    background:yellow;
}
</style>
</head>
<body>

<p>I live in Italy.</p>
<p lang="it">Ciao bella!</p> 
<!--当lang的语言起始为it即为选中,比如lang="en",则lang="en"与lang="en-us"均为选中-->
<p><b>注意:</b> :lang 作用于 IE8, DOCTYPE 必须已经声明.</p>

</body>
</html>
  • :root 选择文档的根元素 :root { background:#ff0000; }(给整个 iframe || html 增加bgc属性,不跟其他元素绑定)

  • :empty 没有任何子级的元素,比如p内的文字也属于子级 p:empty { background:#ff0000; }(input这种直接就是改变,不会因为输入而变更,简直bgc)

  • :fullscreen :fullscreen { background-color: yellow; }配合F11全屏使用的特殊情况可以考虑

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

推荐阅读更多精彩内容