I've customized my <select>
using like this:
background-color:#ececec;
border:0;
border:1px solid #e3e3e3;
border-radius:3px;
width:100%;
font-family:'FuturaStdLightOblique', sans-serif;
font-size:16px;
color:#616263;
outline:none;
height: 40px;
But I also want to change my dropdown arrow into a look that fits this design. I would like to use the unicode triangle ▼ (▼
) as an alternative to the arrow down and if possible, set it to the same color as the texts in my select tag.
Any ideas on how I can achieve this without using anything aside from CSS/HTML? Thanks in advance.
There are many ways to design a <select> dropdown menu using CSS. The Dropdown Menu is mainly used to select an element from the list of elements. Each menu option can be defined by an <option> element that can nested inside the <select> element.
To remove it, just make the content go 'none'. One can use this feature to create navigation menus in top navbars.
maybe so?
*,
*:before,
*:after {
box-sizing: border-box;
}
* {
padding: 0;
margin: 0;
}
form {
padding: 1rem;
max-width: 400px;
margin: 1em auto;
}
.select {
height: 40px;
width: 100%;
overflow: hidden;
position: relative;
border-radius: 3px;
margin-bottom: 1em;
}
.select:after {
content: "▼";
padding: 12px 8px;
position: absolute;
right: 10px;
top: 0;
z-index: 1;
text-align: center;
width: 10%;
height: 100%;
pointer-events: none;
}
.select__field {
height: 40px;
width: 100%;
padding: 5px 15px;
color: #616263;
background-color: #ececec;
border: 1px solid #e3e3e3;
outline: none;
font-size: 16px;
-webkit-appearance: none;
/* for webkit browsers */
-moz-appearance: none;
/* for firefox */
appearance: none;
/* for modern browsers */
}
/* remove default caret for ie */
.select__field::-ms-expand {
display: none;
}
.select__field:focus:invalid {
border-color: #FD6347;
}
.select__field:required:valid {
border-color: #006400;
}
.btn-submit {
color: #fff;
display: block;
padding: 15px;
text-transform: uppercase;
background: #535C69;
width: 100%;
border: none;
border-radius: 3px;
}
<form action="#" method="post">
<div class="select">
<select name="nameValueSelect" class="select__field" required>
<option value="" selected>Choose option ...</option>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
<option>Option 4</option>
<option>Option 5</option>
<option>Option 6</option>
</select>
</div>
<button type="submit" class="btn-submit">Submit</button>
</form>
For those who like to understand and to complement Dmitriy's solution (simplified code below), this is done by:
::after
rule on the wrapper with:
So the bare-bones (literally the skeleton, only what is required) are:
.wrapper {
overflow: hidden;
position: relative;
width: 10rem; /* real length of dropdown */
}
.wrapper:after {
content: "▼";
font-size: 0.8rem;
pointer-events: none; /* ▼ click triggers dropdown */
position: absolute;
right: 0.2rem;
top: 0.3rem;
z-index: 1;
}
select {
/* remove default caret */
-webkit-appearance: none; /* webkit browsers */
-moz-appearance: none; /* firefox */
appearance: none; /* modern browsers */
width: 100%;
}
select::-ms-expand {
display: none; /* remove default caret for ie */
}
<section class="wrapper">
<select>
<option value="" selected>Choose option</option>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
</section>
The code above is in this "Select caret" Codepen if you need to try out further adjustments.
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