搜尋
首頁web前端css教學如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

如何利用CSS來美化滑動輸入條(input range)?以下這篇文章為大家介紹一下利用純 CSS 自訂滑動輸入條樣式的方法,希望對大家有幫助!

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

關於原生 input range 滑動輸入條如何自訂樣式一直都是我心裡的一道坎,一般情況下,可以很輕易的美化到這個程度。 (推薦學習:css影片教學

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

#為什麼很容易呢?因為這些都是有對應的偽元素可以修改的

::-webkit-slider-container {
  /*可以修改容器的若干样式*/
}
::-webkit-slider-runnable-track {
  /*可以修改轨道的若干样式*/
}
::-webkit-slider-thumb {
  /*可以修改滑块的若干样式*/
}

可是,偏偏沒有已滑過部分的樣式,如果要定義下面這樣的樣式,單純的CSS 可能沒辦法實現了

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

注意:Firefox 有單獨的偽類別可以修改,本文討論的是Chrome 實作方案

一、我的實作思路

既然沒有專門的偽元素可以修改已滑過部分的顏色,而且只有滑塊是可動的,是否可以在滑塊上下手?

假設滑桿左邊有一個長方形,是跟隨滑桿一起的,

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

#當這個矩形夠長時,能夠完全覆蓋左邊的軌道,在可視範圍內,是不是就可以表示左邊的已滑過部分了呢?示意如下(左邊半透明表示滑動條之外)

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

嘗試過偽元素的想法,像這樣

::-webkit-slider-thumb::after{
  /*本想绘制一个足够长的矩形*/
}

可惜,偽元素裡並不能再次產生偽元素。

所以,如何在元素之外畫出一個矩形呢?

二、透過 border-image 在元素之外繪製圖形

有哪些方式可以在元素之外繪製圖形呢?想了一下,有box-shadowoutline,但好像不適合這種情況,我們需要繪製的是一個尺寸可控的矩形,而這兩種方式都不能很好地控制形狀。那還有其他方式嗎?

還真有!前兩天剛看到張鑫旭老師的一篇文章:被低估的border-image屬性,其中有一個特性就是在元素之外構建圖像,並且不佔據任何空間。趕快試試,這裡繪製一個寬度為99vw的矩形(足夠覆蓋滑動條就行了),程式碼如下

::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background-color: #f44336;
    border: 1px solid transparent;
    margin-top: -8px;
    border-image: linear-gradient(#f44336,#f44336) 0 fill / 8 20 8 0 / 0 0 0 99vw; /*绘制元素外矩形*/
}

效果如下

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

注意幾點:

  • border-image 要生效,必須指定border,這裡設定的是border: 1px solid transparent;

  • 矩形是透過線性漸層繪製的linear-gradient(#f44336,#f44336)

  • #border -image 中8 20 8 0表示border-image-width,距離上、右、下、左的距離,由於滑桿本身大小是20 * 20,所以這個可以確定高度是4 (20 - 8- 8),位置是滑桿本身的最左邊(距離右邊是20)

  • border-image 中0 0 0 99vw表示border-image-outset擴充大小,這裡指的是向左擴展99vw的距離

接下來通過overflow:hidden隱藏外面的部分就可以了

::-webkit-slider-container {
    /*其他样式*/
    overflow: hidden;
}

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

#完整程式碼可以存取:input range

https:// codepen.io/xboxyan/pen/YzERZyE

下面附上完整程式碼(最近codepen似乎不太穩定)

[type="range"] {
    -webkit-appearance: none;
    appearance: none;
    margin: 0;
    outline: 0;
    background-color: transparent;
    width: 500px;
}
[type="range"]::-webkit-slider-runnable-track {
    height: 4px;
    background: #eee;
}
[type="range" i]::-webkit-slider-container {
    height: 20px;
    overflow: hidden;
}
[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background-color: #f44336;
    border: 1px solid transparent;
    margin-top: -8px;
    border-image: linear-gradient(#f44336,#f44336) 0 fill / 8 20 8 0 / 0px 0px 0 2000px;
}

三、還是有一些限制

上面的實作成本其實是很低的,相比常規的實作基礎上,僅僅增加了1行用於繪製元素之外的矩形。

border-image: linear-gradient(#f44336,#f44336) 0 fill / 8 20 8 0 / 0px 0px 0 2000px;

但是,由於是透過超出隱藏的方式裁剪掉多出的部分,使得滑動條邊緣是「一刀切」的,所以,如果要求滑動條帶有圓角,這種實現方式就不行了

如何利用CSS來美化滑動輸入條?自訂樣式方法淺析

如果還有好的想法歡迎留言討論

四、簡單總結一下

關於border-image-outset 這個屬性,其實之前已經在MDN 上見識過了,但只是簡單了解,還覺得很雞肋,現在看來,這些屬性不是沒什麼用,只是沒有碰到適合應用的場景。以下簡單總結一下:

  • 滑動條有3 個偽元素可以自訂容器、軌道、滑桿

  • 偽元素裡不能再巢狀偽元素了

  • 元素之外繪製有box-shadow、outline、border-image 3種方法

  • ##border-image 可以使用任意格式圖片,包括CSS 漸變

  • 這個方案不能實現圓角

當然這些思路都只是“偏方”,像Firefox 就完全支援自訂樣式了,可惜桌面端還是Chrome 的天下,只能慢慢期待一下Chrome 後面的更新了。最後,如果覺得還不錯,對你有幫助的話,歡迎按讚、收藏、轉發❤❤❤

(學習影片分享:

web前端

以上是如何利用CSS來美化滑動輸入條?自訂樣式方法淺析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
滑動頁腳滑動頁腳Apr 09, 2025 am 11:50 AM

剛剛推出了一個引人入勝的新網站。標語:Big Tech正在看著您。我們正在看大型技術。上升的出色工作。這

喜歡的頁面喜歡的頁面Apr 09, 2025 am 11:47 AM

前幾天,我發布了有關在JavaScript中解析RSS提要的內容。我還發布了有關RSS設置的信息,討論了Feedbin的核心。

重新創建Codepen Gutenberg嵌入塊以進行理智。重新創建Codepen Gutenberg嵌入塊以進行理智。Apr 09, 2025 am 11:43 AM

了解如何通過Chris Coyier實施WordPress的Gutenberg編輯器來創建一個自定義Codepen塊,並為Sanity Studio提供預覽。

如何使用CSS製作線路圖如何使用CSS製作線路圖Apr 09, 2025 am 11:36 AM

線,條和餅圖是儀表板的麵包和黃油,是任何數據可視化工具包的基本組成部分。當然,您可以使用SVG

編程SASS創建可訪問的顏色組合編程SASS創建可訪問的顏色組合Apr 09, 2025 am 11:30 AM

我們一直在尋求使網絡更容易訪問。顏色對比只是數學,因此Sass可以幫助涵蓋設計師可能錯過的邊緣案例。

我們如何創建一個在SVG中生成格子呢模式的靜態站點我們如何創建一個在SVG中生成格子呢模式的靜態站點Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

PHP模板的後續行動PHP模板的後續行動Apr 09, 2025 am 11:14 AM

不久前,我僅以PHP(基本上是Heredoc語法)發布了有關PHP模板的信息。我從字面上使用該技術來進行某種超級基礎

使用Bootstrap組件創建模態圖像庫使用Bootstrap組件創建模態圖像庫Apr 09, 2025 am 11:10 AM

您是否曾經在網頁上單擊圖像,該圖像通過導航打開圖像的較大版本以查看其他照片?

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

MantisBT

MantisBT

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器