目錄
HTML結構
基礎樣式
創建獨特的三角形形狀
方法一:邊框方法
方法二:背景圖像方法
首頁 web前端 css教學 哦,製作三角形麵包絲帶的許多方法!

哦,製作三角形麵包絲帶的許多方法!

Apr 21, 2025 am 11:26 AM

Oh, the Many Ways to Make Triangular Breadcrumb Ribbons!

多種製作三角形麵包屑條帶的方法

本文探討如何創建一系列相互連接的鏈接,它們呈現出類似於階梯式麵包屑導航中所見的V形形狀和每個區塊上的凹口。

這種樣式在網頁設計中很常見,例如多步驟表單和網站麵包屑導航。我們將這些樣式稱為“條帶”,以便於理解。

與許多網頁元素一樣,我們可以通過多種方法創建這些條帶!我創建了一個演示頁面,其中包含多種方法,例如使用CSS三角形、SVG背景和CSS clip-path屬性。

HTML結構

每個演示的HTML結構基本相同,包含一個充當父元素的<nav></nav>元素和作為子元素的鏈接。

<nav aria-label="breadcrumbs" role="navigation"><a href="https://www.php.cn/link/3dc023ccc7e0bd23ce2d4427756fd03c">主頁</a>
  <a href="https://www.php.cn/link/3dc023ccc7e0bd23ce2d4427756fd03ccategories/articles/">部落格</a>
  <a aria-current="page" href="https://www.php.cn/link/3dc023ccc7e0bd23ce2d4427756fd03carticles/building-an-animated-sticky-header-with-custom-offset/">文章</a>
</nav>
登入後複製

請注意,根據A11y Style Guide網站,這些元素應符合無障礙性標準。在設計組件時,務必考慮無障礙性,並在一開始就引入無障礙性是避免出現“忘記添加無障礙性”問題的最佳方法。

基礎樣式

對於這類樣式,我們需要確保元素大小正確。為此,我們將定義.ribbon (我們將這些元素稱為“條帶”)包裝元素的字體大小,然後在子元素(鏈接)上使用em單位。

 /* 定義包裝元素的字體大小*/
.ribbon {
  font-size: 15px;
}

/* 使用em單位定義條帶元素的大小*/
.ribbon__element {
  font-size: 1.5em;
  letter-spacing: 0.01em;
  line-height: 1.333em;
  padding: 0.667em 0.667em 0.667em 1.333em;
}
登入後複製

這種技術有利於定義每個條帶的三角形形狀大小,因為我們將使用相同的大小來計算三角形。由於我們使用em單位來計算條帶元素的大小,我們可以通過重新定義包裝元素的字體大小來調整所有元素的大小。

讓我們使用CSS Grid進行佈局,因為我們可以這樣做。我們可以使用更廣泛支持瀏覽器的方法來實現,但這取決於您的支持需求。

我們將定義四列:

  • 三列用於條帶元素
  • 一列用於解決間距問題。按原樣,右箭頭形狀將放置在條帶組件的外部,這可能會弄亂原始佈局。
 /* 包裝元素* 我們使用CSS Grid,但請確保它符合您的瀏覽器支持要求。
 * 假設使用autoprefixer進行供應商前綴和屬性。
 */

.ribbon {
  display: grid;
  grid-gap: 1px;
  grid-template-columns: repeat(auto-fill, 1fr) 1em; /* 自動填充三個條帶元素加上一列窄列以解決大小問題*/
}
登入後複製

如果您希望避免拉伸條帶元素,則可以不同地定義網格。例如,我們可以使用max-content根據內容大小調整列。 (但是,請注意, max-content在某些主要瀏覽器中尚不支持。)

 /* 使條帶列根據最大內容大小調整*/
.ribbon--auto {
  grid-template-columns: repeat(3, max-content) 1em;
}
登入後複製

我相信有很多不同的方法可以進行佈局。我喜歡這種方法,因為它定義了條帶元素之間的確切間隙,無需複雜的計算。

無障礙性不僅僅是添加aria屬性。它還包括顏色對比度和可讀性,以及添加懸停和焦點狀態。如果您不喜歡輪廓樣式,可以使用其他CSS屬性,例如box-shadow。

 /* 使用當前鏈接顏色,但在懸停時添加下劃線*/
