这是我的HTML:
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
我想使用CSS将产品名称(例如“Product1”,“Product2”等)加粗,并将其类别(即电子产品,运动等)斜体化。我发现一个旧问题提到无法使用HTML和CSS实现,但希望现在有解决方案。
这是我的HTML:
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
我想使用CSS将产品名称(例如“Product1”,“Product2”等)加粗,并将其类别(即电子产品,运动等)斜体化。我发现一个旧问题提到无法使用HTML和CSS实现,但希望现在有解决方案。
只有少量样式属性可以应用于<option>
元素。
这是因为这种类型的元素是“替换元素”的一个示例。它们依赖于操作系统,不是HTML/浏览器的一部分。不能通过CSS进行样式设置。
有一些替换插件/库看起来像<select>
元素,但实际上由常规HTML元素组成,可以进行样式设置。
select > option
进行样式设置,但目前没有可靠的跨浏览器方案来实现这一点。至少在 Chrome 上,你最多只能自定义字体大小、字体类型、背景和前景颜色。
也许还有其他微调选项,但像填充、悬停颜色之类的我无法成功修改。
确实可能存在替代方案,但根据项目需求,<select> 标签可能是必要的,例如用于 Angular 验证或其他原因。 - Felype除了
background-color
和color
之外,在选项元素的样式对象中应用的样式设置将被忽略。
style="background-color: red;color: red;"
对我不起作用。
编辑:关闭开发者控制台后,样式被应用。 - Black你可以在一定程度上为选项元素添加样式。
使用 *
CSS 选择器,您可以为系统绘制的框内部的选项添加样式。
示例:
#ddlProducts *
{
border-radius: 15px;
background-color: red;
}
那会长成这个样子:
我发现并使用了这个很好的样式化选择器和选项的例子。你可以用这个选择器做任何想做的事情。这里是Fiddle。
// 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…</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…</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>
以下是在使用Bootstrap和/或jQuery时如何为<select>
样式化<option>
的方法。虽然这不是原帖所问,但我认为我可以帮助其他人。
您仍然可以单独为每个<option>
设置样式,但可能还需要对<select>
应用一些样式。我最喜欢的是下面提到的"Bootstrap Select"库。
如果您已经在使用bootstrap,则可以尝试Bootstrap Select库或下面的库(因为它具有bootstrap主题)。
请注意,您可以为整个select
元素或单独的option
元素设置样式。
示例:
依赖项:需要 jQuery v1.9.1+、Bootstrap、Bootstrap 的 dropdown.js 组件和 Bootstrap 的 CSS
兼容性:不确定,但bootstrap表示它"支持所有主要浏览器和平台的最新稳定版本"
Demo: 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 + CSS + HTML(无需JQuery)。
兼容性:IE 8+,Chrome 8+,Firefox 10+,Safari 3+,Opera 10.6+
演示:https://select2.org/getting-started/basic-usage
还有一个bootstrap主题可用。
没有Bootstrap示例:
$(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>
Bootstrap示例:
$(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。(这是一个整个UI Kit,所以不太轻便)
这使您可以使用Material Design样式化您的选择和选项元素。
有一个免费版本,但它不允许您使用漂亮的Material Design!
依赖项:Bootstrap 4,JQuery,
<option>
标签设置样式:
font-family
color
font-*
background-color
<option>
标签使用自定义字体,例如Google字体、Material Icons或来自icomoon等的图标字体。(这对于字体选择器等非常方便。)<option>
标签中,例如: <select>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">a ★★★</option>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">b ★★★★</option>
</select>
其中★
来自Icons
,其余部分来自Roboto
。
但要注意,自定义字体在移动端选择中不起作用。
正如已经提到的,唯一的方法是使用替换<select>
功能的插件。
以下是一些jQuery插件列表:http://plugins.jquery.com/tag/select/
可以查看使用Select2
插件的示例:http://jsfiddle.net/swsLokfj/23/
实际上,您可以添加:before和:after并对其进行样式设置。至少这是某种方式。
option {
font-size: 18px;
background-color: #ffffff;
}
option:before {
content: ">";
font-size: 20px;
display: none;
padding-right: 10px;
padding-left: 5px;
color: #fff;
}
option:hover:before {
display: inline;
}
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
Bootstrap允许您通过data-content使用样式:
<select class="selectpicker">
<option data-content="<span class='label label-success'>Relish</span>">Relish</option>
</select>
Example: https://silviomoreto.github.io/bootstrap-select/examples/
optgroup
:http://htmlhelp.com/reference/html40/forms/optgroup.html这将给你一个加粗和斜体的类别(比如电子产品),在该类别下会有一堆选项。 - wolv2012