問題描述

我正在使用佔位符的文本輸入,這是正常工作正常。但是我也想為我的選擇框使用佔位符。當然我可以用這個代碼:

<select>
    <option value="">Select your option</option>
    <option value="hurr">Durr</option>
</select>

但是,「選擇你的選項」 是黑色而不是 lightgrey 。所以我的解決方案可能是 CSS-based 。 jQuery 也很好。

這隻能使選項在下拉列表中為灰色 (因此點擊箭頭後):

option:first {
    color: #999;
}

編輯:問題是:人們如何在選擇框中創建佔位符?但已經回答了,歡呼聲。

並且使用此結果導致所選值始終為灰色 (即使在選擇了實際選項之後):

select {
    color:#999;
}

最佳解決方案

一個非 CSS – 沒有 javascript /jQuery 的答案?



<select>
    <option value="" disabled selected>Select your option</option>
    <option value="hurr">Durr</option>
</select>

次佳解決方案

只是偶然遇到這個問題,這裏有什麼在 FireFox& chrome (至少)



<style>
    select:invalid { color: gray; }
</style>
<form>
    <select required>
        <option value="" disabled selected hidden>Please Choose...</option>
        <option value="0">Open when powered (most valves do this)</option>
        <option value="1">Closed when powered, auto-opens when power is cut</option>
    </select>
</form>

「禁用」 選項將停止使用鼠標和鍵盤選擇的<option>,而僅使用'display:none'則允許用户通過鍵盤箭頭進行選擇。 'display:none'風格只是使列表框看起來’nice’ 。

注意:在”placeholder” 選項上使用一個空的 value 屬性允許驗證 (必需屬性) 使用”placeholder”,因此如果該選項不更改但是必需; 瀏覽器應該提示用户從列表中選擇一個選項。

更新 (2015 年 7 月):

該方法在以下瀏覽器中得到確認:

  • Google Chrome – v.43.0.2357.132

  • Mozilla Firefox – v.39.0

  • Safari – v.8.0.7(佔位符在下拉列表中可見,但不可選)

  • Microsoft Internet Explorer – v.11(佔位符在下拉列表中可見,但不可選)

  • Project Spartan – v.15.10130(佔位符在下拉列表中可見,但不可選)

更新 (2015 年 10 月):

刪除了 style="display: none"贊成 HTML5 屬性 hidden,得到了廣泛的支持。 hidden 元素具有與 Safari 中的 display: none 相似的特徵,IE(Project Spartan 需要檢查),option 在下拉菜單中可見,但不可選。

更新 (2016 年 1 月):

select 元素是 required 時,它允許使用:invalid CSS pseudo-class,它允許您在 「佔位符」 狀態下對 select 元素進行樣式化。由於佔位符 option 中的空值,:invalid 在此處工作。

一旦設置了一個值,:invalid pseudo-class 將被丟棄。如果您願意,也可以選擇使用:valid

大多數瀏覽器支持此 pseudo-class 。 IE10 +。這最適合自定義樣式的 select 元素; 在某些情況下 (即 Chrome /Safari 中的 Mac),您需要更改 select 框的默認外觀,以便某些樣式顯示為 background-colorcolor 。您可以在 developer.mozilla.org 找到一些關於兼容性的例子。

原生元素外觀 Mac 中的 Chrome:

在 Chrome 中使用更改的邊框元素 Mac:

第三種解決方案

對於必需的字段,現代瀏覽器中有一個 pure-CSS 解決方案:



select:required:invalid {
  color: gray;
}
option[value=""][disabled] {
  display: none;
}
option {
  color: black;
}
<select required>
  <option value="" disabled selected>Select something...</option>
  <option value="1">One</option>
  <option value="2">Two</option>
</select>

第四種方案

這樣的東西可能嗎?

HTML:

<select id="choice">
    <option value="0" selected="selected">Choose...</option>
    <option value="1">Something</option>
    <option value="2">Something else</option>
    <option value="3">Another choice</option>
</select>

CSS:

#choice option { color: black; }
.empty { color: gray; }

JavaScript 的:

$("#choice").change(function () {
    if($(this).val() == "0") $(this).addClass("empty");
    else $(this).removeClass("empty")
});

$("#choice").change();

工作實例:http://jsfiddle.net/Zmf6t/

第五種方案

我剛剛在下面的選項中添加了隱藏的屬性,這對我來説是正常的。



<select>
  <option hidden>Sex</option>
  <option>Male</option>
  <option>Female</option>
</select>

第六種方案

該解決方案也適用於 FireFox:沒有任何 JS 。



option[default] {
  display: none;
}
<select>
  <option value="" default selected>Select Your Age</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select>

第七種方案

我有同樣的問題,而搜索過程中遇到這個問題,在我找到了很好的解決方案後,我想和大家分享一下,以防一些人能從中受益。這裏是:HTML:

<select class="place_holder dropdown">
    <option selected="selected" style=" display: none;">Sort by</option>
    <option>two</option>
    <option>something</option>
    <option>4</option>
    <option>5</option>
</select>

CSS:

.place_holder{
    color: gray;
}
option{
    color: #000000;
}

JS:

jQuery(".dropdown").change(function () {
    jQuery(this).removeClass("place_holder");
});

客户首先選擇不需要灰色,所以 JS 刪除類 place_holder 。我希望這有助於某人:)

更新:感謝 @ user1096901,作為 IE 瀏覽器的工作,您可以再次添加 place_holder 類,以防再次選擇第一個選項:)

第八種方案

我看到正確的答案的跡象,但把它全部在一起這將是我的解決方案。



select{
  color: grey;
}

option {
  color: black;
}

option[default] {
   display: none;
}
<select>
    <option value="" default selected>Select your option</option>
    <option value="hurr">Durr</option>
</select>

第九種方案

這是我的



select:focus option.holder {
  display: none;
}
<select>
    <option selected="selected" class="holder">Please select</option>
    <option value="1">Option #1</option>
    <option value="2">Option #2</option>

</select>

第十種方案

JS 中的另一種可能性:

 $('body').on('change','select', function (ev){
    if($(this).find('option:selected').val() == ""){
        $(this).css('color','#999');
        $(this).children().css('color','black');
    }
    else {
        $(this).css('color','black');
        $(this).children().css('color','black');
    }
});

JSFiddle

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