.ribbon__element:hover,
.ribbon__element:active {
  color: inherit;
  text-decoration: underline;
}

/* 清除默認輪廓樣式並使用內嵌盒陰影表示焦點狀態*/
.ribbon__element:focus {
  box-shadow: inset 0 -3px 0 0 #343435;
  outline: none;
}
登入後複製

創建獨特的三角形形狀

在定義每個條帶末尾的三角形時,我們有多種選擇。我們可以:

  1. 使用偽元素和邊框創建三角形
  2. 在偽元素上使用SVG背景圖像
  3. 使用內聯SVG圖像
  4. 使用polygon()函數創建clip-path

讓我們深入研究每一個。

方法一:邊框方法

首先,我們應該將元素的寬度和高度設置為零,這樣它就不會妨礙我們用來繪製三角形的偽元素。然後,我們應該使用邊框繪製三角形,具體來說,是定義與背景顏色匹配的實心左邊框,使其與條帶的其餘部分融合。接下來,讓我們定義頂部和底部邊框,並將其設置為透明。這裡的技巧是計算邊框的大小。

我們的條帶元素的內容大小為行高值加上頂部和底部填充:

 <code>1.333em 0.667em 0.667em = 2.667em</code>
登入後複製

這意味著我們的頂部和底部邊框應該為此大小的一半。唯一剩下的就是將元素絕對定位到組件的正確側邊。

 /* 左箭頭*/
.ribbon--alpha .ribbon__element:before {
  /* 使內容大小為零*/
  content: '';
  height: 0;
  width: 0;

  /* 使用邊框使偽元素適合條帶大小*/
  border-bottom: 1.333em solid transparent;
  border-left: 0.667em solid #fff;
  border-top: 1.333em solid transparent;

  /* 將元素絕對定位在條帶元素的左側*/
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
}

/* 右箭頭*/
.ribbon--alpha .ribbon__element:after {
  /* 使內容大小為零*/
  content: '';
  height: 0;
  width: 0;

  /* 使用邊框使偽元素適合條帶大小*/
  border-bottom: 1.333em solid transparent;
  border-left: 0.667em solid;
  border-top: 1.333em solid transparent;

  /* 將元素絕對定位在條帶元素的右側並將其推到外部*/
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  -webkit-transform: translateX(0.667em);
  transform: translateX(0.667em);
}
登入後複製

由於右三角形應與條帶的背景顏色匹配,因此請記住為每個條帶的偽元素添加正確的邊框顏色。

 /* 第一個元素的右箭頭*/
.ribbon--alpha .ribbon__element:nth-child(1):after {
  border-left-color: #11d295;
}

/* 第二個元素的右箭頭*/
.ribbon--alpha .ribbon__element:nth-child(2):after {
  border-left-color: #ef3675;
}

/* 第三個元素的右箭頭*/
.ribbon--alpha .ribbon__element:nth-child(3):after {
  border-left-color: #4cd4e9;
}
登入後複製

就是這樣!

方法二:背景圖像方法

我們還可以使用背景圖像創建三角形。這需要創建與設計匹配的圖像,這有點麻煩,但仍然完全有可能。我們將在這裡使用SVG,因為它在任何分辨率下都很流暢。

與邊框三角形方法不同,我們希望將偽元素的高度與條帶元素的高度(或100%)匹配。組件的寬度應與邊框三角形的左邊界寬度匹配,在我們的例子中為0.666666em。然後,我們應該在左側三角形上使用白色三角形作為背景圖像,然後在右側三角形上使用彩色三角形圖像。同樣,我們使用絕對定位將三角形放置到條帶元素的正確側邊。

 /* 左箭頭*/
.ribbon--beta .ribbon__element:before {
  /* 定義箭頭大小*/
  content: '';
  height: 100%;
  width: 0.666666em;

  /* 定義與背景顏色匹配的背景圖像*/
  background-image: url(data:image/svg xml;base64,PHN2ZyBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTAgNDAiIHdpZHRoPSIxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBmaWxsPSI jZmZmIj48cGF0aCBkPSJtNSAxNSAyMCAxMGgtNDB6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgLTEgMCAyNSAyNSkiLz48L3N2Zz4=);
  background-position: center left;
  background-repeat: no-repeat;
  background-size: 100%;

  /* 將元素絕對定位在條帶元素的左側*/
  position: absolute;
  bottom: 0;
  top: 0;
  left: 0;
}

