这是我的HTML:

<select id="ddlProducts" name="ddProducts"> 
    <option>Product1 : Electronics </option>
    <option>Product2 : Sports </option>
</select>

我想让产品的名称(即。'Product1', 'Product2',等等),以及它的类别(即。电子,体育等)斜体,只使用CSS。我发现了一个老问题,提到这是不可能使用HTML和CSS,但希望,现在有一个解决方案。


当前回答

这里有一些方法来样式<option>和<select>如果你使用Bootstrap和/或jquery。我知道这不是最初的海报要问的问题,但我想我可以帮助其他无意中遇到这个问题的人。

您仍然可以实现分别为每个<option>设置样式的目标,但可能还需要对<select>应用一些样式。我最喜欢的是下面提到的“Bootstrap Select”库。


Bootstrap选择库(jquery)

如果你已经在使用bootstrap,你可以尝试bootstrap Select库或下面的库(因为它有一个bootstrap主题)。

注意,您可以对整个选择元素或选项元素分别设置样式。

例子:

依赖:需要jQuery v1.9.1+, Bootstrap, Bootstrap的下拉菜单.js组件,和Bootstrap的CSS

兼容性:不确定,但bootstrap说它“支持所有主流浏览器和平台的最新稳定版本”

演示:https://developer.snapappointments.com/bootstrap-select/examples/

