I'm trying to add some CSS ::before
content to the <option>
tags of a <select multiple>
depending on if the option is selected or not.
The below is currently working fine in Chrome & FF, but I'm having issues in IE11.
select > option::before {
display: inline-block;
width: 10em;
}
select > option:checked::before {
content: "SELECTED: ";
}
select > option:not(:checked)::before {
content: "excluded: " ;
}
<select multiple>
<option value="1" selected="selected">1</option>
<option value="2" selected="selected">2</option>
<option value="3" selected="selected">3</option>
<option value="4" selected="selected">4</option>
<option value="5" selected="selected">5</option>
</select>
I've read other SO posts (1, 2, 3, 4) about pseudo elements in IE and most seem to point to setting some sort of position
or display
attribute which I've tried.
Is this happening as <option>
tags shouldn't contain child elements?
A CSS pseudo-element is a keyword added to a selector that lets you style a specific part of the selected element(s). For example, ::first-line can be used to change the font of the first line of a paragraph. Note: In contrast to pseudo-elements, pseudo-classes can be used to style an element based on its state.
Inline styles cannot be used to style pseudo-elements and pseudo-classes. For example, you can style the visited, hover, active, and link colors of an anchor tag using external and internal style sheets.
A CSS pseudo-class is a keyword added to a selector that specifies a special state of the selected element(s). For example, the pseudo-class :hover can be used to select a button when a user's pointer hovers over the button and this selected button can then be styled.
Overview. CSS pseudo-classes are used to add styles to selectors, but only when those selectors meet certain conditions. A pseudo class is expressed by adding a colon (:) after a selector in CSS, followed by a pseudo-class such as "hover", "focus", or "active", like this: a:hover { /* your style here */ }
First Lets get one thing straight we can't create what you desire in IE because it doesn't allow anything other than
<option>
,<optgroup>
tags inside a<select>
box.
This is much of a workaround I can get using CSS
only method in my opinion. If you prefer script there are plenty alternatives even select2 is one of the most used plugin for this type of customizations.
I Have used [type="checkbox"] for attain this result
jQuery is only being used to show the value.
var multyVal = [];
$('.multiple input[type="checkbox"]').each(function() {
if ($(this).is(':checked')) {
var Tval = $(this).val();
multyVal.push(Tval);
}
});
console.log($('select').val(), multyVal);
select>option::before {
display: inline-block;
width: 10em;
}
select>option:checked::before {
content: "SELECTED: ";
}
select>option:not(:checked)::before {
content: "excluded: ";
}
.multiple {
height: 60px;
display: inline-block;
overflow-y: scroll;
background: #d4d4d4;
width: 10em;
border: 1px solid #999;
margin-left: 10px;
}
.multiple [type="checkbox"] {
display: none;
}
.multiple label {
width: 100%;
float: left;
font-size: 13px;
text-align: right;
background: #fff;
}
.multiple label::before {
display: inline-block;
float: left;
font-family: arial, san-sarif;
font-size: 11px;
}
.multiple [type="checkbox"]:checked+label::before {
content: "SELECTED: ";
}
.multiple [type="checkbox"]:checked+label {
background: #666;
color: #fff;
}
.multiple [type="checkbox"]:not(:checked)+label::before {
content: "excluded: ";
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select multiple>
<option value="1" selected="selected">1</option>
<option value="2" selected="selected">2</option>
<option value="3" selected="selected">3</option>
<option value="4" >4</option>
<option value="5" >5</option>
</select>
<div class="multiple">
<input type="checkbox" name="multiple" value="1" id="rad1" checked="checked">
<label for="rad1">1</label>
<input type="checkbox" name="multiple" value="2" id="rad2" checked="checked">
<label for="rad2">2</label>
<input type="checkbox" name="multiple" value="3" id="rad3" checked="checked">
<label for="rad3">3</label>
<input type="checkbox" name="multiple" value="4" id="rad4">
<label for="rad4">4</label>
<input type="checkbox" name="multiple" value="5" id="rad5">
<label for="rad5">5</label>
</div>
Fiddle in case you want one.
Hoping this would come handy for you guys...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With