You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
4.9 KiB
SCSS
214 lines
4.9 KiB
SCSS
2 years ago
|
/**
|
||
|
* Dropdown ([role="list"])
|
||
|
*/
|
||
|
|
||
|
// Menu
|
||
|
details[role="list"],
|
||
|
li[role="list"] {
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
details[role="list"] summary + ul,
|
||
|
li[role="list"] > ul {
|
||
|
display: flex;
|
||
|
z-index: 99;
|
||
|
position: absolute;
|
||
|
top: auto;
|
||
|
right: 0;
|
||
|
left: 0;
|
||
|
flex-direction: column;
|
||
|
margin: 0;
|
||
|
padding: 0;
|
||
|
border: var(--border-width) solid var(--dropdown-border-color);
|
||
|
border-radius: var(--border-radius);
|
||
|
border-top-right-radius: 0;
|
||
|
border-top-left-radius: 0;
|
||
|
background-color: var(--dropdown-background-color);
|
||
|
box-shadow: var(--card-box-shadow);
|
||
|
color: var(--dropdown-color);
|
||
|
white-space: nowrap;
|
||
|
|
||
|
li {
|
||
|
width: 100%;
|
||
|
margin-bottom: 0;
|
||
|
padding: calc(var(--form-element-spacing-vertical) * 0.5)
|
||
|
var(--form-element-spacing-horizontal);
|
||
|
list-style: none;
|
||
|
|
||
|
&:first-of-type {
|
||
|
margin-top: calc(var(--form-element-spacing-vertical) * 0.5);
|
||
|
}
|
||
|
|
||
|
&:last-of-type {
|
||
|
margin-bottom: calc(var(--form-element-spacing-vertical) * 0.5);
|
||
|
}
|
||
|
|
||
|
a {
|
||
|
display: block;
|
||
|
margin: calc(var(--form-element-spacing-vertical) * -0.5)
|
||
|
calc(var(--form-element-spacing-horizontal) * -1);
|
||
|
padding: calc(var(--form-element-spacing-vertical) * 0.5)
|
||
|
var(--form-element-spacing-horizontal);
|
||
|
overflow: hidden;
|
||
|
color: var(--dropdown-color);
|
||
|
text-decoration: none;
|
||
|
text-overflow: ellipsis;
|
||
|
|
||
|
&:hover {
|
||
|
background-color: var(--dropdown-hover-background-color);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Marker
|
||
|
details[role="list"] summary,
|
||
|
li[role="list"] > a {
|
||
|
&::after {
|
||
|
display: block;
|
||
|
width: 1rem;
|
||
|
height: calc(1rem * var(--line-height, 1.5));
|
||
|
margin-inline-start: 0.5rem;
|
||
|
float: right;
|
||
|
transform: rotate(0deg);
|
||
|
background-position: right center;
|
||
|
background-size: 1rem auto;
|
||
|
background-repeat: no-repeat;
|
||
|
content: "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Global dropdown only
|
||
|
details[role="list"] {
|
||
|
padding: 0;
|
||
|
border-bottom: none;
|
||
|
|
||
|
// Style <summary> as <select>
|
||
|
summary {
|
||
|
margin-bottom: 0;
|
||
|
|
||
|
&:not([role]) {
|
||
|
height: calc(
|
||
|
1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 +
|
||
|
var(--border-width) * 2
|
||
|
);
|
||
|
padding: var(--form-element-spacing-vertical)
|
||
|
var(--form-element-spacing-horizontal);
|
||
|
border: var(--border-width) solid var(--form-element-border-color);
|
||
|
border-radius: var(--border-radius);
|
||
|
background-color: var(--form-element-background-color);
|
||
|
color: var(--form-element-placeholder-color);
|
||
|
line-height: inherit;
|
||
|
cursor: pointer;
|
||
|
|
||
|
@if $enable-transitions {
|
||
|
transition: background-color var(--transition),
|
||
|
border-color var(--transition), color var(--transition),
|
||
|
box-shadow var(--transition);
|
||
|
}
|
||
|
|
||
|
&:active,
|
||
|
&:focus {
|
||
|
border-color: var(--form-element-active-border-color);
|
||
|
background-color: var(--form-element-active-background-color);
|
||
|
}
|
||
|
|
||
|
&:focus {
|
||
|
box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Close for details[role="list"]
|
||
|
&[open] summary {
|
||
|
border-bottom-right-radius: 0;
|
||
|
border-bottom-left-radius: 0;
|
||
|
|
||
|
&::before {
|
||
|
display: block;
|
||
|
z-index: 1;
|
||
|
position: fixed;
|
||
|
top: 0;
|
||
|
right: 0;
|
||
|
bottom: 0;
|
||
|
left: 0;
|
||
|
background: none;
|
||
|
content: "";
|
||
|
cursor: default;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// All Dropdowns inside <nav>
|
||
|
nav details[role="list"] summary,
|
||
|
nav li[role="list"] a {
|
||
|
display: flex;
|
||
|
direction: ltr;
|
||
|
}
|
||
|
|
||
|
nav details[role="list"] summary + ul,
|
||
|
nav li[role="list"] > ul {
|
||
|
min-width: fit-content;
|
||
|
border-radius: var(--border-radius);
|
||
|
|
||
|
li a {
|
||
|
border-radius: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Dropdowns inside <nav> as nested <details>
|
||
|
nav details[role="list"] {
|
||
|
summary,
|
||
|
summary:not([role]) {
|
||
|
height: auto;
|
||
|
padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);
|
||
|
}
|
||
|
|
||
|
&[open] summary {
|
||
|
border-radius: var(--border-radius);
|
||
|
}
|
||
|
|
||
|
summary + ul {
|
||
|
margin-top: var(--outline-width);
|
||
|
margin-inline-start: 0;
|
||
|
}
|
||
|
|
||
|
summary[role="link"] {
|
||
|
margin-bottom: calc(var(--nav-link-spacing-vertical) * -1);
|
||
|
line-height: var(--line-height);
|
||
|
|
||
|
+ ul {
|
||
|
margin-top: calc(var(--nav-link-spacing-vertical) + var(--outline-width));
|
||
|
margin-inline-start: calc(var(--nav-link-spacing-horizontal) * -1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Dropdowns inside a <nav> without using <details>
|
||
|
li[role="list"] {
|
||
|
// Open on hover (for mobile)
|
||
|
// or on active/focus (for keyboard navigation)
|
||
|
&:hover > ul,
|
||
|
a:active ~ ul,
|
||
|
a:focus ~ ul {
|
||
|
display: flex;
|
||
|
}
|
||
|
|
||
|
> ul {
|
||
|
display: none;
|
||
|
margin-top: calc(var(--nav-link-spacing-vertical) + var(--outline-width));
|
||
|
margin-inline-start: calc(
|
||
|
var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
> a::after {
|
||
|
background-image: var(--icon-chevron);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
label > details[role="list"] {
|
||
|
margin-top: calc(var(--spacing) * .25);
|
||
|
margin-bottom: var(--spacing);
|
||
|
}
|