主頁 > 企業開發 > CSS實作根據子元素數量應用不同樣式

CSS實作根據子元素數量應用不同樣式

2023-06-28 09:57:34 企業開發

在前端的頁面布局中經常會出現在子元素個數使用不同的樣式的需求,比如文章串列,在較少內容下單串列現,而在元素內容較多時使用雙串列現,再比如在頁面排版上,可以根據元素內容的多少來修改內容的縮放,位置,顏色等樣式

:has() 選擇器簡介

: has()選擇器中的括號傳遞一個選擇器引數,如果選擇器匹配上了元素就會應用后面的樣式,例如:

<div>
	div
</div>

<div>
	<h1>h1</h1>
	div
</div>
div{
	border:1px solid #000;
	margin:1em;
}

div:has(h1){
	background-color:red;
}

顯示結果

:has() + : nth-child ()

現在我們知道了 :has() 選擇器是用來在匹配成功時使用樣式的,而加上 :nth-child() 就會有根據子元素數量去匹配樣式的效果
例如:

<div >
	<p>p1</p>
</div>

<div >
	<p>p1</p>
	<p>p2</p>
</div>

<div >
	<p>p1</p>
	<p>p2</p>
	<p>p3</p>
</div>
.container{
	border:1px solid #000;
	margin:1em;
}

/* default */
.container {
	background-color:#ddd;
}
/* 包含2個p時 */
.container:has(> p:nth-child(2)){
	background-color:#aaa;
}
/* 包含3個p時 */
.container:has(> p:nth-child(3)){
	background-color:red;
}

顯示效果:
image.png

其他使用示例

超過一定數量,某子元素應用樣式

  <div >
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
  </div>
  
   <div >
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
  </div>

  <style>
    .container{
      display: flex;
      align-items: center;;
      gap: 1em;
      padding: 1em;
      height: 200px;
    }

    .container > div {
      height: 80%;
      background-color: #ddd;
      display: flex;
      align-items: center;
      justify-content: center;
      flex:auto;
    }

    .container:has( > div:nth-child(5)) > div:nth-child(3){
      background-color:aqua;
      flex:1.2;
      height: 100%;
    }
  </style>

效果:
只有在 5 個及以上子元素的情況下有,某子元素有特定樣式(比如輪播圖場景)

image.png

根據子元素數量文本分欄

<div >
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
</div>

<div >
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
	<p>Occaecat minim eu sint. Quis exercitation anim ipsum Lorem veniam sint. Proident ea irure id sit eu eu in. Cillum incididunt nisi nisi velit non cupidatat sint veniam minim voluptate voluptate exercitation velit tempor aliquip. Nisi exercitation ullamco aute ea laborum incididunt deserunt minim proident dolor tempor proident voluptate ipsum sit. Reprehenderit mollit exercitation amet cillum et irure est laboris esse excepteur voluptate aute. In in mollit qui aliqua culpa aliquip fugiat nulla occaecat magna id veniam quis.</p>
</div>

<style>
.container {
	border: 1px solid #000;
	margin: 1em;
	columns: 1;
}

/* 包含3個p時 */
.container:has(> p:nth-child(3)) {
	columns: 2;
}
</style>

顯示效果:
image.png

結尾

使用 :has() + :nth-child() 可以在前端頁面中更好的去做頁面布局的自適應,也在內容不足的情況下提供了一種簡單實用的容錯方法,

image.png
而在兼容性上除 Firefox 瀏覽器,其他的瀏覽器均有較好的支持,

個人博客: www.iamsee.top

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/556153.html

標籤:其他

上一篇:618技術揭秘:探究競速榜頁面核心前端技術

下一篇:返回列表

