整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          CSS 選擇器總結

          CSS 選擇器總結

          SS 是用于網頁設計可用的最強大的工具之一。使用它我們可以在幾分鐘內改變一個網站的界面,而不用改變頁面的標簽。

          好一段時間不用 CSS ,有一些基礎知識的記憶有點模糊了,今天再做一次總結記錄,方便日后回顧復習。

          選擇器分類

          在 CSS 中,選擇器可分為以下幾類:

          • 基本選擇器(通配選擇器、元素選擇器、類選擇器、ID 選擇器、群組選擇器)
          • 層次選擇器
          • 屬性選擇器
          • 偽類選擇器
          • 偽元素

          基本選擇器比較好記,這里就不浪費篇幅,主要是記錄一下后三、幾種選擇器。

          層次選擇器

          選擇器

          類型

          功能描述

          E F

          后代選擇器(包含選擇器)

          選擇匹配的F元素,且匹配的F元素被包含在匹配的E元素內

          E>F

          子元素選擇器

          選擇匹配的F元素,且匹配的F元素所匹配的E元素的子元素

          E+F

          相鄰兄弟選擇器

          選擇匹配的F元素,且匹配的F元素緊位于匹配的E元素的后面

          E~F

          通用選擇器

          選擇匹配的F元素,且位于匹配的E元素后的所有匹配的F元素

          • 在后代選擇器中,規則左邊的選擇器一端包括兩個或多個用空格分隔的選擇器。選擇器之間的空格是一種結合符(combinator)。每個空格結合符可以解釋為“... 在 ... 找到”、“... 作為 ... 的一部分”、“... 作為 ... 的后代”,但是要求必須從右向左讀選擇器。
          • 如果不希望選擇任意的后代元素,而是希望縮小范圍,只選擇某個元素的直接子元素,請使用子元素選擇器(Child selector)。
          • 如果需要選擇緊接在另一個元素后的元素,而且二者有相同的父元素,可以使用相鄰兄弟選擇器(Adjacent sibling selector)。

          屬性選擇器

          選擇器

          功能描述

          [attribute]

          用于選取帶有指定屬性的元素。

          [attribute=value]

          用于選取帶有指定屬性和值的元素。

          [attribute~=value]

          用于選取屬性值中包含指定詞匯的元素。

          [attribute|=value]

          用于選取帶有以指定值開頭的屬性值的元素,該值必須是整個單詞。

          [attribute^=value]

          匹配屬性值以指定值開頭的每個元素。

          [attribute$=value]

          匹配屬性值以指定值結尾的每個元素。

          [attribute*=value]

          匹配屬性值中包含指定值的每個元素。

          如果希望選擇有某個屬性的元素,而不論屬性值是什么,可以使用簡單屬性選擇器:

          a[href] {}
          

          還可以根據多個屬性進行選擇,只需將屬性選擇器鏈接在一起即可:

          a[href][title] {}
          

          除了選擇擁有某些屬性的元素,還可以進一步縮小選擇范圍,只選擇有特定屬性值的元素:

          a[href='www.abc.com'] {}
          

          也可以把多個屬性-值選擇器鏈接在一起來選擇一個文檔:

          a[href="www.abc.com"][title="abc"] {}
          

          偽類選擇器

          動態偽類選擇器

          選擇器

          類型

          功能描述

          E:link

          鏈接偽類選擇器

          選擇匹配的E元素,而且匹配元素被定義了超鏈接并未被訪問過。常用于鏈接錨點上

          E:visited

          鏈接偽類選擇器

          選擇匹配的E元素,而且匹配元素被定義了超鏈接并已被訪問過。常用于鏈接錨點上

          E:active

          用戶行為選擇器

          選擇匹配的E元素,且匹配元素被激活。常用于鏈接錨點和按鈕上

          E:hover

          用戶行為選擇器

          選擇匹配的E元素,且用戶鼠標停留在元素E上。

          E:focus

          用戶行為選擇器

          選擇匹配的E元素,而且匹配元素獲取焦點

          目標偽類選擇器

          選擇器

          功能描述

          E:target

          選擇匹配E的所有元素,且匹配元素被相關URL指向

          UI元素狀態偽類選擇器

          選擇器

          類型

          功能描述

          E:checked

          選中狀態偽類選擇器

          匹配選中的復選按鈕或者單選按鈕表單元素

          E:enabled

          啟用狀態偽類選擇器

          匹配所有啟用的表單元素

          E:disabled

          不可用狀態偽類選擇器

          匹配所有禁用的表單元素

          結構偽類選擇器

          選擇器

          功能描述

          E:first-child

          作為父元素的第一個子元素的元素E。與E:nth-child(1)等同

          E:last-child

          作為父元素的最后一個子元素的元素E。與E:nth-last-child(1)等同

          E:root

          選擇匹配元素E所在文檔的根元素。在HTML文檔中,根元素始終是html,此時該選擇器與html類型選擇器匹配的內容相同

          E F:nth-child(n)

          選擇父元素E的第n個子元素F。其中n可以是整數(1,2,3)、關鍵字(even,odd)、可以是公式(2n+1),而且n值起始值為1,而不是0.

          E F:nth-last-child(n)

          選擇父元素E的倒數第n個子元素F。此選擇器與E:nth-child(n)選擇器計算順序剛好相反,但使用方法都是一樣的,其中:nth-last-child(1)始終匹配最后一個元素,與last-child等同

          E:nth-of-type(n)

          選擇父元素內具有指定類型的第n個E元素

          E:nth-last-of-type(n)

          選擇父元素內具有指定類型的倒數第n個E元素

          E:first-of-type

          選擇父元素內具有指定類型的第一個E元素,與E:nth-of-type(1)等同

          E:last-of-type

          選擇父元素內具有指定類型的最后一個E元素,與E:nth-last-of-type(1)等同

          E:only-child

          選擇父元素只包含一個子元素,且該子元素匹配E元素

          E:only-of-type

          選擇父元素只包含一個同類型子元素,且該子元素匹配E元素

          E:empty

          選擇沒有子元素的元素,而且該元素也不包含任何文本節點

          否定偽類選擇器

          選擇器

          功能描述

          E:not(F)

          匹配所有除元素F外的E元素

          總結

          CSS 可以說是前端的基本技能,希望我們都能夠通過 CSS 為自己繪制色彩繽紛的前端生涯!

          ~

          ~

          ~ 本文完

          學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!

          大家好!我是〖編程三昧〗的作者 隱逸王,我的公眾號是『編程三昧』,歡迎關注,希望大家多多指教!

          知識與技能并重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!

          章目錄

          一 bootstrap 時間日期日歷控件datetimepicker

          應用

          涉及的樣式

          圖片樣式展示

          pc

          手機

          屬性及使用示例

          可用屬性列表

          示例1:2017-03-30 上午 09:50

          示例2:2017-03-30

          示例3:僅選擇時間

          2.3 weekStart 一周從那一天開始

          2.4 startDate 開始時間

          2.5 endDate 結束時間

          2.6 daysOfWeekDisabled 一周禁用的日期

          2.7 autoclose 是否自動關閉日期選擇器

          2.8 startView 日期時間選擇器打開之后首先顯示的視圖。

          2.9 minView 日期時間選擇器所能提供的最精確的時間選擇視圖

          2.10 maxView 日期選擇器最高能展示的范圍視圖

          2.11 todayBtn 是否顯示'today'按鈕

          2.12 todayHighlight 當天日期高亮

          2.13 keyboardNavigation 方向鍵改變日期

          2.14 language 語言

          2.15 forceParse 強制解析

          2.16 minuteStep 步進值

          2.17 pickerPosition 選擇框的位置

          2.18 showMeridian 是否顯示上午/下午

          2.19 initialDate 初始化日期時間

          3.1綁定輸入框,并設置format選項

          3.2作為組件使用:

          3.3時間范圍選擇聯動

          具體屬性展示

          一 bootstrap 時間日期日歷控件datetimepicker

          應用

          手機

          pc

          涉及的樣式

          <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

          <link href="https://cdn.bootcss.com/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" rel="stylesheet">


          <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>

          <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

          <script src="static/js/moment-with-locales.js"></script>

          <script src="https://cdn.bootcss.com/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>

          1

          2

          3

          4

          5

          6

          7

          圖片樣式展示

          pc

          <div class="col-sm-4">

          <div class="input-group">

          <span class="input-group-addon">開始日期</span>

          <a class='input-group date' id='datetimepicker3'>

          <input type='text' class="form-control" id="startDate" readonly/>

          <span class="input-group-addon">

          <span class="glyphicon glyphicon-calendar"></span>

          </span>

          </a>

          <span class="input-group-addon">~</span>

          <span class="input-group-addon">結束日期</span>

          <a class='input-group date' id='datetimepicker4'>

          <input type='text' class="form-control" id="endDate" readonly/>

          <span class="input-group-addon">

          <span class="glyphicon glyphicon-calendar"></span>

          </span>

          </a>


          </div>

          </div>


          <div class="form-group col-lg-6">

          <div class="input-group">

          <span class="input-group-addon">活動結束日期</span>

          <a class='input-group date' id='datetimepicker2'>

          <input type='text' class="form-control" id="activityEnd" name="activityEnd"/>

          <span class="input-group-addon">

          <span class="glyphicon glyphicon-calendar"></span>

          </span>

          <span class="input-group-addon" style="color:#F00">*</span>

          </a>

          </div>

          </div>


          手機

          <div class="form-group">

          <div class="input-group date form_date" id="datepicker" data-date="" data-date-format="dd MM yyyy" data-link-field="dtp_input2" data-link-format="yyyy-mm-dd" style="width:92%;">

          <input class="form-control" size="16" type="text" value="${initialDate}" name="PARAM9" readonly="readonly" id="PARAM9">

          <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>

          </div>

          <input type="hidden" id="dtp_input2" value="" />

          </div>

          1

          2

          3

          4

          5

          6

          7

          屬性及使用示例

          <input type="text" readonly class="date" data-link-field="date" />

          <input type="hidden" id="date" />

          $('.date').datetimepicker();

          1

          2

          3

          選中的日期會被存放在id為date的input里。

          //設置日期時間控件

          $('#datetimepicker1').datetimepicker({

          language: 'zh-CN',//顯示中文

          format: 'yyyy-mm-dd hh:ii:ss',//顯示格式

          minView: 0,//設置只顯示到月份

          initialDate: new Date(),

          autoclose: true,//選中自動關閉

          todayBtn: true,//顯示今日按鈕

          locale: moment.locale('zh-cn')

          });

          要:在本文中,將重點關注網頁的初始渲染,即它從解析 HTML 開始。 我將探索可能導致高渲染時間的問題,以及如何解決它們。

          本文分享自華為云社區《頁面首屏渲染性能指南-云社區-華為云》,作者:Ocean2022。

          我們知道渲染頁面是一個將服務器的響應內容翻譯成圖片的過程。但是,如果你頁面的渲染性能比較糟糕的話,可能會帶來相對較高的跳出率。

          在本文中,我將重點關注網頁的初始渲染,即它從解析 HTML 開始。 我將探索可能導致高渲染時間的問題以及如何解決它們。

          關鍵渲染路徑(CRP)

          關鍵渲染路徑 (CRP) 是瀏覽器將代碼轉換為屏幕上可顯示像素的過程。 它有幾個階段,其中一些可以并行執行以節省時間,但有些部分必須依次完成。 如下圖所示:

          首先,一旦瀏覽器得到響應,它就會開始解析它。 當它遇到依賴項時,它會嘗試下載它。 如果它是一個樣式表文件,瀏覽器必須在渲染頁面之前完全解析它,這就是為什么 CSS 會阻塞渲染的原因。

          如果是腳本,瀏覽器必須:停止解析,下載腳本,然后運行。 只有在那之后它才能繼續解析,因為 JavaScript 程序可以改變網頁的內容(尤其是 HTML)。 這就是為什么 JS 會阻塞解析的原因。

          完成所有解析后,瀏覽器將構建文檔對象模型 (DOM) 和級聯樣式表對象模型 (CSSOM)。 將它們組合在一起得到渲染樹。 頁面的不顯示部分不會進入渲染樹,因為它只包含繪制頁面所需的數據。

          倒數第二步是將渲染樹進行布局, 這個階段也稱為回流:就是計算每個渲染樹節點的每個位置及其大小的地方。

          最后一步是繪制。 它會根據瀏覽器在前一階段計算得到的數據對像素進行著色。

          優化相關結論

          因此,根據這一過程,我們在優化性能方面,得出了一些結論。如果你要提升頁面初始化渲染的性能,你需要:

          • 減少傳輸的數據量
          • 減少瀏覽器必須下載的資源數量(尤其是阻塞的資源)
          • 減小 CRP 的長度

          同時,我們會根據下面 3 個指標來衡量優化的效率:

          • FP(First Paint)
          • FCP(First Contentful Paint)
          • FMP(First Meaningful Paint)

          除了渲染時間之外,還有其他一些因素也需要考慮。例如,你的頁面使用了多少阻塞資源以及下載它們需要多長時間

          性能優化策略

          鑒于我們在上面得出的結論,我們得出網站性能優化有三種主要策略:

          1. 盡量減少通過網絡傳輸的數據量;
          2. 減少通過網絡傳輸的資源總數;
          3. 縮短關鍵渲染路徑;

          1. 減少要傳輸的數據量

          首先,移除所有未使用的部分,例如 JavaScript 中無法訪問的函數、帶有從不匹配任何元素的選擇器的樣式以及被 CSS 永遠隱藏的 HTML 標簽。 其次,刪除所有重復項。

          然后,我建議建立一個自動壓縮過程。 例如,它應該從你的后端服務中刪除所有注釋(但不是源代碼)以及每個不包含附加信息的字符(例如 JS 中的空白字符)。

          完成后,我們剩下的可以是文本字符串。 這意味著我們可以安全地應用諸如 GZIP(大多數瀏覽器都理解)之類的壓縮算法。

          最后,還有緩存。 瀏覽器第一次呈現頁面時它不會有幫助,但它會在以后的訪問中節省很多。 但是,記住兩點至關重要:

          • 如果你使用 CDN,請確保支持緩存并在正確設置。
          • 與其等待資源的到期,不如 將文件的“指紋”嵌入到其 URL 中,以使本地緩存無效。

          當然,應該為每個資源定義緩存策略。 有些可能很少改變或根本不會改變,有的則是變化的很快,還有些文件包含敏感的信息(可以使用 “private” 防止 CDN 緩存私有數據)

          2. 減少關鍵資源的總數

          “關鍵”僅指網頁正確呈現所需的資源。 因此,我們可以直接跳過所有流程中沒有涉及的樣式以及腳本文件。

          樣式

          為了告訴瀏覽器不需要特定的 CSS 文件,我們應該為所有引用樣式表的鏈接設置媒體屬性。 使用這種方法,瀏覽器將只根據需要處理與當前媒體(設備類型、屏幕尺寸)匹配的資源同時降低所有其他樣式表的優先級。 例如,如果你將 media=“print” 屬性添加到引用樣式以打印頁面的樣式標記,則這些樣式不會在不打印媒體時干擾你的關鍵渲染路徑

          為了進一步改進該過程,你還可以將一些樣式內聯這可以為我們節省了至少一次到服務器的往返行程

          腳本

          如上所述,腳本會阻塞解析,因為它們可以改變 DOM 和 CSSOM。 為了避免這一點,所有腳本標簽都必須用屬性標記——異步或延遲。

          標有 async 的腳本不會阻塞 DOM 構建或 CSSOM,因為它們可以在 CSSOM 構建之前執行。 但請記住,內聯腳本無論如何都會阻止 CSSOM,除非你將它們放在 CSS 之上。

          相比之下,標有 defer 的腳本將在頁面加載結束時進行執行

          換句話說,使用 defer,腳本直到頁面加載事件被觸發后才會執行,而 async 讓腳本在文檔被解析時就會在后臺運行。

          3.縮短關鍵渲染路徑長度

          最后,應將 CRP 長度縮短到可能的最小值。

          作為樣式標簽屬性的媒體查詢將減少必須下載的資源總數。 script 標簽屬性 defer 和 async 將防止相應的腳本阻塞解析。

          使用 GZIP 壓縮、壓縮和歸檔資源將減少傳輸數據的大小(從而也減少數據傳輸時間)。

          內聯一些樣式和腳本也可以減少瀏覽器和服務器之間的往返次數。

          按照最新的最佳性能實踐理念,一個網站應該做的最快的第一件事就是展示 ATF 內容。 ATF 代表首屏這是立即可見的區域,無需滾動。 因此,最好以首先加載所需樣式和腳本的方式重新排列與渲染相關的所有內容,而其他所有內容都停止(既不解析也不渲染)。

          結尾

          總而言之,網站性能優化包含了網站響應的各個方面,例如緩存、設置 CDN、重構、資源優化等,但是所有這些都可以逐步完成。 作為 Web 開發人員,你可以將本文作為參考,并始終記住在實驗之前和之后測量性能。

          瀏覽器開發人員盡最大努力優化你訪問的每個頁面的網站性能,這就是瀏覽器通常實現所謂的“預加載器”的原因。 這部分程序會在你以 HTML 格式請求的資源之前進行掃描,以便一次發出多個請求并讓它們并行運行。 這就是為什么在 HTML(逐行)以及腳本標簽中保持樣式標簽彼此靠近的原因。

          此外,嘗試批量更新 HTML 以避免多個布局事件這些事件不僅由 DOM 或 CSSOM 中的更改觸發,而且在設備方向更改和窗口大小調整時也會觸發。

          點擊下方,第一時間了解華為云新鮮技術~

          華為云博客_大數據博客_AI博客_云計算博客_開發者中心-華為云


          主站蜘蛛池模板: 亚洲AV无码国产一区二区三区| 国产一区二区精品| 国产一区二区在线| 美女视频黄a视频全免费网站一区| 国产一国产一区秋霞在线观看| 国产乱码一区二区三区爽爽爽 | 日本一区二区三区精品国产| 精品一区二区三区免费 | 日韩人妻一区二区三区免费| 日韩精品一区在线| 久久无码人妻一区二区三区午夜 | 日本一区二区三区精品中文字幕| 精品无人区一区二区三区在线| 福利电影一区二区| 国产一区二区三区在线观看影院| 无码人妻精品一区二区蜜桃 | 亚洲成在人天堂一区二区| 不卡一区二区在线| 手机看片福利一区二区三区| 中文字幕无线码一区| 中文字幕在线播放一区| 中文字幕不卡一区| 亚洲一区二区三区影院| 国产在线视频一区二区三区98 | 亚洲国产成人一区二区三区| 久久99精品国产一区二区三区| 亚洲乱码国产一区三区| 国产丝袜美女一区二区三区| 亚洲av午夜福利精品一区| 亚洲国产视频一区| 无码一区二区三区在线| 日本高清天码一区在线播放| 免费视频精品一区二区| 国产一区二区三区精品视频 | 韩国一区二区视频| 无码精品不卡一区二区三区| 视频一区视频二区在线观看| 大屁股熟女一区二区三区| 日韩AV无码久久一区二区| 亚洲一区AV无码少妇电影| 国产一区二区三区国产精品|