97免费在线观看视频 I 午夜夫妻视频 I 久久久久久网站 I 天堂网男人 I 欧美大波大乳人奶 I 丝袜 中出 制服 人妻 美腿 I 窝窝午夜理论片影院 I 日韩在线伦理电影 I 韩国特级毛片 I 亚洲欧美另类激情 I 在线成人日韩 I 麻豆视频免费看 I 黄色生活毛片 I 极品一线天小嫩嫩真紧 I 色久天堂 I 久久久久久黄色片 I 林智妍三级露全乳电影视频 I 大肉大捧一进一出好爽视频 I 空乘伦理hd I 少妇口述与子做过爱 I 成人免费影片 I 国产精品国内免费一区二区三区 I 日韩制服一区 I 青青草福利在线 I 日本在线观看不卡视频 I 婷婷六月综合亚洲 I 国产又粗又黄又硬 I 美女扒开屁股让男子桶爽 I 欧美性午夜视频观看 I 欧美狠狠插 I 亚洲福利在线观看视频 I 无码抽搐高潮喷水流白浆 I 亚洲欧美国产日韩色伦 I 你懂的视频网站在线观看 I www.蜜桃视频在线观看 I 日本无码人妻精品一区二区蜜桃 I 久久中文字幕人妻丝袜 I 碰草在线视频 I 日韩精品成人av网站

CSS 選擇器

2020/10/26 8:41:07   閱讀:4313    發布者:4313

簡單選擇器

  • 星號 —— *
    • 通用選擇器,可以選擇任何的元素
  • 類型選擇器type selector —— div svg|a
    • 也叫做 type selector, 也就是說它選擇的是元素中的 tagName (標簽名) 屬性
    • tagName 也是我們平常最常用的的選擇器
    • 但是因為 HTML 也是有命名空間的,它主要有三個:HTMLSVGMathML
    • 如果我們想選 SVG 或者 MathML 里面特定的元素,我們就必須要用到單豎線 | CSS選擇器里面單豎線是一個命名空間的分隔符,而HTML 里面命名空間分隔符是 冒號 : 。然后前面說到的命名空間是需要 @namespace 來聲明的,他們是配合使用的,但是這個命名空間的使用不是很頻繁,它的存在只是為了一個完備性考慮,HTML SVG當中唯一一個重疊的元素名就只有一個 a
    • 所以我們可以認為,類型選擇器就是一個簡單的文本字符串即可
  • 類選擇器|class selector —— .class-name
    • . 開頭的選擇器就是 class 選擇器,也是最經典之一
    • 它會選擇一個 class,我們也可以用空格做分隔符來制定多個 class
    • 這個 .class 只要匹配中其中一個就可以了
  • ID 選擇器id selector —— #id
    • # 開頭加上 ID 名選中一個 ID
    • 這個是嚴格匹配的
    • ID 里面是可以加減號或者是其他符號的
  • 屬性選擇器|attribute selector —— [attr=value]
    • 它包括了 class 屬性選擇器和 id 選擇器
    • 這個選擇器的完整語法就是 attr=value,等于前面是屬性名,后面是屬性值
    • 這里面的等號前面可以加 ~ 就表示像 class 一樣,可以支持拿空格分隔的值的序列:attr~=value
    • 如果在等號前面加單豎線,表示這個屬性以這個值開頭即可:attr|=value
    • 如果我們對優先級沒有特殊要求的話,我們理論上是可以用屬性選擇器來代替 class 選擇器和 id 選擇器的
  • 偽類 —— :hover
    • : 開頭的,它主要是一些屬性的特殊狀態
    • 這個跟我們寫的 HTML 沒有關系,多半來自于交互和效果
    • 一些偽類選擇器是帶有函數的偽類選擇器,這些我們都是可以去使用偽類來解決的
  • 偽元素選擇器 —— ::before
    • 一般來說是以 :: 雙冒號開頭的
    • 實際上是支持使用單冒號的,但是我們提倡雙冒號這個寫法
    • 因為我們可以一眼就看出這個是偽元素選擇器,和偽類區分開來
    • 偽元素屬于選中一些原本不存在的元素
    • 如果我們不選擇它們,這個地方就不存在這個元素了,選擇后就會多了一個元素

復合選擇器

  • <簡單選擇器><簡單選擇器><簡單選擇器>
  • * 或則 div 必須寫在最前面

首先復合選擇器是以多個簡單選擇器構成的,只要把簡單選擇器挨著寫就變成一個復合選擇器了。它的語義就是我們選中的元素必須同時 match 幾個簡單選擇器,形成了的關系。

復雜選擇器

復合選擇器中間用連接符就可以變成復雜選擇器了,復雜選擇器是針對一個元素的結構來進行選擇的。

  • <復合選擇器> <復合選擇器> —— 子孫選擇器,單個元素必須要有空格左邊的一個父級節點或者祖先節點
  • <復合選擇器> ">" <復合選擇器> —— 父子選擇器,必須是元素直接的上級父元素
  • <復合選擇器> "~" <復合選擇器> —— 鄰接關系選擇器
  • <復合選擇器> "+" <復合選擇器> —— 鄰接關系選擇器
  • <復合選擇器> "||" <復合選擇器> —— 雙豎線是 Selector Level 4 才有的,當我們做表格的時候可以選中每一個列


