搜尋
首頁web前端css教學案例研究:將尖端的CSS功能結合到'課程導航”組件中

Case Study: Combining Cutting-Edge CSS Features Into a “Course Navigation” Component

本文介紹Jhey Tompkins設計的出色文章導航器,並將其改編成在線課程的“課程導航器”。我們將深入剖析其工作原理,無需JavaScript即可實現流暢的交互體驗。

該組件的主要功能包括:

  • 鏈接所有課程內容;
  • 平滑滾動到錨定的章節標題;
  • 顯示當前章節的閱讀進度;
  • 切換明暗模式;
  • 固定在底部,並支持滾動時折疊。

我們將使用最新的CSS特性實現這些功能,這些特性目前在Chrome瀏覽器中得到最佳支持。

HTML結構

我們使用<details></details>元素創建一個可展開的組件,並將其固定在頁面底部。課程內容包含在<article></article>元素中,章節標題帶有ID用於頁面內錨點鏈接。點擊<summary></summary>元素可切換課程導航,導航內容則包裹在::details-content content偽元素中。導航鏈接到其他章節,並可滾動到當前章節的標題。<summary></summary>元素包含一個標籤(用作切換按鈕)、當前章節名稱、滾動距離和暗模式切換開關。

示例代碼如下:

<details><summary>
    <label></label>
  </summary></details>
<h1 id="Section-A">Section A</h1>
<p>...</p>
<h2 id="Section-B">Section B</h2>
<p>...</p>
<h2 id="Section-C">Section C</h2>
<p>...</p>

定位

使用position: fixedinset屬性將<details></details>元素固定在頁面底部:

 details {
  position: fixed;
  inset: 24px; /* 用作邊距*/
  place-self: end center; /* yx */
}

純CSS暗模式

為了提高長篇內容的可讀性,我們實現CSS暗模式。

HTML結構中,我們使用一個隱藏的複選框<input type="checkbox">,以及一個<i></i>元素作為樣式化的複選框,和一個<label></label>元素作為標籤。所有這些都包裹在<summary></summary>元素中,並使用<div>元素添加間距。<pre class="brush:php;toolbar:false">&lt;details&gt;&lt;summary&gt;&lt;label aria-label=&quot;Dark mode&quot;&gt; &lt;i&gt;&lt;/i&gt; Dark mode &lt;/label&gt; &lt;/summary&gt;&lt;/details&gt;</pre> <p>使用Font Awesome CSS屬性實現圖標切換:</p> <pre class="brush:php;toolbar:false"> /* 從Font Awesome CSS複製*/ i::before { font-style: normal; font-family: &quot;Font Awesome 6 Free&quot;; display: inline-block; width: 1.25em; } /* 選中狀態*/ input[type=checkbox]:checked i::before { content: &quot;\f058&quot;; font-weight: 900; } /* 未選中狀態*/ input[type=checkbox]:not(:checked) i::before { content: &quot;\f111&quot;; font-weight: 400; }</pre> <p>使用<code>:root選擇器和:has偽類實現明暗模式切換:

 /* 暗模式*/
:root:has(input[type=checkbox]:checked) {
  color-scheme: dark;
}

/* 明模式*/
:root:not(:has(input[type=checkbox]:checked)) {
  color-scheme: light;
}

使用light-dark()函數設置顏色:

 color: light-dark(hsl(var(--hs) 90%), hsl(var(--hs) 10%));
background: light-dark(hsl(var(--hs) 10%), hsl(var(--hs) 90%));

顯示滾動進度

使用進度環和文本百分比顯示閱讀進度。

定義自定義屬性--percentage

 @property --percentage {
  syntax: "<integer> ";
  inherits: true;
  initial-value: 0;
}</integer>

使用scroll()動畫函數實現滾動驅動的動畫:

 @keyframes updatePercentage {
  to {
    --percentage: 100;
  }
}

:root {
  animation: updatePercentage;
  animation-timeline: scroll();
  counter-reset: percentage var(--percentage);
}

使用counter()函數顯示百分比:

 #progress-percentage::before {
  content: counter(percentage) "%";
  min-width: 40px;
  display: inline-block;
}

使用conic-gradient()函數創建進度環:

 #progress-pie {
  aspect-ratio: 1;
  background: conic-gradient(hsl(var(--hs) 50%) calc(var(--percentage) * 1%), light-dark(hsl(var(--hs) 90%), hsl(var(--hs) 10%)) 0%);
  border-radius: 50%;
  width: 17px;
}

創建課程導航

重置列表樣式:

 ol {
  padding-left: 0;
  list-style-position: inside;
}

ol ol li::marker {
  color: transparent;
}

