日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

如何正確使用:Has和:Nth-Last-Child

來源: 責編: 時間:2023-08-05 11:44:55 4950觀看
導讀我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會根據子元素的數量而改變。這在CSS中已經存在

我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會根據子元素的數量而改變。Q7S28資訊網——每日最新資訊28at.com

這在CSS中已經存在很多年了,但現在通過CSS :has,它變得更加強大。我們可以把nth-last-child選擇器和:has結合起來,以達到神奇的效果!你沒聽錯。Q7S28資訊網——每日最新資訊28at.com

在這篇文章中,我將強調幾個例子,說明我們可以將一個CSS選擇器和:has結合起來,形成一個有條件的組件/布局狀態。Q7S28資訊網——每日最新資訊28at.com

總覽

  • 介紹:nth-last-child
  • CSS中的數量查詢限制
  • 不可能根據元素的數量來設計父元素的樣式
  • 讓它們在不同的視口尺寸上奏效
  • 為了控制間距要付出更多
  • 使用案例 使用案例
  • 基于子項數量而變化的Grid
  • 動態標題布局
  • 動態新聞部分
  • 模態框操作
  • 用戶頭像
  • 時間軸
  • logo網格
  • 總結

介紹:nth-last-child

這篇文章的主要要素之一是:nth-last-child偽類。我們可以使用該選擇器來模擬計算子元素。Q7S28資訊網——每日最新資訊28at.com

來看看它是如何工作的。我將盡可能用直白的話來解釋。Q7S28資訊網——每日最新資訊28at.com

請看下圖:Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

我們有一個五個卡片的列表。我們將用這個例子來證明我們可以用:nth-last-child做什么。Q7S28資訊網——每日最新資訊28at.com

在下列CSS中,n + 3意味著:Q7S28資訊網——每日最新資訊28at.com

li:nth-last-child(n + 3) {    /* styles */}

從末端選擇前三項,從第三項開始計算。Q7S28資訊網——每日最新資訊28at.com

讓我們仔細看看。首先,我們需要從末端計算三個項。這樣一來,第三項實際上就是我們從末端開始計算的第一項。Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

我們從第三項算起直到最后,這里是被選中的項:Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

CSS中的數量查詢限制

我們可以使用:nth-last-child作為CSS的數量查詢。Q7S28資訊網——每日最新資訊28at.com

請看下圖:Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

我們有一個信息清單,當我們有5個或更多的項時,它的顯示方式會不同。Q7S28資訊網——每日最新資訊28at.com

<ul>   <li></li>   <li></li>   <li></li>   <!-- more items --></ul>
li {    /* default styles */}/* If the list has 5 or more items */li:nth-last-child(n + 5),li:nth-last-child(n + 5) ~ li {  width: 50%;  display: inline-block;  border-bottom: 0;}

雖然這很有效,但在某些方面仍然有點局限性。Q7S28資訊網——每日最新資訊28at.com

不可能根據元素的數量來設計父元素的樣式

想象一下,當有5個或更多的項時,我們需要為每個<li>添加display: flex。我們不能用 :nth-last-child 偽類選擇器來做這個。Q7S28資訊網——每日最新資訊28at.com

原因是,添加display: flex將迫使每個項留在自己的行中,這與要實現的設計不一致。Q7S28資訊網——每日最新資訊28at.com

li:nth-last-child(n + 5),li:nth-last-child(n + 5) ~ li {  width: 50%;  display: flex;  flex-direciton: column;}

圖片圖片Q7S28資訊網——每日最新資訊28at.com

我們可以用display: inline-flex來解決這個問題,但對我來說,這仍然不是最佳解決方案。原因是,瀏覽器會考慮到HTML元素之間的間距,它們應該是這樣的:Q7S28資訊網——每日最新資訊28at.com

<ul>   <li></li><li></li><li></li>   <!-- more items --></ul>

如果我們不這樣做,display: inline-flex的效果將與display: flex相同。解決這個問題的一個方法是將寬度減少1%。Q7S28資訊網——每日最新資訊28at.com

li:nth-last-child(n + 5),li:nth-last-child(n + 5) ~ li {  width: 49%;  display: flex;  flex-direciton: column;}

