How to style the option of a html “select”?
Here's my html :
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
Now, what I want is to make the name of the product (i.e. 'Product1', 'Product2' , etc) bold, and its categories(viz. Electronics, Sports, etc) italicized, using css only. I found a similar question about an year old, but as mentioned there, it's just not possible using HTML and CSS. Hopefully, there's a solution now. Any hint, quirk or trick would be appreciated. Thanks.
html css drop-down-menu
add a comment |
Here's my html :
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
Now, what I want is to make the name of the product (i.e. 'Product1', 'Product2' , etc) bold, and its categories(viz. Electronics, Sports, etc) italicized, using css only. I found a similar question about an year old, but as mentioned there, it's just not possible using HTML and CSS. Hopefully, there's a solution now. Any hint, quirk or trick would be appreciated. Thanks.
html css drop-down-menu
Not sure about this one. By I think not. You'll need some JavaScript (jQuery) magic for that to happen.
– Madara Uchiha♦
Aug 26 '11 at 18:04
5
options are still just as annoying to style as they have ever been. what you may want to use is an optgroup: htmlhelp.com/reference/html40/forms/optgroup.html this will give you a bold and italicized category (like Electronics) under which a bunch of options fall.
– wolv2012
Aug 26 '11 at 18:07
add a comment |
Here's my html :
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
Now, what I want is to make the name of the product (i.e. 'Product1', 'Product2' , etc) bold, and its categories(viz. Electronics, Sports, etc) italicized, using css only. I found a similar question about an year old, but as mentioned there, it's just not possible using HTML and CSS. Hopefully, there's a solution now. Any hint, quirk or trick would be appreciated. Thanks.
html css drop-down-menu
Here's my html :
<select id="ddlProducts" name="ddProducts">
<option>Product1 : Electronics </option>
<option>Product2 : Sports </option>
</select>
Now, what I want is to make the name of the product (i.e. 'Product1', 'Product2' , etc) bold, and its categories(viz. Electronics, Sports, etc) italicized, using css only. I found a similar question about an year old, but as mentioned there, it's just not possible using HTML and CSS. Hopefully, there's a solution now. Any hint, quirk or trick would be appreciated. Thanks.
html css drop-down-menu
html css drop-down-menu
edited Mar 9 '16 at 16:31
Shaggy
9841631
9841631
asked Aug 26 '11 at 18:02
MrClanMrClan
1,74451835
1,74451835
Not sure about this one. By I think not. You'll need some JavaScript (jQuery) magic for that to happen.
– Madara Uchiha♦
Aug 26 '11 at 18:04
5
options are still just as annoying to style as they have ever been. what you may want to use is an optgroup: htmlhelp.com/reference/html40/forms/optgroup.html this will give you a bold and italicized category (like Electronics) under which a bunch of options fall.
– wolv2012
Aug 26 '11 at 18:07
add a comment |
Not sure about this one. By I think not. You'll need some JavaScript (jQuery) magic for that to happen.
– Madara Uchiha♦
Aug 26 '11 at 18:04
5
options are still just as annoying to style as they have ever been. what you may want to use is an optgroup: htmlhelp.com/reference/html40/forms/optgroup.html this will give you a bold and italicized category (like Electronics) under which a bunch of options fall.
– wolv2012
Aug 26 '11 at 18:07
Not sure about this one. By I think not. You'll need some JavaScript (jQuery) magic for that to happen.
– Madara Uchiha♦
Aug 26 '11 at 18:04
Not sure about this one. By I think not. You'll need some JavaScript (jQuery) magic for that to happen.
– Madara Uchiha♦
Aug 26 '11 at 18:04
5
5
options are still just as annoying to style as they have ever been. what you may want to use is an optgroup: htmlhelp.com/reference/html40/forms/optgroup.html this will give you a bold and italicized category (like Electronics) under which a bunch of options fall.
– wolv2012
Aug 26 '11 at 18:07
options are still just as annoying to style as they have ever been. what you may want to use is an optgroup: htmlhelp.com/reference/html40/forms/optgroup.html this will give you a bold and italicized category (like Electronics) under which a bunch of options fall.
– wolv2012
Aug 26 '11 at 18:07
add a comment |
17 Answers
17
active
oldest
votes
In general, you can't. This element is and example of a "replaced element", these are OS-dependent and are not part of the HTML/browser. It cannot be styled via CSS
.
There are replacement plug-ins/libraries that look like a <select>
but are actually composed of regular HTML
elements that CAN be styled.
35
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
2
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
4
You can styleselect > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.
– Felype
Jul 6 '15 at 14:49
25
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
3
@none I have posted an answer to Styling option tags. It does not show how to style<option>
, but it does show how to emulate<select>
so you can style the options.
– UndoingTech
Apr 5 '16 at 18:55
|
show 3 more comments
No, it's not possible, as the styling for these elements is handled by the user's OS. MSDN will answer your question here:
Except for
background-color
andcolor
, style settings applied through the style object for the option element are ignored.
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
17
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
1
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
2
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
2
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
|
show 1 more comment
You can style the option elements to some extent.
Using the * CSS tag you can style the options inside the box that is drawn by the system.
Example:
#ddlProducts *
{
border-radius:15px;
background-color:red;
}
That will look like this:
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
add a comment |
I found and using this good example of styling the selects and options.You can do with this select all you want.Here is the Fiddle
html
<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>
css
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;
}
JS
// 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();
});
});
1
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
7
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
add a comment |
EDIT: I found this awesome library that replaces the standard "select" element in HTML with awesomely styled "select" elements: Select2 - https://select2.github.io/examples.html
In 2011 you may have not been able to style the select "option" element, but it's 2015! You can totally style it! I don't understand some of the answers from 2014 saying you can't style it! CSS3 works wonders. I tried this in my own code, and the pull down "options" were styled just like how you would style the "select"
http://cssdeck.com/labs/styling-select-box-with-css3
Here's some example code!
select {
padding:3px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
-webkit-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
-moz-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
background: black;
color:#888;
border:none;
outline:none;
display: inline-block;
-webkit-appearance:none;
-moz-appearance:none;
appearance:none;
cursor:pointer;
}
15
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
3
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
4
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
4
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
8
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
|
show 6 more comments
Seems like I can just set the CSS for the select
in Chrome directly. CSS and HTML code provided below :
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
5
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
1
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
2
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
2
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
|
show 1 more comment
As already mentioned, the only way is to use a plugin that replaces <select>
functionality.
A list of jQuery plugins: http://plugins.jquery.com/tag/select/
Take a look at the example using Select2
plugin: http://jsfiddle.net/swsLokfj/23/
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
add a comment |
Bootstrap allows you to use styling via 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/
3
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
add a comment |
Leaving here a quick alternative, using class toggle on a table. The behavior is very similar than a select, but can be styled with transition, filters and colors, each children individually.
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>
add a comment |
This element is rendered by the OS, not HTML. It cannot be styled via CSS.
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
try this it may help you
[ https://codepen.io/venu9l/pen/jeNXzY][1]
add a comment |
Some properties can be styled for<option>
tag:
font-family
color
font-*
background-color
Also you can use custom font for individual <option>
tag, for example any google font, Material Icons or other icon fonts from icomoon or alike. (That may come handy for font selectors etc.)
Considering that, you can create font-family stack and insert icons in <option>
tags, eg.
<select>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">a ★★★</option>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">b ★★★★</option>
</select>
where ★
is taken from Icons
and the rest is from Roboto
.
Note though that custom fonts do not work for mobile select.
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
1
Remove quotes overred
: <option style="color: red;">
– dy_
Jan 7 '17 at 17:26
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
add a comment |
It's 2017 and it IS possible to target specific select options. In my project I have a table with a class="variations", and the select options are in the table cell td="value", and the select has an ID select#pa_color.
The option element also has a class option="attached" (among other class tags).
If a user is logged in as a wholesale customer, they can see all of the color options. But retail customers are not allowed to purchase 2 color options, so I've disabled them
<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>
It took a little logic, but here is how I targeted the disabled select options.
CSS
table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}
With that, my color options are only visible to wholesale customers.
add a comment |
You can use inline styles to add custome styling to <option>
tags.
For eg : <option style="font-weight:bold;color:#09C;">Option 1</option>
This will apply the styles to this particular <option>
element only.
Then you can use a bit of javascript magic to apply the inline styles to all of the <option>
elements within a <select>
tag like so :
var select = $(document).getElementById('#select-element-id')
var option = select.children('#option-element-id')
option.css('font-weight', 'bold')
option.css('font-size', '24px')
You can also use <option value="" disabled> <br> </option>
to add a line-break between the options.
add a comment |
It's 100% work, basically the select option is rendered by os not by html. That's by the CSS style doesn't effect,.. generally option{font-size : value ; background-color:color code; border-radius:value; } this case work, but we can't customize the padding ,margin etc..
Below code 100% work to customize select tag
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
add a comment |
You can add a class and gives font-weight:700; in option. But by using this all the text will become bold.
add a comment |
Actually you can add :before and :after and style those. At least it's something
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;
}
add a comment |
Like stated above, not really possible; however, if you just want to style the initial state for something like a 'Select Product...' option before a user interacts with the field, you could do something like below --
The below example styles (technically all) the first option red and once a user interacts will remove that option (which has the value="defaultValue" set) and remove the class applied to the select. You can apply other options besides color as well, but they will only affect the field once changed, not the list view.
CSS
.default-value{
color: red;
}
jQuery
$("select").addClass('default-value');
$("select").bind("focus", function () {
$(this).children('option[value="defaultValue"]').remove();
$(this).removeClass('default-value');
});
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f7208786%2fhow-to-style-the-option-of-a-html-select%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
17 Answers
17
active
oldest
votes
17 Answers
17
active
oldest
votes
active
oldest
votes
active
oldest
votes
In general, you can't. This element is and example of a "replaced element", these are OS-dependent and are not part of the HTML/browser. It cannot be styled via CSS
.
There are replacement plug-ins/libraries that look like a <select>
but are actually composed of regular HTML
elements that CAN be styled.
35
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
2
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
4
You can styleselect > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.
– Felype
Jul 6 '15 at 14:49
25
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
3
@none I have posted an answer to Styling option tags. It does not show how to style<option>
, but it does show how to emulate<select>
so you can style the options.
– UndoingTech
Apr 5 '16 at 18:55
|
show 3 more comments
In general, you can't. This element is and example of a "replaced element", these are OS-dependent and are not part of the HTML/browser. It cannot be styled via CSS
.
There are replacement plug-ins/libraries that look like a <select>
but are actually composed of regular HTML
elements that CAN be styled.
35
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
2
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
4
You can styleselect > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.
– Felype
Jul 6 '15 at 14:49
25
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
3
@none I have posted an answer to Styling option tags. It does not show how to style<option>
, but it does show how to emulate<select>
so you can style the options.
– UndoingTech
Apr 5 '16 at 18:55
|
show 3 more comments
In general, you can't. This element is and example of a "replaced element", these are OS-dependent and are not part of the HTML/browser. It cannot be styled via CSS
.
There are replacement plug-ins/libraries that look like a <select>
but are actually composed of regular HTML
elements that CAN be styled.
In general, you can't. This element is and example of a "replaced element", these are OS-dependent and are not part of the HTML/browser. It cannot be styled via CSS
.
There are replacement plug-ins/libraries that look like a <select>
but are actually composed of regular HTML
elements that CAN be styled.
edited Feb 1 at 20:49
answered Aug 26 '11 at 18:04
Diodeus - James MacFarlaneDiodeus - James MacFarlane
95.4k28139166
95.4k28139166
35
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
2
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
4
You can styleselect > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.
– Felype
Jul 6 '15 at 14:49
25
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
3
@none I have posted an answer to Styling option tags. It does not show how to style<option>
, but it does show how to emulate<select>
so you can style the options.
– UndoingTech
Apr 5 '16 at 18:55
|
show 3 more comments
35
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
2
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
4
You can styleselect > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.
– Felype
Jul 6 '15 at 14:49
25
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
3
@none I have posted an answer to Styling option tags. It does not show how to style<option>
, but it does show how to emulate<select>
so you can style the options.
– UndoingTech
Apr 5 '16 at 18:55
35
35
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
replacement plug-ins like???
– MrClan
Aug 26 '11 at 18:07
2
2
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
This behaviour varies across different browsers and different OSes; it's worth clarifying if you're talking mainly about IE on Windows.
– Vince Bowdren
Apr 19 '13 at 9:10
4
4
You can style
select > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.– Felype
Jul 6 '15 at 14:49
You can style
select > option
, but there are no reliable crossbrowser solution for doing so and, on chrome at least you can at most customize font size, family, background and foreground color. Maybe some more tweaks, but things as padding, hover color and such I couldn't succeed on changing. Indeed there might be alternatives, but depending on the project the <select> tag might be necessary for example for angular validation or some other reason.– Felype
Jul 6 '15 at 14:49
25
25
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
Is it possible in 2016 to style it???
– eugen sunic
Dec 24 '15 at 14:09
3
3
@none I have posted an answer to Styling option tags. It does not show how to style
<option>
, but it does show how to emulate <select>
so you can style the options.– UndoingTech
Apr 5 '16 at 18:55
@none I have posted an answer to Styling option tags. It does not show how to style
<option>
, but it does show how to emulate <select>
so you can style the options.– UndoingTech
Apr 5 '16 at 18:55
|
show 3 more comments
No, it's not possible, as the styling for these elements is handled by the user's OS. MSDN will answer your question here:
Except for
background-color
andcolor
, style settings applied through the style object for the option element are ignored.
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
17
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
1
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
2
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
2
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
|
show 1 more comment
No, it's not possible, as the styling for these elements is handled by the user's OS. MSDN will answer your question here:
Except for
background-color
andcolor
, style settings applied through the style object for the option element are ignored.
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
17
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
1
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
2
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
2
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
|
show 1 more comment
No, it's not possible, as the styling for these elements is handled by the user's OS. MSDN will answer your question here:
Except for
background-color
andcolor
, style settings applied through the style object for the option element are ignored.
No, it's not possible, as the styling for these elements is handled by the user's OS. MSDN will answer your question here:
Except for
background-color
andcolor
, style settings applied through the style object for the option element are ignored.
edited Jul 1 '15 at 14:19
j08691
167k20197215
167k20197215
answered Aug 26 '11 at 18:05
esqewesqew
21.8k2077110
21.8k2077110
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
17
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
1
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
2
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
2
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
|
show 1 more comment
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
17
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
1
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
2
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
2
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
so the conclusion is : "a select's option cannot be partially styled just with CSS", right??? :(
– MrClan
Aug 29 '11 at 7:19
17
17
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
The important point here is that they can be styled, only very minimally.
– devios1
Jan 2 '13 at 19:07
1
1
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
To add to devios's point -- the native select can be minimally styled for Windows, but not necessarily for other OSes. As pumbo mentions below, you'll need to swap out the select for other elements (usually an ul) and duplicate select functionality in JavaScript for full control over styles.
– Benjamin Robinson
Jul 14 '16 at 17:37
2
2
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:22
2
2
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
@fabio remove ' ' from red...
– b.doe
Mar 30 '17 at 7:26
|
show 1 more comment
You can style the option elements to some extent.
Using the * CSS tag you can style the options inside the box that is drawn by the system.
Example:
#ddlProducts *
{
border-radius:15px;
background-color:red;
}
That will look like this:
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
add a comment |
You can style the option elements to some extent.
Using the * CSS tag you can style the options inside the box that is drawn by the system.
Example:
#ddlProducts *
{
border-radius:15px;
background-color:red;
}
That will look like this:
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
add a comment |
You can style the option elements to some extent.
Using the * CSS tag you can style the options inside the box that is drawn by the system.
Example:
#ddlProducts *
{
border-radius:15px;
background-color:red;
}
That will look like this:
You can style the option elements to some extent.
Using the * CSS tag you can style the options inside the box that is drawn by the system.
Example:
#ddlProducts *
{
border-radius:15px;
background-color:red;
}
That will look like this:
edited Oct 7 '13 at 5:13
jgb
1,08451727
1,08451727
answered Oct 7 '13 at 4:46
Zoron19Zoron19
30537
30537
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
add a comment |
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
That is true only because the all selector targets the shadow DOM innards, you can target those manually per browser.
– mystrdat
Aug 6 '14 at 12:51
add a comment |
I found and using this good example of styling the selects and options.You can do with this select all you want.Here is the Fiddle
html
<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>
css
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;
}
JS
// 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();
});
});
1
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
7
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
add a comment |
I found and using this good example of styling the selects and options.You can do with this select all you want.Here is the Fiddle
html
<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>
css
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;
}
JS
// 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();
});
});
1
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
7
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
add a comment |
I found and using this good example of styling the selects and options.You can do with this select all you want.Here is the Fiddle
html
<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>
css
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;
}
JS
// 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();
});
});
I found and using this good example of styling the selects and options.You can do with this select all you want.Here is the Fiddle
html
<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>
css
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;
}
JS
// 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();
});
});
edited Feb 13 '15 at 6:53
answered Dec 16 '14 at 21:30
Anahit GhazaryanAnahit Ghazaryan
465420
465420
1
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
7
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
add a comment |
1
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
7
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
1
1
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
could you please post the code here because maybe some day it will be removed but here it will be stay in the save place
– Mohammad Alabed
Dec 31 '14 at 9:13
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
Yes of course!You are right!
– Anahit Ghazaryan
Jan 4 '15 at 16:06
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
it works... but jesus christ. we have to do all that just to style options? there must be a better way
– ahnbizcad
Jan 28 '16 at 22:05
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
It is very dynamic way of doing what you want with the select, if you will have a better option i will be happy to see it as an answer here @ahnbizcad
– Anahit DEV
Feb 1 '16 at 5:51
7
7
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
This is NOT a native html <select> it just re-renders one with some jQuery code. If your gonna do this might as well use a jQuery plugin, React component etc. that handles keyboard UP/DOWN, typeahead/searching etc.
– John Culviner
Sep 9 '16 at 22:21
add a comment |
EDIT: I found this awesome library that replaces the standard "select" element in HTML with awesomely styled "select" elements: Select2 - https://select2.github.io/examples.html
In 2011 you may have not been able to style the select "option" element, but it's 2015! You can totally style it! I don't understand some of the answers from 2014 saying you can't style it! CSS3 works wonders. I tried this in my own code, and the pull down "options" were styled just like how you would style the "select"
http://cssdeck.com/labs/styling-select-box-with-css3
Here's some example code!
select {
padding:3px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
-webkit-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
-moz-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
background: black;
color:#888;
border:none;
outline:none;
display: inline-block;
-webkit-appearance:none;
-moz-appearance:none;
appearance:none;
cursor:pointer;
}
15
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
3
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
4
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
4
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
8
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
|
show 6 more comments
EDIT: I found this awesome library that replaces the standard "select" element in HTML with awesomely styled "select" elements: Select2 - https://select2.github.io/examples.html
In 2011 you may have not been able to style the select "option" element, but it's 2015! You can totally style it! I don't understand some of the answers from 2014 saying you can't style it! CSS3 works wonders. I tried this in my own code, and the pull down "options" were styled just like how you would style the "select"
http://cssdeck.com/labs/styling-select-box-with-css3
Here's some example code!
select {
padding:3px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
-webkit-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
-moz-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
background: black;
color:#888;
border:none;
outline:none;
display: inline-block;
-webkit-appearance:none;
-moz-appearance:none;
appearance:none;
cursor:pointer;
}
15
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
3
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
4
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
4
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
8
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
|
show 6 more comments
EDIT: I found this awesome library that replaces the standard "select" element in HTML with awesomely styled "select" elements: Select2 - https://select2.github.io/examples.html
In 2011 you may have not been able to style the select "option" element, but it's 2015! You can totally style it! I don't understand some of the answers from 2014 saying you can't style it! CSS3 works wonders. I tried this in my own code, and the pull down "options" were styled just like how you would style the "select"
http://cssdeck.com/labs/styling-select-box-with-css3
Here's some example code!
select {
padding:3px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
-webkit-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
-moz-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
background: black;
color:#888;
border:none;
outline:none;
display: inline-block;
-webkit-appearance:none;
-moz-appearance:none;
appearance:none;
cursor:pointer;
}
EDIT: I found this awesome library that replaces the standard "select" element in HTML with awesomely styled "select" elements: Select2 - https://select2.github.io/examples.html
In 2011 you may have not been able to style the select "option" element, but it's 2015! You can totally style it! I don't understand some of the answers from 2014 saying you can't style it! CSS3 works wonders. I tried this in my own code, and the pull down "options" were styled just like how you would style the "select"
http://cssdeck.com/labs/styling-select-box-with-css3
Here's some example code!
select {
padding:3px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
-webkit-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
-moz-box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
box-shadow: 0 3px 0 #ccc, 0 -1px #fff inset;
background: black;
color:#888;
border:none;
outline:none;
display: inline-block;
-webkit-appearance:none;
-moz-appearance:none;
appearance:none;
cursor:pointer;
}
edited Mar 3 '15 at 23:35
answered Feb 11 '15 at 23:55
Katie SKatie S
26.8k116584
26.8k116584
15
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
3
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
4
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
4
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
8
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
|
show 6 more comments
15
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
3
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
4
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
4
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
8
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
15
15
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
Because the question is about styling the option element, not the select element.
– Jsalinas
Feb 25 '15 at 21:37
3
3
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
This answer is misleading, because while you explicitly show that you can style the select, you claim that the option is what can be styled, even though it's an OS element that only accepts minimal CSS styling at all.
– Andrew Gray
Jun 22 '15 at 19:42
4
4
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
update: it's 2016 and it's still a pain
– David
Jul 5 '16 at 20:54
4
4
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
~~It's 2018 and is still a pain!~~ uh.. well, I'll edit this in 2018.
– Thomas Praxl
Jun 7 '17 at 20:41
8
8
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
it's 2018, legit, and it's still a pain
– joshuaaron
Jan 15 '18 at 22:05
|
show 6 more comments
Seems like I can just set the CSS for the select
in Chrome directly. CSS and HTML code provided below :
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
5
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
1
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
2
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
2
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
|
show 1 more comment
Seems like I can just set the CSS for the select
in Chrome directly. CSS and HTML code provided below :
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
5
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
1
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
2
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
2
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
|
show 1 more comment
Seems like I can just set the CSS for the select
in Chrome directly. CSS and HTML code provided below :
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
Seems like I can just set the CSS for the select
in Chrome directly. CSS and HTML code provided below :
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
.boldoption {
font-weight: bold;
}
<select>
<option>Some normal-font option</option>
<option>Another normal-font option</option>
<option class="boldoption">Some bold option</option>
</select>
edited Sep 18 '18 at 3:29
answered Apr 28 '16 at 12:24
HoldOffHungerHoldOffHunger
4,08922349
4,08922349
5
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
1
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
2
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
2
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
|
show 1 more comment
5
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
1
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
2
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
2
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
5
5
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
didn't work for me...
– Muhamed Al Khalil
Jan 23 '18 at 19:08
1
1
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
@Muhamed Al Khalil: I updated the example to be more clear, since the currently selected option has its own style, too. If that doesn't work, I suspect browser compatibility issues, then. =
– HoldOffHunger
Jan 23 '18 at 19:48
2
2
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
this did not work on my Firefox
– Akash
Jul 4 '18 at 11:15
2
2
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
@Akash: Interesting, this worked on Firefox before they released Firefox Quantum, and it still currently works on Chrome (60%+ of users). I bet it's a bug!
– HoldOffHunger
Jul 4 '18 at 13:07
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
doesn't work for me on Chrome on Mac.
– virmaior
Sep 18 '18 at 2:54
|
show 1 more comment
As already mentioned, the only way is to use a plugin that replaces <select>
functionality.
A list of jQuery plugins: http://plugins.jquery.com/tag/select/
Take a look at the example using Select2
plugin: http://jsfiddle.net/swsLokfj/23/
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
add a comment |
As already mentioned, the only way is to use a plugin that replaces <select>
functionality.
A list of jQuery plugins: http://plugins.jquery.com/tag/select/
Take a look at the example using Select2
plugin: http://jsfiddle.net/swsLokfj/23/
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
add a comment |
As already mentioned, the only way is to use a plugin that replaces <select>
functionality.
A list of jQuery plugins: http://plugins.jquery.com/tag/select/
Take a look at the example using Select2
plugin: http://jsfiddle.net/swsLokfj/23/
As already mentioned, the only way is to use a plugin that replaces <select>
functionality.
A list of jQuery plugins: http://plugins.jquery.com/tag/select/
Take a look at the example using Select2
plugin: http://jsfiddle.net/swsLokfj/23/
edited May 22 '15 at 4:00
answered Jan 13 '15 at 11:18
AlexMAlexM
2,11611216
2,11611216
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
add a comment |
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
In current jQuery Select2 4.x, the way to do this is now different. See: example, docs.
– tanius
Jan 25 at 21:08
add a comment |
Bootstrap allows you to use styling via 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/
3
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
add a comment |
Bootstrap allows you to use styling via 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/
3
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
add a comment |
Bootstrap allows you to use styling via 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/
Bootstrap allows you to use styling via 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/
answered Nov 17 '16 at 17:29
BhetzieBhetzie
1,41562335
1,41562335
3
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
add a comment |
3
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
3
3
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
HTML embedded in data attributes makes me feel really icky.
– Beejamin
Jun 5 '17 at 13:47
add a comment |
Leaving here a quick alternative, using class toggle on a table. The behavior is very similar than a select, but can be styled with transition, filters and colors, each children individually.
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>
add a comment |
Leaving here a quick alternative, using class toggle on a table. The behavior is very similar than a select, but can be styled with transition, filters and colors, each children individually.
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>
add a comment |
Leaving here a quick alternative, using class toggle on a table. The behavior is very similar than a select, but can be styled with transition, filters and colors, each children individually.
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>
Leaving here a quick alternative, using class toggle on a table. The behavior is very similar than a select, but can be styled with transition, filters and colors, each children individually.
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>
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>
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>
edited May 16 '18 at 8:26
answered May 16 '18 at 4:18
CryptopatCryptopat
1,78511823
1,78511823
add a comment |
add a comment |
This element is rendered by the OS, not HTML. It cannot be styled via CSS.
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
try this it may help you
[ https://codepen.io/venu9l/pen/jeNXzY][1]
add a comment |
This element is rendered by the OS, not HTML. It cannot be styled via CSS.
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
try this it may help you
[ https://codepen.io/venu9l/pen/jeNXzY][1]
add a comment |
This element is rendered by the OS, not HTML. It cannot be styled via CSS.
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
try this it may help you
[ https://codepen.io/venu9l/pen/jeNXzY][1]
This element is rendered by the OS, not HTML. It cannot be styled via CSS.
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
try this it may help you
[ https://codepen.io/venu9l/pen/jeNXzY][1]
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
$(function() {
var clicky;
var t=0;
$(document).mousedown(function(e) {
clicky = $(e.target);
});
$(document).mouseup(function(e) {
clicky = null;
});
$("select").focusout(function(e) {
if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
$(this).parents().children("span.selected").html(clicky.html());
$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
}
$(this).parents().children("span.lists").html('');
});
$('select > option').text(function(i, text) {
var attr = $(this).attr('selected');
if (typeof attr !== typeof undefined && attr !== false) {
$(this).parents().parents().children("span.selected").html(text);
}
});
$("select").focusin(function(){
$(this).children('option').text(function(i, text) {
$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
});
});
});
select {
width: 0px;
height: 0px;
overflow:hidden;
outline: none;
border: none;
appearance:none;
-moz-appearance: none;
}
label{
display: inline-block;
padding: 5px 10px;
position: relative;
width: 100px;
height: 20px;
background-color:#ccc;
}
label .selected{
display: inline-block;
overflow: hidden;
width: 100%;
height: 100%;
}
label span.lists{
width: 100%;
display: inline-block;
position: absolute;
top: 100%;
left: 0px;
box-shadow: 0px 0px 2px 0px #ccc;
background-color:#fff;
z-index: 9;
}
label span.item{
display: inline-block;
width: 100%;
border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form action="?" method="GET">
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2" selected>item 2</option>
<option value="3">item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<label><span class="selected">select..</span> <span class="lists"></span>
<select name="test2">
<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
<option value="2">item 2</option>
<option value="3" selected>item 3</option>
<option value="4">item 4</option>
</select>
</label><br>
<button>Submit</button>
</form>
</body>
</html>
answered Sep 27 '18 at 15:12
Venkat GVenkat G
414
414
add a comment |
add a comment |
Some properties can be styled for<option>
tag:
font-family
color
font-*
background-color
Also you can use custom font for individual <option>
tag, for example any google font, Material Icons or other icon fonts from icomoon or alike. (That may come handy for font selectors etc.)
Considering that, you can create font-family stack and insert icons in <option>
tags, eg.
<select>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">a ★★★</option>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">b ★★★★</option>
</select>
where ★
is taken from Icons
and the rest is from Roboto
.
Note though that custom fonts do not work for mobile select.
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
1
Remove quotes overred
: <option style="color: red;">
– dy_
Jan 7 '17 at 17:26
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
add a comment |
Some properties can be styled for<option>
tag:
font-family
color
font-*
background-color
Also you can use custom font for individual <option>
tag, for example any google font, Material Icons or other icon fonts from icomoon or alike. (That may come handy for font selectors etc.)
Considering that, you can create font-family stack and insert icons in <option>
tags, eg.
<select>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">a ★★★</option>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">b ★★★★</option>
</select>
where ★
is taken from Icons
and the rest is from Roboto
.
Note though that custom fonts do not work for mobile select.
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
1
Remove quotes overred
: <option style="color: red;">
– dy_
Jan 7 '17 at 17:26
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
add a comment |
Some properties can be styled for<option>
tag:
font-family
color
font-*
background-color
Also you can use custom font for individual <option>
tag, for example any google font, Material Icons or other icon fonts from icomoon or alike. (That may come handy for font selectors etc.)
Considering that, you can create font-family stack and insert icons in <option>
tags, eg.
<select>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">a ★★★</option>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">b ★★★★</option>
</select>
where ★
is taken from Icons
and the rest is from Roboto
.
Note though that custom fonts do not work for mobile select.
Some properties can be styled for<option>
tag:
font-family
color
font-*
background-color
Also you can use custom font for individual <option>
tag, for example any google font, Material Icons or other icon fonts from icomoon or alike. (That may come handy for font selectors etc.)
Considering that, you can create font-family stack and insert icons in <option>
tags, eg.
<select>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">a ★★★</option>
<option style="font-family: 'Icons', 'Roboto', sans-serif;">b ★★★★</option>
</select>
where ★
is taken from Icons
and the rest is from Roboto
.
Note though that custom fonts do not work for mobile select.
edited Aug 16 '16 at 0:10
answered Aug 15 '16 at 21:15
dy_dy_
2,15721724
2,15721724
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
1
Remove quotes overred
: <option style="color: red;">
– dy_
Jan 7 '17 at 17:26
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
add a comment |
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
1
Remove quotes overred
: <option style="color: red;">
– dy_
Jan 7 '17 at 17:26
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
<option style="color: 'red';"> doesn't works for me... suggestion?
– fabio
Jan 6 '17 at 11:21
1
1
Remove quotes over
red
: <option style="color: red;">– dy_
Jan 7 '17 at 17:26
Remove quotes over
red
: <option style="color: red;">– dy_
Jan 7 '17 at 17:26
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
This straight up does not work, period.
– frabjous
Feb 2 '18 at 20:56
add a comment |
It's 2017 and it IS possible to target specific select options. In my project I have a table with a class="variations", and the select options are in the table cell td="value", and the select has an ID select#pa_color.
The option element also has a class option="attached" (among other class tags).
If a user is logged in as a wholesale customer, they can see all of the color options. But retail customers are not allowed to purchase 2 color options, so I've disabled them
<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>
It took a little logic, but here is how I targeted the disabled select options.
CSS
table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}
With that, my color options are only visible to wholesale customers.
add a comment |
It's 2017 and it IS possible to target specific select options. In my project I have a table with a class="variations", and the select options are in the table cell td="value", and the select has an ID select#pa_color.
The option element also has a class option="attached" (among other class tags).
If a user is logged in as a wholesale customer, they can see all of the color options. But retail customers are not allowed to purchase 2 color options, so I've disabled them
<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>
It took a little logic, but here is how I targeted the disabled select options.
CSS
table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}
With that, my color options are only visible to wholesale customers.
add a comment |
It's 2017 and it IS possible to target specific select options. In my project I have a table with a class="variations", and the select options are in the table cell td="value", and the select has an ID select#pa_color.
The option element also has a class option="attached" (among other class tags).
If a user is logged in as a wholesale customer, they can see all of the color options. But retail customers are not allowed to purchase 2 color options, so I've disabled them
<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>
It took a little logic, but here is how I targeted the disabled select options.
CSS
table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}
With that, my color options are only visible to wholesale customers.
It's 2017 and it IS possible to target specific select options. In my project I have a table with a class="variations", and the select options are in the table cell td="value", and the select has an ID select#pa_color.
The option element also has a class option="attached" (among other class tags).
If a user is logged in as a wholesale customer, they can see all of the color options. But retail customers are not allowed to purchase 2 color options, so I've disabled them
<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>
It took a little logic, but here is how I targeted the disabled select options.
CSS
table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}
With that, my color options are only visible to wholesale customers.
edited Feb 28 '18 at 7:53
weBBer
4,23542050
4,23542050
answered Aug 28 '17 at 22:04
Mr. GarrisonMr. Garrison
2617
2617
add a comment |
add a comment |
You can use inline styles to add custome styling to <option>
tags.
For eg : <option style="font-weight:bold;color:#09C;">Option 1</option>
This will apply the styles to this particular <option>
element only.
Then you can use a bit of javascript magic to apply the inline styles to all of the <option>
elements within a <select>
tag like so :
var select = $(document).getElementById('#select-element-id')
var option = select.children('#option-element-id')
option.css('font-weight', 'bold')
option.css('font-size', '24px')
You can also use <option value="" disabled> <br> </option>
to add a line-break between the options.
add a comment |
You can use inline styles to add custome styling to <option>
tags.
For eg : <option style="font-weight:bold;color:#09C;">Option 1</option>
This will apply the styles to this particular <option>
element only.
Then you can use a bit of javascript magic to apply the inline styles to all of the <option>
elements within a <select>
tag like so :
var select = $(document).getElementById('#select-element-id')
var option = select.children('#option-element-id')
option.css('font-weight', 'bold')
option.css('font-size', '24px')
You can also use <option value="" disabled> <br> </option>
to add a line-break between the options.
add a comment |
You can use inline styles to add custome styling to <option>
tags.
For eg : <option style="font-weight:bold;color:#09C;">Option 1</option>
This will apply the styles to this particular <option>
element only.
Then you can use a bit of javascript magic to apply the inline styles to all of the <option>
elements within a <select>
tag like so :
var select = $(document).getElementById('#select-element-id')
var option = select.children('#option-element-id')
option.css('font-weight', 'bold')
option.css('font-size', '24px')
You can also use <option value="" disabled> <br> </option>
to add a line-break between the options.
You can use inline styles to add custome styling to <option>
tags.
For eg : <option style="font-weight:bold;color:#09C;">Option 1</option>
This will apply the styles to this particular <option>
element only.
Then you can use a bit of javascript magic to apply the inline styles to all of the <option>
elements within a <select>
tag like so :
var select = $(document).getElementById('#select-element-id')
var option = select.children('#option-element-id')
option.css('font-weight', 'bold')
option.css('font-size', '24px')
You can also use <option value="" disabled> <br> </option>
to add a line-break between the options.
answered Jul 19 '18 at 14:30
Vinayak MukherjeeVinayak Mukherjee
112
112
add a comment |
add a comment |
It's 100% work, basically the select option is rendered by os not by html. That's by the CSS style doesn't effect,.. generally option{font-size : value ; background-color:color code; border-radius:value; } this case work, but we can't customize the padding ,margin etc..
Below code 100% work to customize select tag
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
add a comment |
It's 100% work, basically the select option is rendered by os not by html. That's by the CSS style doesn't effect,.. generally option{font-size : value ; background-color:color code; border-radius:value; } this case work, but we can't customize the padding ,margin etc..
Below code 100% work to customize select tag
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
add a comment |
It's 100% work, basically the select option is rendered by os not by html. That's by the CSS style doesn't effect,.. generally option{font-size : value ; background-color:color code; border-radius:value; } this case work, but we can't customize the padding ,margin etc..
Below code 100% work to customize select tag
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
It's 100% work, basically the select option is rendered by os not by html. That's by the CSS style doesn't effect,.. generally option{font-size : value ; background-color:color code; border-radius:value; } this case work, but we can't customize the padding ,margin etc..
Below code 100% work to customize select tag
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
/*for each element, create a new DIV that will act as the selected item:*/
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
/*for each element, create a new DIV that will contain the option list:*/
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < selElmnt.length; j++) {
/*for each option in the original select element,
create a new DIV that will act as an option item:*/
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function(e) {
/*when an item is clicked, update the original select box,
and the selected item:*/
var y, i, k, s, h;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
h = this.parentNode.previousSibling;
for (i = 0; i < s.length; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
for (k = 0; k < y.length; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function(e) {
/*when the select box is clicked, close any other select boxes,
and open/close the current select box:*/
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
/*a function that will close all select boxes in the document,
except the current select box:*/
var x, y, i, arrNo = ;
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
for (i = 0; i < y.length; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < x.length; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
position: relative;
font-family: Arial;
}
.custom-select select {
display: none; /*hide original SELECT element:*/
}
.select-selected {
background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
color: #ffffff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
/*style items (options):*/
.select-items {
position: absolute;
background-color: DodgerBlue;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
<select>
<option value="0">Select car:</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Citroen</option>
<option value="4">Ford</option>
<option value="5">Honda</option>
<option value="6">Jaguar</option>
<option value="7">Land Rover</option>
<option value="8">Mercedes</option>
<option value="9">Mini</option>
<option value="10">Nissan</option>
<option value="11">Toyota</option>
<option value="12">Volvo</option>
</select>
</div>
edited Oct 22 '18 at 13:43
answered Oct 20 '18 at 7:26
Harikrishnan kHarikrishnan k
214
214
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
add a comment |
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
From Review: Hi, please don't answer just with source code. Try to provide a nice description about how your solution works. See: How do I write a good answer?. Thanks
– sɐunıɔןɐqɐp
Oct 20 '18 at 7:52
add a comment |
You can add a class and gives font-weight:700; in option. But by using this all the text will become bold.
add a comment |
You can add a class and gives font-weight:700; in option. But by using this all the text will become bold.
add a comment |
You can add a class and gives font-weight:700; in option. But by using this all the text will become bold.
You can add a class and gives font-weight:700; in option. But by using this all the text will become bold.
answered Nov 28 '18 at 6:25
Anas ChaudharyAnas Chaudhary
1
1
add a comment |
add a comment |
Actually you can add :before and :after and style those. At least it's something
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;
}
add a comment |
Actually you can add :before and :after and style those. At least it's something
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;
}
add a comment |
Actually you can add :before and :after and style those. At least it's something
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;
}
Actually you can add :before and :after and style those. At least it's something
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;
}
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;
}
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;
}
answered Oct 16 '17 at 14:40
ProSales SoftwaresystemeProSales Softwaresysteme
1
1
add a comment |
add a comment |
Like stated above, not really possible; however, if you just want to style the initial state for something like a 'Select Product...' option before a user interacts with the field, you could do something like below --
The below example styles (technically all) the first option red and once a user interacts will remove that option (which has the value="defaultValue" set) and remove the class applied to the select. You can apply other options besides color as well, but they will only affect the field once changed, not the list view.
CSS
.default-value{
color: red;
}
jQuery
$("select").addClass('default-value');
$("select").bind("focus", function () {
$(this).children('option[value="defaultValue"]').remove();
$(this).removeClass('default-value');
});
add a comment |
Like stated above, not really possible; however, if you just want to style the initial state for something like a 'Select Product...' option before a user interacts with the field, you could do something like below --
The below example styles (technically all) the first option red and once a user interacts will remove that option (which has the value="defaultValue" set) and remove the class applied to the select. You can apply other options besides color as well, but they will only affect the field once changed, not the list view.
CSS
.default-value{
color: red;
}
jQuery
$("select").addClass('default-value');
$("select").bind("focus", function () {
$(this).children('option[value="defaultValue"]').remove();
$(this).removeClass('default-value');
});
add a comment |
Like stated above, not really possible; however, if you just want to style the initial state for something like a 'Select Product...' option before a user interacts with the field, you could do something like below --
The below example styles (technically all) the first option red and once a user interacts will remove that option (which has the value="defaultValue" set) and remove the class applied to the select. You can apply other options besides color as well, but they will only affect the field once changed, not the list view.
CSS
.default-value{
color: red;
}
jQuery
$("select").addClass('default-value');
$("select").bind("focus", function () {
$(this).children('option[value="defaultValue"]').remove();
$(this).removeClass('default-value');
});
Like stated above, not really possible; however, if you just want to style the initial state for something like a 'Select Product...' option before a user interacts with the field, you could do something like below --
The below example styles (technically all) the first option red and once a user interacts will remove that option (which has the value="defaultValue" set) and remove the class applied to the select. You can apply other options besides color as well, but they will only affect the field once changed, not the list view.
CSS
.default-value{
color: red;
}
jQuery
$("select").addClass('default-value');
$("select").bind("focus", function () {
$(this).children('option[value="defaultValue"]').remove();
$(this).removeClass('default-value');
});
edited Apr 27 '13 at 15:41
Victor Bjelkholm
1,32272247
1,32272247
answered Jul 27 '12 at 22:47
Stephen SprinkleStephen Sprinkle
1,0121113
1,0121113
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f7208786%2fhow-to-style-the-option-of-a-html-select%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Not sure about this one. By I think not. You'll need some JavaScript (jQuery) magic for that to happen.
– Madara Uchiha♦
Aug 26 '11 at 18:04
5
options are still just as annoying to style as they have ever been. what you may want to use is an optgroup: htmlhelp.com/reference/html40/forms/optgroup.html this will give you a bold and italicized category (like Electronics) under which a bunch of options fall.
– wolv2012
Aug 26 '11 at 18:07