<select>
<button>
<selectedcontent></selectedcontent>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="m6 9 6 6 6-6"></path>
</svg>
</button>
<optgroup>
<label>Fruits</label>
<option value="" hidden disabled selected>Select a Fruit</option>
<option>Apple</option>
<option>Banana</option>
<option>Blueberry</option>
<option>Grapes</option>
<option>Pineapple</option>
</optgroup>
</select>
body {
font-family: sans-serif;
}
select {
appearance: base-select;
color: #71717a;
background-color: transparent;
width: 180px;
box-sizing: border-box;
padding: 0.5rem 0.75rem;
border: 1px solid #e4e4e7;
border-radius: calc(0.5rem - 2px);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
cursor: pointer;
& > button {
display: flex;
width: 100%;
font-family: inherit;
color: currentColor;
& > svg {
margin: 0 0 0 auto;
width: 1.2rem;
height: 1.2rem;
}
}
&:has(option:not([hidden]):checked) {
color: #18181b;
}
&:focus-visible {
outline: 2px solid #a1a1aa;
outline-offset: -1px;
}
&::picker-icon {
display: none;
}
&::picker(select) {
appearance: base-select;
border: 1px solid #e4e4e7;
padding: 0.25rem;
margin-top: 0.25rem;
border-radius: calc(0.5rem - 2px);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -2px rgba(0, 0, 0, 0.1);
cursor: default;
transition: opacity 225ms ease-in-out, transform 225ms ease-in-out;
transform-origin: top;
transform: translateY(0);
opacity: 1;
@starting-style {
transform: translateY(-0.25rem) scale(0.95);
opacity: 0;
}
}
& optgroup label {
display: block;
padding: 0.375rem 0.5rem;
}
& option {
padding: 0.375rem 0.5rem;
border-radius: calc(0.5rem - 4px);
outline: none;
&::after {
content: "";
width: 1rem;
height: 1.5rem;
margin-left: auto;
opacity: 0;
background: center / contain no-repeat
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2318181b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'%3E%3C/path%3E%3C/svg%3E");
}
&::checkmark {
display: none;
}
&:checked {
background-color: transparent;
&::after {
opacity: 1;
}
}
&:hover,
&:focus-visible {
background-color: #f4f4f5;
color: #18181b;
}
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.