.special { font-weight: bold !important; color: #fff !important; background: #bc0000 !important; text-transform: uppercase; } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/css/bootstrap-select.min.css" rel="stylesheet" /> <script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/js/bootstrap-select.min.js"></script> <select class="selectpicker"> <option>Mustard</option> <option class="special">Ketchup</option> <option style="background: #5cb85c; color: #fff;">Relish</option> </select>


Select2 (JS lib)

你可以使用一个叫做Select2的库。

依赖:库是JS + CSS + HTML(不需要JQuery)。

兼容性:IE 8+, Chrome 8+, Firefox 10+, Safari 3+, Opera 10.6+

演示:https://select2.org/getting-started/basic-usage

还有一个引导主题可用。

无引导的例子:

$(function() { var $select = $('.select2'); $select.select2({ theme: 'paper' }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet"/> <select class="select2 form-control" placeholder="Country"> <optgroup label="Alaskan/Hawaiian Time Zone"> <option value="AK">Alaska</option> <option value="HI">Hawaii</option> </optgroup> <optgroup label="Pacific Time Zone"> <option value="CA">California</option> <option value="NV">Nevada</option> <option value="OR">Oregon</option> <option value="WA">Washington</option> </optgroup> </select>

自举的例子:

$(function() { var $select = $('.select2'); $select.select2({ theme: 'paper' }); }); <link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.2/paper/bootstrap.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet"/> <select class="select2 form-control" placeholder="Country"> <optgroup label="Alaskan/Hawaiian Time Zone"> <option value="AK">Alaska</option> <option value="HI">Hawaii</option> </optgroup> <optgroup label="Pacific Time Zone"> <option value="CA">California</option> <option value="NV">Nevada</option> <option value="OR">Oregon</option> <option value="WA">Washington</option> </optgroup> </select>


MDBootstrap ($ & Bootstrap & JQuery)

如果你有多余的钱,你可以使用高级库MDBootstrap。(这是一个完整的UI工具包,所以它不轻)

这允许您使用材质设计来设置选择和选项元素的样式。

有一个免费的版本,但它不允许你使用漂亮的材质设计!

依赖:Bootstrap 4, JQuery,

兼容性:“支持所有主流浏览器和平台的最新稳定版本。”

演示:https://mdbootstrap.com/docs/jquery/forms/select/ #颜色

其他回答

似乎我可以直接在Chrome或Firefox中为选择设置CSS。CSS和HTML代码提供如下:

. boldoption { font-weight: bold; 的 选择< > <option>一些规范-字体 <option>另一种规范-字体option</option> <option class=“boldoption”>一些勇敢的选择</option> 选择< - >

我发现并使用了这个样式化选择和选项的好例子。你可以选择你想要的。小提琴在这里

// Iterate over each select element $('select').each(function() { // Cache the number of options var $this = $(this), numberOfOptions = $(this).children('option').length; // Hides the select element $this.addClass('s-hidden'); // Wrap the select element in a div $this.wrap('<div class="select"></div>'); // Insert a styled div to sit over the top of the hidden select element $this.after('<div class="styledSelect"></div>'); // Cache the styled div var $styledSelect = $this.next('div.styledSelect'); // Show the first select option in the styled div $styledSelect.text($this.children('option').eq(0).text()); // Insert an unordered list after the styled div and also cache the list var $list = $('<ul />', { 'class': 'options' }).insertAfter($styledSelect); // Insert a list item into the unordered list for each select option for (var i = 0; i < numberOfOptions; i++) { $('<li />', { text: $this.children('option').eq(i).text(), rel: $this.children('option').eq(i).val() }).appendTo($list); } // Cache the list items var $listItems = $list.children('li'); // Show the unordered list when the styled div is clicked (also hides it if the div is clicked again) $styledSelect.click(function(e) { e.stopPropagation(); $('div.styledSelect.active').each(function() { $(this).removeClass('active').next('ul.options').hide(); }); $(this).toggleClass('active').next('ul.options').toggle(); }); // Hides the unordered list when a list item is clicked and updates the styled div to show the selected list item // Updates the select element to have the value of the equivalent option $listItems.click(function(e) { e.stopPropagation(); $styledSelect.text($(this).text()).removeClass('active'); $this.val($(this).attr('rel')); $list.hide(); /* alert($this.val()); Uncomment this for demonstration! */ }); // Hides the unordered list when clicking outside of it $(document).click(function() { $styledSelect.removeClass('active'); $list.hide(); }); }); body { padding: 50px; background-color: white; } .s-hidden { visibility: hidden; padding-right: 10px; } .select { cursor: pointer; display: inline-block; position: relative; font: normal 11px/22px Arial, Sans-Serif; color: black; border: 1px solid #ccc; } .styledSelect { position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-color: white; padding: 0 10px; font-weight: bold; } .styledSelect:after { content: ""; width: 0; height: 0; border: 5px solid transparent; border-color: black transparent transparent transparent; position: absolute; top: 9px; right: 6px; } .styledSelect:active, .styledSelect.active { background-color: #eee; } .options { display: none; position: absolute; top: 100%; right: 0; left: 0; z-index: 999; margin: 0 0; padding: 0 0; list-style: none; border: 1px solid #ccc; background-color: white; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); } .options li { padding: 0 6px; margin: 0 0; padding: 0 10px; } .options li:hover { background-color: #39f; color: white; } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <select id="selectbox1"> <option value="">Select an option&hellip;</option> <option value="aye">Aye</option> <option value="eh">Eh</option> <option value="ooh">Ooh</option> <option value="whoop">Whoop</option> </select> <select id="selectbox2"> <option value="">Month&hellip;</option> <option value="january">January</option> <option value="february">February</option> <option value="march">March</option> <option value="april">April</option> <option value="may">May</option> <option value="june">June</option> <option value="july">July</option> <option value="august">August</option> <option value="september">September</option> <option value="october">October</option> <option value="november">November</option> <option value="december">December</option> </select>

这里留下一个快速的替代方法,使用表上的类切换。它的行为与选择非常相似,但是可以使用过渡、滤镜和颜色进行样式化,每个子元素都是独立的。

function toggleSelect(){ if (store.classList[0] === "hidden"){ store.classList = "viewfull" } else { store.classList = "hidden" } } #store { overflow-y: scroll; max-height: 110px; max-width: 50% } .hidden { display: none } .viewfull { display: block } #store :nth-child(4) { background-color: lime; } span {font-size:2rem;cursor:pointer} <span onclick="toggleSelect()">⮋</span> <div id="store" class="hidden"> <ul><li><a href="#keylogger">keylogger</a></li><li><a href="#1526269343113">1526269343113</a></li><li><a href="#slow">slow</a></li><li><a href="#slow2">slow2</a></li><li><a href="#Benchmark">Benchmark</a></li><li><a href="#modal">modal</a></li><li><a href="#buma">buma</a></li><li><a href="#1526099371108">1526099371108</a></li><a href="#1526099371108o">1526099371108o</a></li><li><a href="#pwnClrB">pwnClrB</a></li><li><a href="#stars%20u">stars%20u</a></li><li><a href="#pwnClrC">pwnClrC</a></li><li><a href="#stars ">stars </a></li><li><a href="#wello">wello</a></li><li><a href="#equalizer">equalizer</a></li><li><a href="#pwnClrA">pwnClrA</a></li></ul> </div>

实际上你可以添加:before和:after并设置样式。至少它是有意义的

选择{ 字体大小:18 px; background - color: # ffffff; } 之前选择:{ 内容:“>”; 字体大小:20 px; 显示:没有; padding-right: 10 px; padding-left: 5 px; 颜色:# fff; } 选择:徘徊:{之前 显示:内联; } <select id="ddlProducts" name="ddProducts"> <option>Product1: Electronics </option> <option>Product2: Sports </option> < /选择>

(() => { const optionValues = document.querySelectorAll(".search-form__value"); const searchOptions = document.querySelector(".search-form__selector"); const dropdown = document.querySelector(".search-form__dropdown"); const input = document.getElementById("search-form-loc"); const selectorText = document.querySelector(".search-form__label--loc"); searchOptions.addEventListener("click", function () { dropdownHandler(); }); optionValues.forEach((option) => { option.addEventListener("click", function () { updateUI(input, selectorText, this); }); }); window.addEventListener("mouseup", function (event) { if (event.target != dropdown) { dropdown.classList.remove("search-form__dropdown--show"); } }); function dropdownHandler() { dropdown.classList.toggle("search-form__dropdown--show"); } function updateUI(input, selectorText, referedThis) { input.value = referedThis.textContent.trim(); selectorText.textContent = referedThis.textContent.trim(); dropdown.classList.remove("search-form__dropdown--show"); } })(); /* CSS Reset Starts */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: sans-serif; color: #777; background-color: slateblue !important; } /* CSS Reset Ends */ .search-form { display: flex; align-items: center; width: max-content; max-width: 700px; margin: 100px auto; background: #fff; } .search-form__label { margin-right: 40px; } .search-form__selector { display: flex; align-items: center; gap: 12px; cursor: pointer; font-size: 14px; padding: 12px 18px; background: #fff; position: relative; z-index: 1000; } .search-form__line { height: 100%; width: 1px; background: #777; margin-left: auto; } .search-form__icon { font-size: 24px; } /* Dropdown */ .search-form__dropdown { list-style: none; position: absolute; left: 0; top: 100%; box-shadow: 0 7px 30px -10px #96aa6480; width: 100%; min-width: max-content; transition: 0.4s; background-color: #fff; opacity: 0; visibility: hidden; z-index: 10; pointer-events: none; transform: translateY(20px); cursor: pointer; } .search-form__value { padding: 7px; } .search-form__value:hover { background: #0667d5; color: #fff; } .pos-rel { position: relative; } .search-form__dropdown--show { opacity: 1; visibility: visible; pointer-events: visible; -webkit-transform: translate(0); -ms-transform: translate(0); transform: translate(0); } <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" /> </head> <body> <form class="search-form"> <input type="hidden" name="search-form-loc" id="search-form-loc" /> <div class="pos-rel"> <div class="search-form__selector"> <p class="search-form__label search-form__label--loc">Select From List</p> <div class="search-form__line">&nbsp;</div> <i class="fa fa-caret-down search-form__icon"></i> </div> <ul class="search-form__dropdown"> <li class="search-form__value" data-loc="search-form-loc">UK</li> <li class="search-form__value" data-loc="search-form-loc">Barcelona</li> <li class="search-form__value" data-loc="search-form-loc">Brazil</li> <li class="search-form__value" data-loc="search-form-loc">Hungary</li> </ul> </div> </form> </body> </html>