讓它們在不同的視口尺寸上奏效

如果沒有對父類進行控制的能力,就不能那么直接地對列表的布局進行設計。例如,當容器或視口寬度較小時,我們需要每行顯示1個項。Q7S28資訊網——每日最新資訊28at.com

為了控制間距要付出更多

當有3個或更少的項時,間距是水平的,而當有5個或更多時,間距是垂直的。我們可以通過將頁邊距從水平方向翻轉到垂直方向,或者通過使用CSS gap與Flexbox來手動管理。但是,在這種情況下,我們又不得不使用inline-flex。Q7S28資訊網——每日最新資訊28at.com

CSS :nth-last-child偽類是構建條件性布局的關鍵。通過將它與CSS :has選擇器相結合,我們可以檢查一個父元素是否至少有特定數量的項,并對其進行相應的樣式設計。這種可能性是無窮無盡的!Q7S28資訊網——每日最新資訊28at.com

使用案例

基于子項數量而變化的Grid

圖片圖片Q7S28資訊網——每日最新資訊28at.com

當我們需要基于子項數量而更改gird布局時,這在目前的CSS中是不可能的。在CSS的grid中,我們可以使用minmax()基于可用空間來動態改變grid。Q7S28資訊網——每日最新資訊28at.com

下面是我對CSS網格minmax()的看法:Q7S28資訊網——每日最新資訊28at.com

.list {    display: grid;    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));    gap: 1rem;}

結果看起來是這樣:Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

這一點都不完美。我們沒有太多的控制,因為我們需要調整minmax()中的150px的值。當有4個或更少的項時,它可以很好地工作,而當有5個或更多的項時就會出現問題。Q7S28資訊網——每日最新資訊28at.com

解決辦法是什么?我們可以用CSS :has檢查是否有超過5個項目或更多,并在此基礎上改變minmax()的值。Q7S28資訊網——每日最新資訊28at.com

/* default grid */.list {    --item-size: 200px;    display: grid;    grid-template-columns: repeat(auto-fit, minmax(var(--item-size), 1fr));    gap: 1rem;}/* If the grid has 5+ items, change the --item-size width to 150px */.list:has(li:nth-last-child(n + 5)) {    --item-size: 150px;}

我只是改變了--item-size變量,使代碼更容易閱讀,并避免重復。Q7S28資訊網——每日最新資訊28at.com

動態標題布局

在下圖中,我們有一個標題,當導航項有4個或更多時,應該改變其布局。通過CSS :has和:nth-last-child,我們可以檢測并改變布局。Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

.site-header:has(li:nth-last-child(n + 4)) {    .site-header__wrapper > * {        flex: initial;    }    .site-header__start {        order: 2;    }    .site-header__middle {        order: -1;        text-align: start;    }    .site-header__end {        margin-left: auto;    }}

以上是Sass的代碼。如果用CSS寫,可能看起來有點多。Q7S28資訊網——每日最新資訊28at.com

.site-header:has(li:nth-last-child(n + 4)) .site-header__wrapper > * {    flex: initial;}.site-header:has(li:nth-last-child(n + 4)) .site-header__start {    order: 2;}.site-header:has(li:nth-last-child(n + 4)) .site-header__middle {    order: -1;    text-align: start;}.site-header:has(li:nth-last-child(n + 4)) .site-header__end {    margin-left: auto;}

我們能做得更好嗎?可以。但這還沒有得到很好的支持(目前來說)。我們可以添加一個布爾CSS變量,當標題有4個或更多的項目時,它將被切換,然后使用樣式查詢來改變標題。Q7S28資訊網——每日最新資訊28at.com

.site-header:has(li:nth-last-child(n + 4)) {    --layout-2: true;}

有了這個,當導航項有4個或更多時,我們設置變量--layout-2。Q7S28資訊網——每日最新資訊28at.com

/* This will only works if the --layout-2 CSS variable is set */@container style(--layout-2: true) {  .site-header__wrapper {    > * {      flex: initial;    }  }  .site-header__start {    order: 2;  }  .site-header__middle {    order: -1;    text-align: start;  }  .site-header__end {    margin-left: auto;  }}