標籤雲
其他(161753) Python(38255) JavaScript(25515) Java(18266) C(15238) 區塊鏈(8273) C#(7972) AI(7469) 爪哇(7425) MySQL(7270) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4607) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2437) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1976) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • CSS實作根據子元素數量應用不同樣式

    theme: condensed-night-purple highlight: atelier-cave-light 在前端的頁面布局中經常會出現在子元素個數使用不同的樣式的需求,比如文章串列,在較少內容下單串列現,而在元素內容較多時使用雙串列現。再比如在頁面排版上,可以根據元素內容的多少來修改內 ......

    uj5u.com 2023-06-28 09:57:34 more
  • 618技術揭秘:探究競速榜頁面核心前端技術

    本文將探究京東競速榜H5頁面的核心前端技術,包括影片、樣式配置化、皮膚切換、海報技術、除錯技巧等方面,希望能夠為廣大前端開發者提供一些有用的參考和思路。 ......

    uj5u.com 2023-06-28 09:57:04 more
  • CSS實作根據子元素數量應用不同樣式

    theme: condensed-night-purple highlight: atelier-cave-light 在前端的頁面布局中經常會出現在子元素個數使用不同的樣式的需求,比如文章串列,在較少內容下單串列現,而在元素內容較多時使用雙串列現。再比如在頁面排版上,可以根據元素內容的多少來修改內 ......

    uj5u.com 2023-06-28 09:56:39 more
  • 前端Vue自定義加載中loading加載結束end組件 可用于分頁展示 頁

    #### 前端Vue自定義加載中loading加載結束end組件 可用于分頁展示 頁面加載請求, 請訪問uni-app插件市場地址:https://ext.dcloud.net.cn/plugin?id=13219 #### 效果圖如下: ![](https://p3-juejin.byteimg. ......

    uj5u.com 2023-06-27 10:04:55 more
  • 前端Vue自定義驗證碼密碼登錄切換tabs選項卡標簽欄標題欄 驗證碼

    #### 前端Vue自定義驗證碼密碼登錄切換tabs選項卡標簽欄標題欄 驗證碼登錄模版 密碼登錄模版, 請訪問uni-app插件市場地址:https://ext.dcloud.net.cn/plugin?id=13221 #### 效果圖如下: #### ![](https://p3-juejin. ......

    uj5u.com 2023-06-27 10:04:49 more
  • 前端Vue自定義發送短信驗證碼彈框popup 實作剩余秒數計數 重發短

    前端Vue自定義發送短信驗證碼彈框popup 實作剩余秒數計數 重發短信驗證碼, 請訪問uni-app插件市場地址:https://ext.dcloud.net.cn/plugin?id=13207 效果圖如下: ![](https://p3-juejin.byteimg.com/tos-cn-i- ......

    uj5u.com 2023-06-27 10:04:45 more
  • 前端Vue自定義驗證碼密碼登錄切換tabs選項卡標簽欄標題欄 驗證碼

    #### 前端Vue自定義驗證碼密碼登錄切換tabs選項卡標簽欄標題欄 驗證碼登錄模版 密碼登錄模版, 請訪問uni-app插件市場地址:https://ext.dcloud.net.cn/plugin?id=13221 #### 效果圖如下: #### ![](https://p3-juejin. ......

    uj5u.com 2023-06-27 10:04:15 more
  • 驅動開發:內核讀寫記憶體多級偏移

    讓我們繼續在`《內核讀寫記憶體浮點數》`的基礎之上做一個簡單的延申,如何實作多級偏移讀寫,其實很簡單,讀寫函式無需改變,只是在讀寫之前提前做好計算作業,以此來得到一個記憶體偏移值,并通過呼叫記憶體寫入原函式實作寫出資料的目的。以讀取偏移記憶體為例,如下代碼同樣來源于本人的`LyMemory`讀寫驅動專案,其... ......

    uj5u.com 2023-06-27 09:58:39 more
  • 驅動開發:內核讀寫記憶體多級偏移

    讓我們繼續在`《內核讀寫記憶體浮點數》`的基礎之上做一個簡單的延申,如何實作多級偏移讀寫,其實很簡單,讀寫函式無需改變,只是在讀寫之前提前做好計算作業,以此來得到一個記憶體偏移值,并通過呼叫記憶體寫入原函式實作寫出資料的目的。以讀取偏移記憶體為例,如下代碼同樣來源于本人的`LyMemory`讀寫驅動專案,其... ......

    uj5u.com 2023-06-27 09:56:17 more
  • uniapp-chatgpt跨端仿ChatGPT實體|uniapp+vue3+pinia多端聊天模

    基于uniapp+vite4+pinia跨多端實作chatgpt會話模板Uniapp-ChatGPT。 uni-chatgpt 使用uni-app+vite4+vue3+pinia+uview-plus等技術構建多端仿制ChatGPT手機端APP會話應用模板。支持編譯到h5+小程式+APP端,支持渲 ......

    uj5u.com 2023-06-27 08:32:33 more