CSS :selected pseudo class similar to :checked, but for option elements
the
:checked
pseudo-class initially applies to such elements that have the HTML4selected
andchecked
attributes
Source: w3.org
So, this CSS works, although styling the color
is not possible in every browser:
option:checked { color: red; }
An example of this in action, hiding the currently selected item from the drop down list.
option:checked { display:none; }
<select> <option>A</option> <option>B</option> <option>C</option></select>
Selected select pseudo-class
No there is no such pseudo-class. Could be because a regular select
element always has an option
selected. This is not the case on select multiple
elements.
Styling selected option
try this .
.your-select option:checked {
background:#333;padding:20px;width:100px;border:3px solid #F00
}
<select multiple class="your-select">
<option class="opt1" value="">Option 1</option>
<option class="opt2" value="">Option 2</option>
</select>
CSS Selector to Match All Other Elements of Same Class Except Selected One (This)
Consider a container for your elements and you can easily do this:
.box { display:inline-block;}.box:hover a { color:red;}.box a:hover { color:initial;}
<div class="box"><a href="#" class="foo">Hello!</a><a href="#" class="foo">¡Hola!</a><a href="#" class="foo">Bonjour !</a></div>
Detecting if an option has been selected in select using CSS
Yes, the :checked
pseudo-class also targets <option>
tags.
Example:
option:checked { display:none; }
Source:
http://www.w3.org/TR/selectors/#checked
EDIT:
If you want to target an element outside of your <select>
, it can be done in a hacky way by manipulating the :valid
css pseudo-class. Note that the required
attribute must be enabled for the <select>
tag to register as valid/invalid.
Example:
body { background-color: #fff;}
select:valid ~ label { background-color: red;}
<select required> <option value="" selected>Please select an option</option> <option>1</option> <option>2</option></select><label>Please select an option</label>
Pseudo elements and SELECT tag
Well, it looks like the select
tags doesn't allow :after
or :before
pseudos because they are customized by each vendor, so it's quite hard to modify them and that's because they don't allow :before
or :after
pseudo elements on them.
To everyone who sees this, there's a good option to create a custom select
element with jQuery and minimal modification… Create a select and then use jQuery to edit it:
// Iterate over each select element$('select').each(function() { // Cache the number of options var $this = $(this), numberOfOptions = $(this).children('option').length;
// Hides the select element $this.addClass('s-hidden');
// Wrap the select element in a div $this.wrap('<div class="select"></div>');
// Insert a styled div to sit over the top of the hidden select element $this.after('<div class="styledSelect"></div>');
// Cache the styled div var $styledSelect = $this.next('div.styledSelect');
// Show the first select option in the styled div $styledSelect.text($this.children('option').eq(0).text());
// Insert an unordered list after the styled div and also cache the list var $list = $('<ul />', { 'class': 'options' }).insertAfter($styledSelect);
// Insert a list item into the unordered list for each select option for (var i = 0; i < numberOfOptions; i++) { $('<li />', { text: $this.children('option').eq(i).text(), rel: $this.children('option').eq(i).val() }).appendTo($list); }
// Cache the list items var $listItems = $list.children('li');
// Show the unordered list when the styled div is clicked (also hides it if the div is clicked again) $styledSelect.click(function(e) { e.stopPropagation(); $('div.styledSelect.active').each(function() { $(this).removeClass('active').next('ul.options').hide(); }); $(this).toggleClass('active').next('ul.options').toggle(); });
// Hides the unordered list when a list item is clicked and updates the styled div to show the selected list item // Updates the select element to have the value of the equivalent option $listItems.click(function(e) { e.stopPropagation(); $styledSelect.text($(this).text()).removeClass('active'); $this.val($(this).attr('rel')); $list.hide(); /* alert($this.val()); Uncomment this for demonstration! */ });
// Hides the unordered list when clicking outside of it $(document).click(function() { $styledSelect.removeClass('active'); $list.hide(); });});
body { padding: 50px; background-color: white;}
.s-hidden { visibility: hidden; padding-right: 10px;}
.select { cursor: pointer; display: inline-block; position: relative; font: normal 11px/22px Arial, Sans-Serif; color: black; border: 1px solid #ccc;}
.styledSelect { position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-color: white; padding: 0 10px; font-weight: bold;}
.styledSelect:after { content: ""; width: 0; height: 0; border: 5px solid transparent; border-color: black transparent transparent transparent; position: absolute; top: 9px; right: 6px;}
.styledSelect:active,.styledSelect.active { background-color: #eee;}
.options { display: none; position: absolute; top: 100%; right: 0; left: 0; z-index: 999; margin: 0 0; padding: 0 0; list-style: none; border: 1px solid #ccc; background-color: white; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);}
.options li { padding: 0 6px; margin: 0 0; padding: 0 10px;}
.options li:hover { background-color: #39f; color: white;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="selectbox1"> <option value="">Select an option…</option> <option value="aye">Aye</option> <option value="eh">Eh</option> <option value="ooh">Ooh</option> <option value="whoop">Whoop</option></select>
<select id="selectbox2"> <option value="">Month…</option> <option value="january">January</option> <option value="february">February</option> <option value="march">March</option> <option value="april">April</option> <option value="may">May</option> <option value="june">June</option> <option value="july">July</option> <option value="august">August</option> <option value="september">September</option> <option value="october">October</option> <option value="november">November</option> <option value="december">December</option></select>
Selecting checked element in CSS
There is no pseudo selector for marking select boxes the way you imagine. So the answer to your original question is No :(
But if you dont mind using a tiny bit of JavaScript then you can emulate the feature you desire. You can add a class to the select box's onchange method. Ideally this should be done from the bottom of the page inside a script tag. I m doing it inline only as a demo:
<select id="razred" name="razred" onchange='this.className="visited"'>
And then you could just define the custom class the way you want
.visited {
color: #f00;
-webkit-appearance: none; /*required for webkit based browsers*/
}
JSFiddle: http://jsfiddle.net/9K5h2/1
Related Topics
How to Apply a Style to an Embedded Svg
Center Image Horizontally Within a Div
Draw on Html5 Canvas Using a Mouse
Is There an Equivalent to Background-Size: Cover and Contain For Image Elements
When to Use the !Important Property in Css
Position Footer At Bottom of Page Having Fixed Header
What Does "For" Attribute Do in HTML ≪Label≫ Tag
How to Send Email from HTML Form
How to Reformat HTML Code Using Sublime Text 2
Background: Fixed No Repeat Not Working on Mobile
How to Wrap Text Around a Bottom-Right Div
Can You Provide Examples of Parsing Html
Minimum and Maximum Value of Z-Index
Maintain Aspect Ratio of Div But Fill Screen Width and Height in Css
Center Text Over an Image in Flexbox
Why the Content Is Not Covered by the Background of an Overlapping Element