2010-08-20 38 views
78

我想在僞選擇框後添加一些樣式:後(樣式我的選擇框與2部分,沒有圖像)。這裏的HTML:問題與<select>和:後用WebKit

<select name=""> 
    <option value="">Test</option> 
</select> 

而且它不起作用。我不知道爲什麼,也沒有在W3C規範中找到答案。這是CSS:

select { 
    -webkit-appearance: none; 
    background: black; 
    border: none; 
    border-radius: 0; 
    color: white; 
} 

select:after { 
    content: " "; 
    display: inline-block; 
    width: 24px; height: 24px; 
    background: blue; 
} 

那麼這是正常的還是有一個詭計?

+0

我想這不會,*不應該*是可能的,否則它會使它很容易改變形式的內容想象一下簡單的CSS改變顯示價格的東西,它可能會顯示爲比實際便宜,誘使人們購買超過它們的東西預計。 (或者當然,如果有人可以訪問一個頁面/ userstylesheet的CSS,那麼他們可能會以其他方式做同樣的事情......) – Synetech 2015-07-06 22:04:26

+6

@Synetech - 這是不正確的,頁面的作者應該完全控制頁面樣式。瀏覽器製造商試圖阻止某些元素的造型,因爲他們*可能被用來誤導用戶,因爲有幾乎無數的方法來欺騙系統或產生誤報,所以不會有效。 – 2016-01-06 22:47:22

+1

[Pseudo elements and SELECT tag]的可能重複(http://stackoverflow.com/questions/21103542/pseudo-elements-and-select-tag) – Tessa 2017-01-30 16:49:04

回答

84

我還沒有對此進行廣泛的檢查,但是由於瀏覽器運行的操作系統生成select元素的方式,我覺得這還沒有(但是?比瀏覽器本身。

12

面臨同樣的問題。也許這可能是一個解決辦法:

<select id="select-1"> 
    <option>One</option> 
    <option>Two</option> 
    <option>Three</option> 
</select> 
<label for="select-1"></label> 

#select-1 { 
    ... 
} 

#select-1 + label:after { 
    ... 
} 
+0

您可以添加使標籤位於頂部的樣式選擇元素? – bafromca 2014-10-15 23:05:20

42

我一直在尋找同樣的東西,因爲我的選擇背景與箭頭顏色相同。如前所述,在select元素之前或之後添加任何內容是不可能的。我的解決方案是創建一個包裝器元素,我在其中添加了以下內容:在代碼之前。

.select-wrapper { 
    position: relative; 
} 

.select-wrapper:before { 
    content: '\f0d7'; 
    font-family: FontAwesome; 
    color: #fff; 
    display: inline-block; 
    position: absolute; 
    right: 20px; 
    top: 15px; 
    pointer-events: none; 
} 

這我選擇

select { 
    box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    width: 100%; 
    padding: 10px 20px; 
    background: #000; 
    color: #fff; 
    border: none; 
    -webkit-appearance: none; 
    -moz-appearance: none; 
    appearance: none; 
} 

select::-ms-expand { 
    display: none; 
} 

我用FontAwesome.io爲我的新方向,但你可以使用任何你想要的東西。顯然這不是一個完美的解決方案,但取決於你的需求,這可能就足夠了。

+3

這在視覺上是完美的。但你不能點擊該圖標,並選擇元素不會打開:/任何建議? – Schovi 2015-06-29 11:40:48

+7

pointer-events:none;應該照顧這一點。上面的代碼存在問題。我會改變上面的CSS以消除任何混淆。 – sroy 2015-07-06 18:51:24

+0

是否使用僞選擇器(之前vs之後)? – eddiegroves 2015-07-11 03:16:54

4

該解決方案類似於從sroy的一個,但用CSS三角形的,而不是Web字體:

.select-wrapper { 
 
    position: relative; 
 
    width: 200px; 
 
} 
 