CSS 偽類

偽類其實是一類非常多的內容的簡單選擇器。

鏈接/行為

  • :any-link —— 可以匹配任何的超鏈接
  • :link —— 還沒有訪問過的超鏈接
  • :link :visited —— 匹配所有被訪問過的超鏈接
  • :hover —— 用戶鼠標放在元素上之后的狀態,之前是只能對超鏈接生效,但是現在是可以在很多元素中使用了
  • :active —— 之前也是只對超鏈接生效的,點擊之后當前的鏈接就會生效
  • :focus —— 就是焦點在這個元素中的狀態,一般用于 input 標簽,其實任何可以獲得焦點的元素都可以使用
  • :target —— 鏈接到當前的目標,這個不是給超鏈接用的,是給錨點的a 標簽使用的,就是當前的 HASH指向了當前的a 標簽的話就會激活target 偽類

一旦使用了:link 或者:visited 之后,我們就再也無法對這個元素的文字顏色之外的屬性進行更改。為什么要這樣設計呢?因為一旦我們使用了 layout 相關的屬性,比如說我們給:visited 的尺寸加大一點,它就會影響排班。這樣我們就可以通過 JavaScript API 去獲取這個鏈接是否被訪問過了。但是如果我們能獲得鏈接是否被訪問過了,那么我們就可以知道用戶訪問過那些網站了,這個對于瀏覽器的安全性來說是一個致命打擊。所以這里也提醒一下大家,不要以為做一些表現性的東西與安全沒有任何關系,其實安全性是一個綜合的考量。CSS 它也能造成安全漏洞的。