動態新聞部分

下面是一個新聞部分的設計,當項目數為3或更多時,它應該改變其布局。Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

通過組合CSS的:has和:nth-last-child,我們可以創建一個切換的CSS變量,它將被一個樣式查詢所檢查。Q7S28資訊網——每日最新資訊28at.com

首先,我將假設默認的卡片樣式是水平的。Q7S28資訊網——每日最新資訊28at.com

<class="layout">    <article class="card"></article>    <article class="card"></article>    <article class="card"></article></div>
.layout {  display: grid;  grid-gap: 1rem;}.card {  display: flex;  gap: 1rem;  align-items: center;}

然后,我需要檢查.card元素的數量。Q7S28資訊網——每日最新資訊28at.com

.layout:has(.card:nth-last-child(n + 4)) {  --layout-4: true;  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));}

現在,我們有一個CSS變量--layout-4,只有當我們有4個或更多的項時才會被切換。我們可以用一個樣式查詢來檢查,并相應地更新.card的樣式。Q7S28資訊網——每日最新資訊28at.com

@container style(--layout-4: true) {    .card {        flex-direction: column;    }    .card__thumb {        flex: 1;                aspect-ratio: 4 / 3;    }}

模態框操作

在一個設計系統中,我們可能需要根據我們有多少個操作來動態地控制模態操作的排列。Q7S28資訊網——每日最新資訊28at.com

請看下圖:Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

比如說,如果只有一個操作,它應該居中。否則,向右對齊它們。Q7S28資訊網——每日最新資訊28at.com

下面是CSS:Q7S28資訊網——每日最新資訊28at.com

.modal__footer {    display: flex;    justify-content: center;    gap: 0.5rem;}/* If there are 2 buttons or more */.modal__footer:has(a:nth-last-child(n + 2)) {    justify-content: flex-end;}

很簡單,對不對。Q7S28資訊網——每日最新資訊28at.com

用戶頭像

在編輯網站上,一篇文章可能由多個作者撰寫。一個常見的模式是,當我們有多個作者時,用負間距堆疊作者的圖像。Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

僅僅通過使用數量查詢,我們就可以最低限度的實現,也就是:Q7S28資訊網——每日最新資訊28at.com

  • 添加負間距(互相堆疊頭像)。
  • 當有多個頭像時,縮小頭像的尺寸。