.select-wrapper:after { 
 
    content: ""; 
 
    width: 0; 
 
    height: 0; 
 
    border-left: 5px solid transparent; 
 
    border-right: 5px solid transparent; 
 
    border-top: 6px solid #666; 
 
    position: absolute; 
 
    right: 8px; 
 
    top: 8px; 
 
    pointer-events: none; 
 
} 
 
select { 
 
    background: #eee; 
 
    border: 0 !important; 
 
    border-radius: 0; 
 
    -webkit-appearance:none; 
 
    -moz-appearance:none; 
 
    appearance:none; 
 
    text-indent: 0.01px; 
 
    text-overflow: ""; 
 
    font-size: inherit; 
 
    line-height: inherit; 
 
    width: 100%; 
 
} 
 
select::-ms-expand { 
 
    display: none; 
 
}
<div class="select-wrapper"> 
 
    <select> 
 
    <option value="1">option 1</option> 
 
    <option value="2">option 2</option> 
 
    <option value="3">option 3</option> 
 
    </select> 
 
</div>

5

這是一個現代化的解決方案,我熟了使用font-awesome。爲簡潔起見,供應商擴展已被省略。

HTML

<fieldset> 
    <label for="color">Select Color</label> 
    <div class="select-wrapper"> 
     <select id="color"> 
      <option>Red</option> 
      <option>Blue</option> 
      <option>Yellow</option> 
     </select> 
     <i class="fa fa-chevron-down"></i> 
    </div> 
</fieldset> 

SCSS

fieldset { 
    .select-wrapper { 
     position: relative; 

     select { 
      appearance: none; 
      position: relative; 
      z-index: 1; 
      background: transparent; 

      + i { 
       position: absolute; 
       top: 40%; 
       right: 15px; 
      } 
     } 
    } 

如果您選擇元素有一個定義的背景顏色,那麼這將無法工作,因爲這基本上片段放在背後的雪佛龍圖標選擇元素(以允許單擊圖標頂部仍然啓動選擇操作)。

但是,您可以將select-wrapper的樣式設置爲與select元素相同的大小並對其背景進行樣式設置以獲得相同的效果。

看看我CodePen的工作演示,顯示上既黑暗與光明的主題選擇使用普通的標籤外,清理風格,如邊界和寬度框和一個「佔位」標籤,這段代碼。

P.S.這是我在今年早些時候發佈給另一個重複問題的答案。

5

根據我的經驗,這根本行不通,除非你願意將你的<select>包裝在一些包裝中。但是你可以做的是使用背景圖像SVG。例如。

.archive .options select.opt { 
    -moz-appearance: none; 
    -webkit-appearance: none; 
    padding-right: 1.25EM; 
    appearance: none; 
    position: relative; 
    background-color: transparent; 
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' height='10px' width='15px'%3E%3Ctext x='0' y='10' fill='gray'%3E%E2%96%BE%3C/text%3E%3C/svg%3E"); 
    background-repeat: no-repeat; 
    background-size: 1.5EM 1EM; 
    background-position: right center; 
    background-clip: border-box; 
    -moz-background-clip: border-box; 
    -webkit-background-clip: border-box; 
} 

    .archive .options select.opt::-ms-expand { 
     display: none; 
    } 

只要注意正確的URL編碼,因爲IE。您必須使用charset=utf8(不僅僅是utf8),不要使用雙引號(「)來定界SVG屬性值,而是使用撇號(')來簡化您的生活URL編碼s(%3E)。打印任何非ASCII字符,您必須獲得其UTF-8表示形式(例如BabelMap可以幫助您),然後以URL編碼形式提供該表示形式 - 例如▾(U+25BE BLACK DOWN-POINTING SMALL TRIANGLE)UTF- 8代表是\xE2\x96\xBE這是%E2%96%BE當URL編碼。

+0

這是一個不錯而優雅的解決方案 – JosFabre 2018-02-20 10:52:17