樹結構

  • :empty —— 這個元素是否有子元素
  • :nth-child() —— 是父元素的第幾個兒子(child
  • :nth-last-child() —— 與nth-child 一樣,只不過從后往前數
  • :first-child :last-child :only-child

:nth-child 是一個非常復雜的偽類,里面支持一種語法,比如說可以在括號里面寫奇偶event 或者odd,也可以寫4N+13N-1,這個就會分別匹配到整數的形態。因為這個是一個比較復雜的選擇器,我們就不要在里面寫過于復雜的表達式了,只用它來處理一下奇偶,逢3個多1個,逢4個多1個等等這種表達式。

其實empty nth-last-childlast-childonly-child 這兩個選擇器,是破壞了我們之前在 《實現中學習瀏覽器原理》中的說到的 CSS 計算的時機問題。我們可以想象一下,當我們在開始標簽計算的時候,肯定不知道它有沒有子標簽。empty 影響不是特別大,但是last-child 的這個關系其實還是影響蠻大的。所以瀏覽在實現這些的時候是做了特別處理的,要么就是瀏覽器實現的不是特別好,要么就是瀏覽器要耗費更大的性能來得以實現。所以建議大家盡量避免大量使用這些。

邏輯型

  • :not 偽類 —— 主流瀏覽器只支持簡單選擇器的序列(復合選擇器)我們是沒有辦法在里面寫復雜選擇器的語法的
  • :where :has —— CSS Level 4 加入了這兩個非常強大了邏輯型偽類

這里還是想溫馨建議一下大家,不建議大家把選擇器寫的過于復雜我們很多時候都可以多加一點 class 去解決的。如果我們的選擇器寫的過于復雜,某種程度上意味著 HTML 結構寫的不合理。我們不光是為了給瀏覽器工程省麻煩,也不光是為了性能,而是為了我們自身的代碼結構考慮,所以我們不應該出現過于復雜的選擇器。

CSS 偽元素

一共分為 4

  • ::before
  • ::after
  • ::first-line
  • ::first-letter

::before ::after 是在元素的內容的前和后,插入一個偽元素。一旦應用了 before after 的屬性,declaration(聲明)里面就可以寫一個叫做content 的屬性(一般元素是沒有辦法寫 content 的屬性的)。content 的屬性就像一個真正的 DOM 元素一樣,可以去生成盒,可以參與后續的排版和渲染了。所以我們可以給他聲明borderbackground等這樣的屬性。

可以理解為:偽元素向界面上添加了一個不存在的元素。

::first-line ::first-letter 的機制就不一樣了。這兩個其實原本就存在 content 之中。他們顧名思義就是 選中第一行和選中第一個字母。它們 不是一個不存在的元素,是把一部分的文本括了起來讓我們可以對它進行一些處理。

before after

在我們概念里,我們可以認為帶有 before 偽元素的選擇器,會給他實際選中的元素的內容前面增加了一個元素,我們只需要通過他的 content 屬性為它添加文本內容即可。(這里我們也可以給偽元素賦予content: '' 為空的)所以我們可以任何的給 before after 指定 display 屬性,和不同元素一樣比較自由的。

我們在實現一些組建的時候,也會常常使用這種不污染 DOM 樹,但是能實際創造視覺效果的方式來給頁面添加一些修飾性的內容。

<div>
  <::before/>
  content content content content
  content content content content
  content content content content
  content content content content
  <::after/>
</div>

first-letter first-line

first-letter 相當于我們有一個元素把內容里面的第一個字母給括了起來。這個first-letter 我們是可以任意聲明各種不同的屬性的,但是我們是無法改變它的 content 的。我們應該都看到過報紙上的第一個字母會比較大,然后會游離出來的效果,這個在 CSS 里面我們就可以用::first-letter的偽元素選擇器了。使用這個來實現相比用 JavaScript 來實現就會更加穩定和代碼更加優雅一些。

<div>
  <::first-letter>c</::first-letter>ontent content content content
  content content content content
  content content content content
  content content content content
</div>

first-line 是針對排版之后的line,其實跟我們源碼里面的first line 沒有任何的關系的。假如說我們的瀏覽器提供的渲染的寬度不同,first-line 在兩個環境里面它最終括住的元素數量就不一樣多了。所以我們用這個選擇器的時候需要去根據需求的情況使用,很有可能在我們開發機器上和用戶的機器上渲染出來的效果是不一樣的!

主站蜘蛛池模板: 久久久久女人精品毛片九一 | 亚洲欧美日韩精品久久 | 久久69国产精品久久69软件 | 日韩一区二区高清 | 最新av免费| 久久久久亚洲精品无码蜜桃 | 91成人看片 | 椎名空在线播放 | 国产麻豆一区二区三区在线观看 | 成人做爰www网站视频下载 | 亚洲区一区二区 | 日本不卡二区 | 狠狠色丁香婷婷综合久久来来去 | 一本色道久久99一综合 | 亚洲 欧美 日本 国产 高清 | 精品人妻潮喷久久久又裸又黄 | 精品久久久无码人妻字幂 | 久久久久久免费精品 | 无码精品人妻一区二区三区老牛 | 国产成人乱色视频网站 | 亚洲黄色短视频 | 日本三级黄在线观看 | 97免费在线视频 | 国产精品视频六区 | 无码av免费一区二区三区试看 | 日本久久久www成人免费毛片丨 | 午夜免费国产 | 欧美肥婆性猛交xxxx | 好逼天天操 | 伊人网伊人网 | 少妇放荡的呻吟干柴烈火免费视频 | 国产免费不卡av | 尤物视频在线 | 日本久久久久久科技有限公司 | 欧美中字 | 乱码视频午夜间在线观看 | 亚洲精品国产品国语原创 | 91宅男噜噜噜66在线观看 | jizz一区二区三区 | 恋夜欧美全部免费视频 | 4hu新地址 | 麻豆国产原创中文av网站 | 少妇高潮无套无遮挡内谢小说 | 国产在线观看无码不卡 | 天天躁天天操 | 亚洲啪啪综合av一区 | 日本熟妇美熟bbw | 国产精品国产成人国产三级 | 国产日产欧洲无码视频无遮挡 | 欧美区国产区 | 天天干天天插 | 人妻精品无码一区二区三区 | 欧洲女人性开放免费网站 | 三级黄艳床上祼体式看 | 国产精品热 | 欧牲交a欧美牲交aⅴ | 色妞在线 | 天天拍夜夜操 | 草草浮力地址线路①屁屁影院 | 亚洲狠狠做深爱婷婷影院 | 强壮翁弄性生交xxx 激情五月综合网 | 丁香婷婷成人 | 欧美日本另类 | 69堂成人精品免费视频 | 夜夜爆操| 天天做夜夜爱 | 国产精品久久久久久久久久久久人四虎 | 国产精品高潮久久久久 | 人妻精品久久久久中文字幕69 | 日产乱码一二三区别免费麻豆 | 青青草无码精品伊人久久7 黄色在线小视频 | 麻豆成人精品国产免费 | 午夜精品久久久久久久久日韩欧美 | 久久盗摄 | 在线综合亚洲欧美日韩 | 樱花草在线社区www日本影院 | 天天操夜夜b | 真实国产精品视频400部 | 国产视频黄色 | 亚洲中文字幕精品久久 | 亚洲精品久久久一区二区三区 | 特级做a爰片毛片免费看无码 | a狠狠久久蜜臀婷色中文网 天天干天天射天天舔 | 亚洲精品无码乱码成人 | 最新在线精品国产福利 | 国产人妖cd在线看网站 | 玖玖玖在线观看 | 国产成人午夜精品影院 | jdav精品视频在线观看 | 深夜福利视频在线观看 | 亚洲日韩色欲色欲com | 天天av天天 | 日韩精品少妇无码受不了 | 97久久超碰国产精品2021 | 亚洲国产成人精品综合av | 日韩人妻无码免费视频一区二区三区 | 无码专区 丝袜美腿 制服师生 | 夫妻淫语绿帽对白 | 麻豆视传媒精品av在线 |