img:nth-last-child(n+2) ~ img {    border: 2px solid #fff;    margin-left: -0.25rem;    width: 30px;    height: 30px;}

上面的方法可行,但它有局限性。如果我們想對容器本身進行樣式設計呢?那么,這就是CSS :has變得強大的地方。Q7S28資訊網——每日最新資訊28at.com

首先,我們需要檢查并切換CSS變量:Q7S28資訊網——每日最新資訊28at.com

.post-author:has(img:nth-last-child(n + 2)) {    --multiple-avatars: true;}

如果CSS變量為true,就為多個頭像應用下面的樣式:Q7S28資訊網——每日最新資訊28at.com

@container style(--multiple-avatars: true) {    .avatars-list {        display: flex;        background-color: #efefef;        padding: 8px 12px;        border-radius: 50px;    }    img:not(:first-child) {        border: solid 2px #fff;        margin-left: -0.25rem;    }}

時間線

另一個有趣的例子是時間線組件,它的CSS效果很好。Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

在這個例子中,我想讓時間線在有4個或更多項時,從垂直列表切換到交替式。Q7S28資訊網——每日最新資訊28at.com

首先,使用:nth-last-child和:has:Q7S28資訊網——每日最新資訊28at.com

.timeline-wrapper:has(.timeline__item:nth-last-child(n + 4)) {    --alternating: true;}

如果符合上述條件,將采用以下CSS:Q7S28資訊網——每日最新資訊28at.com

@container style(--alternating: true) {    /* Alternating timeline styles. */}

在這里使用樣式查詢的有用之處在于,我們可以在另一個頁面上重復使用這些樣式。它不一定非得是一個有條件的CSS。Q7S28資訊網——每日最新資訊28at.com

我可能會做這樣的事情:Q7S28資訊網——每日最新資訊28at.com

.timeline-wrapper--page-10 {    --alternating: true;}

請不要介意.timeline-wrapper--page-10,這是個故意的隨機類名。這個CSS變量可以被分配到我們想要的任何地方,而且這個CSS開箱即用。Q7S28資訊網——每日最新資訊28at.com

只要寫一次,就能在很多情況下發揮作用。Q7S28資訊網——每日最新資訊28at.com

logo網格

在CSS中,要處理的一個棘手問題是對齊多個標識,并確保它們都看起來不錯。通過條件性CSS,我們可以檢測logo的數量,并將其尺寸縮小一些。Q7S28資訊網——每日最新資訊28at.com

圖片圖片Q7S28資訊網——每日最新資訊28at.com

ul:has(li:nth-last-child(n + 8)) img {    max-width: 160px;    height: 35px;}

總結

這是我所做的有趣的文章之一。結合現代的CSS功能可以讓我們以令人興奮的新方式來構建布局,這篇文章的例子也不例外。Q7S28資訊網——每日最新資訊28at.com

根據項目的數量來改變樣式可能不是一次性的用法,它可以被提取到不同的用例中。通過使用樣式查詢,我們可以只寫一次,并在任何地方重用它們。Q7S28資訊網——每日最新資訊28at.com

  • 本文譯自:https://ishadeed.com/article/conditional-css-has-nth-last-child[1]

參考資料

[1]https://ishadeed.com/article/conditional-css-has-nth-last-child:https://ishadeed.com/article/conditional-css-has-nth-last-childQ7S28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-95-0.html如何正確使用:Has和:Nth-Last-Child

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

下一篇: 一篇聊聊Go錯誤封裝機制

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美日韩亚洲高清| 欧美一区1区三区3区公司| 国产欧美日韩一级| 欧美午夜美女看片| 国产精品久久久久9999高清| 国产精品xxxxx| 国产精品视频一二三| 国产农村妇女毛片精品久久麻豆| 国产午夜精品久久久久久免费视 | 国产精品一区=区| 国产精品视频免费观看www| 欧美日韩精品一区二区天天拍小说| 欧美日韩精品一区二区天天拍小说 | 另类亚洲自拍| 欧美久久久久中文字幕| 国产精品草莓在线免费观看| 国产精品视频免费| 激情综合网址| 亚洲国产精品黑人久久久| 99热免费精品在线观看| 午夜精品久久久久久久99樱桃| 久久国产精品72免费观看| 女主播福利一区| 久久精品国产精品亚洲| 欧美va亚洲va国产综合| 欧美色大人视频| 国产日韩欧美视频| 136国产福利精品导航网址| 亚洲日本理论电影| 亚洲欧美精品在线| 麻豆精品网站| 国产精品久久久久久久久动漫| 国模 一区 二区 三区| 亚洲精品美女91| 亚洲精品你懂的| 欧美一区二区精品| 欧美成人精品1314www| 欧美精品一区在线播放| 国产欧美一区二区三区久久 | 久久久久久伊人| 欧美日韩亚洲激情| 激情一区二区三区| 亚洲视频在线观看视频| 亚洲欧美日韩综合aⅴ视频| 麻豆成人在线| 国产精品美女久久久久av超清| 在线观看国产成人av片| 亚洲一区二区三区777| 久久一区二区三区超碰国产精品| 欧美日韩中字| 亚洲国产欧美不卡在线观看 | 亚洲线精品一区二区三区八戒| 久久久综合精品| 国产精品日韩欧美一区二区三区 | 久久综合久久久| 国产精品网曝门| 最新国产の精品合集bt伙计| 午夜在线不卡| 欧美日一区二区在线观看| 亚洲高清久久| 欧美在线亚洲综合一区| 欧美日韩精品一区二区三区四区| 极品日韩久久| 欧美一级午夜免费电影| 欧美性大战xxxxx久久久| 韩国一区二区三区在线观看| 亚洲永久在线| 欧美日韩一区国产| 亚洲韩国一区二区三区| 久久精品中文字幕免费mv| 欧美日韩国产成人| 亚洲国产精品嫩草影院| 久久久综合视频| 国产欧美一区二区三区久久| 亚洲一区二区久久| 欧美高清视频一区二区| 精品成人a区在线观看| 欧美在线播放一区二区| 国产精品综合| 亚洲欧美日韩国产成人精品影院| 欧美激情久久久| 亚洲国产午夜| 六月婷婷一区| 一区二区亚洲精品国产| 久久久国产视频91| 欧美日韩色综合| 日韩一级片网址| 欧美黄色成人网| 亚洲国内自拍| 免费的成人av| 亚洲国产小视频| 欧美成人免费小视频| 亚洲精品资源| 国产精品久久久久9999| 欧美亚洲一区二区在线观看| 国精产品99永久一区一区| 久久人91精品久久久久久不卡| 亚洲国产欧美一区二区三区久久| 欧美激情在线观看| 亚洲一区三区在线观看| 国产日韩视频| 美女福利精品视频| 一区二区三区 在线观看视频| 国产精品美女主播| 久久久久久久国产| 亚洲精品麻豆| 亚洲图中文字幕| 国产精品中文在线| 久久久久久久网站| 亚洲国产视频一区二区| 欧美日韩国产综合久久| 亚洲欧美国产精品专区久久| 国产一区二区三区高清在线观看 | 欧美一区二区视频在线| 亚洲成人直播| 国产精品高潮呻吟| 久久久久9999亚洲精品| 亚洲三级免费| 国产欧美日韩一区二区三区| 蜜臀a∨国产成人精品| 亚洲视频免费观看| 激情视频一区二区| 欧美日韩一区二区三区在线视频| 韩国视频理论视频久久| 美女黄网久久| 亚洲欧美成人综合| 在线播放视频一区| 欧美偷拍一区二区| 久久久无码精品亚洲日韩按摩| 99国产精品视频免费观看| 国产情人节一区| 欧美精品一区三区| 欧美资源在线| 99亚洲一区二区| 国产自产在线视频一区| 欧美日韩你懂的| 久久久一区二区| 亚洲一区二区在线播放| 亚洲高清av在线| 国产欧美日韩亚洲一区二区三区| 欧美精品日韩综合在线| 久久精品国产99| 亚洲图色在线| 亚洲人成亚洲人成在线观看图片| 国产欧美一区二区三区久久 | 亚洲电影免费观看高清完整版| 国产精品videosex极品| 每日更新成人在线视频| 欧美亚洲综合网| 在线亚洲激情| 亚洲激情小视频| 国产综合第一页| 国产精品久久久久久五月尺| 欧美高清视频在线播放| 久久精品中文字幕一区| 亚洲在线观看视频| 日韩系列欧美系列| 亚洲国产日韩欧美| 狠久久av成人天堂| 国产女精品视频网站免费| 欧美日韩国产高清| 蜜桃av综合| 久久久综合激的五月天| 欧美亚洲一区二区在线| 亚洲社区在线观看| 99re6热在线精品视频播放速度 | 亚洲欧美日韩另类精品一区二区三区| 日韩视频久久| 亚洲激情女人| 18成人免费观看视频| 国产一区二区三区日韩| 国产精品久久久久久久久果冻传媒| 欧美精品啪啪| 欧美大片91| 老司机一区二区三区| 久久久成人精品| 久久激情五月激情| 午夜一区二区三区在线观看| 亚洲网友自拍| 亚洲深夜av| 亚洲视频一区二区免费在线观看| 亚洲精一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 激情六月综合| 免费人成网站在线观看欧美高清 | 欧美日韩精品系列| 欧美日韩免费在线| 欧美片在线观看| 欧美精品一区二区三区在线播放| 欧美ab在线视频| 欧美第一黄网免费网站| 你懂的亚洲视频| 欧美91大片| 欧美成人亚洲成人| 欧美激情1区2区3区| 欧美成年人网站| 欧美成人69av| 欧美交受高潮1| 欧美日本不卡视频| 欧美三级资源在线| 国产精品久久久久999| 国产精品美女在线| 国产精品综合网站| 国产亚洲毛片|