/* 右箭頭*/
.ribbon--beta .ribbon__element:after {
  /* 定義箭頭大小*/
  content: '';
  height: 100%;
  width: 0.667em;

  /* 定義背景圖像屬性*/
  background-position: center left;
  background-repeat: no-repeat;
  background-size: 100%;

  /* 將元素絕對定位在條帶元素的右側並將其推到外部*/
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  -webkit-transform: translateX(0.667em);
  transform: translateX(0.667em);
}

/* 定義與第一個元素的背景顏色匹配的背景圖像*/
.ribbon--beta .ribbon__element:nth-child(1):after {
  background-image: url(data:image/svg xml;base64,PHN2ZyBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTAgNDAiIHdpZHRoPSIxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkP SJtNSAxNSAyMCAxMGgtNDB6IiBmaWxsPSIjMTFkMjk1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgLTEgMCAyNSAyNSkiLz48L3N2Zz4=);
}

/* 定義與第二個元素的背景顏色匹配的背景圖像*/
.ribbon--beta .ribbon__element:nth-child(2):after {
  background-image: url(data:image/svg xml;base64,PHN2ZyBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTAgNDAiIHdpZHRoPSIxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkP SJtNSAxNSAyMCAxMGgtNDB6IiBmaWxsPSIjZWYzNjc1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgLTEgMCAyNSAyNSkiLz48L3N2Zz4=);
}

/* 定義與第三個元素的背景顏色匹配的背景圖像*/
.ribbon--beta .ribbon__element:nth-child(3):after {
  background-image: url(data:image/svg xml;base64,PHN2ZyBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTAgNDAiIHdpZHRoPSIxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkP SJtNSAxNSAyMCAxMGgtNDB6IiBmaWxsPSIjNGNkNGU5IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgLTEgMCAyNSAyNSkiLz48L3N2Zz4=);
}
登入後複製

就是這樣!

其餘部分與原文相似,只是對語句進行了調整和替換,保持了原文意思不變。 由於篇幅限制,這裡不再贅述。 請參考原文繼續學習剩餘部分。

以上是哦,製作三角形麵包絲帶的許多方法!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue團隊完成了完成,我知道這是一項巨大的努力,而且很長時間。所有新文檔也是如此。

您可以從瀏覽器獲得有效的CSS屬性值嗎? 您可以從瀏覽器獲得有效的CSS屬性值嗎? Apr 02, 2025 pm 06:17 PM

我有人寫了這個非常合法的問題。 Lea只是在博客上介紹瞭如何從瀏覽器中獲得有效的CSS屬性。那樣的是這樣。

在CI/CD上有點 在CI/CD上有點 Apr 02, 2025 pm 06:21 PM

我說的“網站”比“移動應用程序”更合適,但我喜歡Max Lynch的框架:

帶有粘性定位的堆疊卡和一點點的雜物 帶有粘性定位的堆疊卡和一點點的雜物 Apr 03, 2025 am 10:30 AM

前幾天,我發現了科里·金尼文(Corey Ginnivan)網站上的這一點,當您滾動時,彼此之間的卡片堆放集。

在WordPress塊編輯器中使用Markdown和本地化 在WordPress塊編輯器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我們需要直接在WordPress編輯器中向用戶顯示文檔,那麼最佳方法是什麼?

比較瀏覽器的響應式設計 比較瀏覽器的響應式設計 Apr 02, 2025 pm 06:25 PM

這些桌面應用程序中有許多目標是同時在不同的維度上顯示您的網站。因此,例如,您可以寫作

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

如何將CSS網格用於粘頭和頁腳 如何將CSS網格用於粘頭和頁腳 Apr 02, 2025 pm 06:29 PM

CSS網格是一系列屬性的集合,旨在使佈局比以往任何時候都容易。像任何東西一樣,那裡有一點學習曲線,但是網格是

See all articles