使用:has:not偽類淡化非當前章節的列表項:

 details {
  color: light-dark(hsl(var(--hs) 90%), hsl(var(--hs) 10%));
}

ol:has(ol) > li:not(.active) {
  color: light-dark(hsl(var(--hs) 80%), hsl(var(--hs) 20%));
}

a {
  color: inherit;
}

啟用平滑滾動:

 :root {
  scroll-behavior: smooth;
  scroll-padding-top: 20px;
}

<details></details>元素過渡效果

使用interpolate-size: allow-keywordstransition屬性實現平滑展開和折疊:

 :root {
  interpolate-size: allow-keywords;
}

details::details-content {
  overflow-y: clip;
}

/* ... (details:not([open])::details-content 和details[open]::details-content 的樣式代碼) ... */

<summary></summary>元素樣式

添加標籤和圖標:

<details><summary aria-label="Navigate course">
    <i></i>
    Navigate course
  </summary></details>

使用display: flexgap屬性設置佈局:

 /* ... (i::before 的樣式代碼) ... */

summary::-webkit-details-marker {
  display: none;
}

summary {
  cursor: pointer;
}

label {
  cursor: inherit;
}

自動關閉機制(可選的JavaScript)

使用JavaScript實現鼠標離開時自動關閉:

 document.querySelector("details").addEventListener("mouseleave", e => e.target.removeAttribute("open"));

自動設置顏色方案(可選的JavaScript)

使用JavaScript檢測用戶偏好顏色方案並自動設置:

 if (window.matchMedia("prefers-color-scheme: dark").matches) {
  document.querySelector("input[type=checkbox]").checked = true;
}

總結

本文展示瞭如何使用一系列尖端的CSS特性創建一個功能強大的課程導航組件,包括滾動驅動的動畫、 interpolate-size屬性、 light-dark()函數、 conic-gradient()函數以及對::details-content偽元素的樣式設置。感謝Jhey Tompkins的靈感啟發!

以上是案例研究:將尖端的CSS功能結合到'課程導航”組件中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
丟失的CSS技巧cohost.org丟失的CSS技巧cohost.orgApr 25, 2025 am 09:51 AM

在這篇文章中,布萊克·莫里(Blackle Mori)向您展示了一些駭客,同時試圖推動同位HTML支持的極限。如果您敢於使用這些,以免您也被標記為CSS罪犯。

光標的下一個CSS樣式光標的下一個CSS樣式Apr 23, 2025 am 11:04 AM

具有CSS的自定義光標很棒,但是我們可以將JavaScript提升到一個新的水平。使用JavaScript,我們可以在光標狀態之間過渡,將動態文本放置在光標中,應用複雜的動畫並應用過濾器。

世界碰撞:使用樣式查詢的鑰匙幀碰撞檢測世界碰撞:使用樣式查詢的鑰匙幀碰撞檢測Apr 23, 2025 am 10:42 AM

互動CSS動畫和元素相互啟動的元素在2025年似乎更合理。雖然不需要在CSS中實施乒乓球,但CSS的靈活性和力量的增加,可以懷疑Lee&Aver Lee有一天會成為一種

使用CSS背景過濾器進行UI效果使用CSS背景過濾器進行UI效果Apr 23, 2025 am 10:20 AM

有關利用CSS背景濾波器屬性來樣式用戶界面的提示和技巧。您將學習如何在多個元素之間進行背景過濾器,並將它們與其他CSS圖形效果集成在一起以創建精心設計的設計。

微笑嗎?微笑嗎?Apr 23, 2025 am 09:57 AM

好吧,事實證明,SVG的內置動畫功能從未按計劃進行棄用。當然,CSS和JavaScript具有承載負載的能力,但是很高興知道Smil並沒有像以前那樣死在水中

'漂亮”在情人眼中'漂亮”在情人眼中Apr 23, 2025 am 09:40 AM

是的,讓#039;跳上文字包裝:Safari Technology Preview In Pretty Landing!但是請注意,它與在鉻瀏覽器中的工作方式不同。

CSS-tricks編年史XLIIICSS-tricks編年史XLIIIApr 23, 2025 am 09:35 AM

此CSS-tricks更新了,重點介紹了年鑑,最近的播客出現,新的CSS計數器指南以及增加了幾位新作者,這些新作者貢獻了有價值的內容。

tailwind的@Apply功能比聽起來更好tailwind的@Apply功能比聽起來更好Apr 23, 2025 am 09:23 AM

在大多數情況下,人們展示了@Apply的@Apply功能,其中包括Tailwind的單個property實用程序之一(會改變單個CSS聲明)。當以這種方式展示時,@Apply聽起來似乎很有希望。如此明顯

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器