made dropdown appearance inline with form controls

This commit is contained in:
KiranMantha 2022-01-20 19:37:37 +05:30
parent 30ff7bc212
commit 7fb60da1e0
16 changed files with 116 additions and 167 deletions

View file

@ -1841,7 +1841,6 @@ details[open] > summary::after {
article { article {
margin: var(--block-spacing-vertical) 0; margin: var(--block-spacing-vertical) 0;
padding: var(--block-spacing-vertical) var(--block-spacing-horizontal); padding: var(--block-spacing-vertical) var(--block-spacing-horizontal);
overflow: hidden;
border-radius: var(--border-radius); border-radius: var(--border-radius);
background: var(--card-background-color); background: var(--card-background-color);
box-shadow: var(--card-box-shadow); box-shadow: var(--card-box-shadow);
@ -2058,13 +2057,16 @@ details[role=list] {
} }
details[role=list] summary { details[role=list] summary {
margin-bottom: 0; margin-bottom: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
border: var(--border-width) solid var(--form-element-border-color); border: var(--border-width) solid var(--form-element-border-color);
border-radius: var(--border-radius); border-radius: var(--border-radius);
height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);
line-height: inherit;
cursor: pointer; cursor: pointer;
} }
details[role=list] summary::after { details[role=list] summary::after {
transform: rotate(0deg); transform: rotate(0deg);
height: 100%;
} }
details[role=list] summary + ul { details[role=list] summary + ul {
z-index: 100; z-index: 100;
@ -2087,42 +2089,21 @@ details[role=list] summary + ul li {
details[role=list] summary + ul li::marker { details[role=list] summary + ul li::marker {
content: ""; content: "";
} }
details[role=list] summary + ul li input[type=radio],
details[role=list] summary + ul li input[type=checkbox] {
display: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
details[role=list] summary + ul li label { details[role=list] summary + ul li label {
cursor: pointer;
position: relative; position: relative;
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
line-height: 1;
} }
details[role=list] summary + ul li label:hover { details[role=list] summary + ul li label:hover {
background-color: var(--secondary-focus); background-color: var(--secondary-focus);
} }
details[role=list] summary + ul li input:checked + label { details[role=list] summary + ul li label input[type=radio],
background-color: var(--secondary-focus); details[role=list] summary + ul li label input[type=checkbox] {
} -webkit-appearance: none;
details[role=list] summary + ul li input[type=checkbox] + label:before { -moz-appearance: none;
display: inline-block; appearance: none;
width: calc(var(--spacing) * 1.2);
height: calc(var(--spacing) * 1.2);
margin-right: calc(var(--spacing) * 0.5);
border: var(--border-width) solid var(--primary);
border-radius: var(--border-radius);
content: "";
vertical-align: text-bottom;
}
details[role=list] summary + ul li input[type=checkbox]:checked + label:before {
background-image: var(--icon-checkbox);
background-position: center;
background-size: calc(var(--spacing) * 0.8) auto;
background-repeat: no-repeat;
background-color: var(--primary);
} }
details[role=list][disabled] summary, details[role=list].disabled summary { details[role=list][disabled] summary, details[role=list].disabled summary {
color: var(--muted-color); color: var(--muted-color);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -2019,7 +2019,6 @@ details[open] > summary::after {
article { article {
margin: var(--block-spacing-vertical) 0; margin: var(--block-spacing-vertical) 0;
padding: var(--block-spacing-vertical) var(--block-spacing-horizontal); padding: var(--block-spacing-vertical) var(--block-spacing-horizontal);
overflow: hidden;
border-radius: var(--border-radius); border-radius: var(--border-radius);
background: var(--card-background-color); background: var(--card-background-color);
box-shadow: var(--card-box-shadow); box-shadow: var(--card-box-shadow);
@ -2332,13 +2331,16 @@ details[role=list] {
} }
details[role=list] summary { details[role=list] summary {
margin-bottom: 0; margin-bottom: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
border: var(--border-width) solid var(--form-element-border-color); border: var(--border-width) solid var(--form-element-border-color);
border-radius: var(--border-radius); border-radius: var(--border-radius);
height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);
line-height: inherit;
cursor: pointer; cursor: pointer;
} }
details[role=list] summary::after { details[role=list] summary::after {
transform: rotate(0deg); transform: rotate(0deg);
height: 100%;
} }
details[role=list] summary + ul { details[role=list] summary + ul {
z-index: 100; z-index: 100;
@ -2361,42 +2363,21 @@ details[role=list] summary + ul li {
details[role=list] summary + ul li::marker { details[role=list] summary + ul li::marker {
content: ""; content: "";
} }
details[role=list] summary + ul li input[type=radio],
details[role=list] summary + ul li input[type=checkbox] {
display: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
details[role=list] summary + ul li label { details[role=list] summary + ul li label {
cursor: pointer;
position: relative; position: relative;
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
line-height: 1;
} }
details[role=list] summary + ul li label:hover { details[role=list] summary + ul li label:hover {
background-color: var(--secondary-focus); background-color: var(--secondary-focus);
} }
details[role=list] summary + ul li input:checked + label { details[role=list] summary + ul li label input[type=radio],
background-color: var(--secondary-focus); details[role=list] summary + ul li label input[type=checkbox] {
} -webkit-appearance: none;
details[role=list] summary + ul li input[type=checkbox] + label:before { -moz-appearance: none;
display: inline-block; appearance: none;
width: calc(var(--spacing) * 1.2);
height: calc(var(--spacing) * 1.2);
margin-right: calc(var(--spacing) * 0.5);
border: var(--border-width) solid var(--primary);
border-radius: var(--border-radius);
content: "";
vertical-align: text-bottom;
}
details[role=list] summary + ul li input[type=checkbox]:checked + label:before {
background-image: var(--icon-checkbox);
background-position: center;
background-size: calc(var(--spacing) * 0.8) auto;
background-repeat: no-repeat;
background-color: var(--primary);
} }
details[role=list][disabled] summary, details[role=list].disabled summary { details[role=list][disabled] summary, details[role=list].disabled summary {
color: var(--muted-color); color: var(--muted-color);

File diff suppressed because one or more lines are too long

View file

@ -1811,7 +1811,6 @@ details[open] > summary::after {
article { article {
margin: var(--block-spacing-vertical) 0; margin: var(--block-spacing-vertical) 0;
padding: var(--block-spacing-vertical) var(--block-spacing-horizontal); padding: var(--block-spacing-vertical) var(--block-spacing-horizontal);
overflow: hidden;
border-radius: var(--border-radius); border-radius: var(--border-radius);
background: var(--card-background-color); background: var(--card-background-color);
box-shadow: var(--card-box-shadow); box-shadow: var(--card-box-shadow);
@ -2028,13 +2027,16 @@ details[role=list] {
} }
details[role=list] summary { details[role=list] summary {
margin-bottom: 0; margin-bottom: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
border: var(--border-width) solid var(--form-element-border-color); border: var(--border-width) solid var(--form-element-border-color);
border-radius: var(--border-radius); border-radius: var(--border-radius);
height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);
line-height: inherit;
cursor: pointer; cursor: pointer;
} }
details[role=list] summary::after { details[role=list] summary::after {
transform: rotate(0deg); transform: rotate(0deg);
height: 100%;
} }
details[role=list] summary + ul { details[role=list] summary + ul {
z-index: 100; z-index: 100;
@ -2057,42 +2059,21 @@ details[role=list] summary + ul li {
details[role=list] summary + ul li::marker { details[role=list] summary + ul li::marker {
content: ""; content: "";
} }
details[role=list] summary + ul li input[type=radio],
details[role=list] summary + ul li input[type=checkbox] {
display: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
details[role=list] summary + ul li label { details[role=list] summary + ul li label {
cursor: pointer;
position: relative; position: relative;
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);
line-height: 1;
} }
details[role=list] summary + ul li label:hover { details[role=list] summary + ul li label:hover {
background-color: var(--secondary-focus); background-color: var(--secondary-focus);
} }
details[role=list] summary + ul li input:checked + label { details[role=list] summary + ul li label input[type=radio],
background-color: var(--secondary-focus); details[role=list] summary + ul li label input[type=checkbox] {
} -webkit-appearance: none;
details[role=list] summary + ul li input[type=checkbox] + label:before { -moz-appearance: none;
display: inline-block; appearance: none;
width: calc(var(--spacing) * 1.2);
height: calc(var(--spacing) * 1.2);
margin-right: calc(var(--spacing) * 0.5);
border: var(--border-width) solid var(--primary);
border-radius: var(--border-radius);
content: "";
vertical-align: text-bottom;
}
details[role=list] summary + ul li input[type=checkbox]:checked + label:before {
background-image: var(--icon-checkbox);
background-position: center;
background-size: calc(var(--spacing) * 0.8) auto;
background-repeat: no-repeat;
background-color: var(--primary);
} }
details[role=list][disabled] summary, details[role=list].disabled summary { details[role=list][disabled] summary, details[role=list].disabled summary {
color: var(--muted-color); color: var(--muted-color);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
css/pico.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -20,29 +20,37 @@
<article aria-label="Dropdown examples"> <article aria-label="Dropdown examples">
<details role="list"> <details role="list">
<summary aria-haspopup="listbox">Single select</summary> <summary aria-haspopup="listbox">Single select</summary>
<ul role="listbox"> <ul role="listbox">
<li> <li>
<label for="01">
<input type="radio" id="01" name="option1" /> <input type="radio" id="01" name="option1" />
<label for="01">Option 1</label> Option 1
</li> </label>
<li> </li>
<li>
<label for="02">
<input type="radio" id="02" name="option1" /> <input type="radio" id="02" name="option1" />
<label for="02">Option 2</label> Option 2
</li> </label>
</ul> </li>
</ul>
</details> </details>
<details role="list"> <details role="list">
<summary aria-haspopup="listbox">Multi-select</summary> <summary aria-haspopup="listbox">Multi-select</summary>
<ul role="listbox"> <ul role="listbox">
<li> <li>
<label for="11">
<input type="checkbox" id="11" name="option2" /> <input type="checkbox" id="11" name="option2" />
<label for="11">Option 1</label> Option 1
</li> </label>
<li> </li>
<li>
<label for="12">
<input type="checkbox" id="12" name="option2" /> <input type="checkbox" id="12" name="option2" />
<label for="12">Option 2</label> Option 2
</li> </label>
</ul> </li>
</ul>
</details> </details>
</article> </article>
@ -61,8 +69,9 @@
<code>summary</code> tag text when any option selected. <code>summary</code> tag text when any option selected.
</li> </li>
<li> <li>
in case of single select, remove <code>open</code> attribute on <code>details</code> tag in case of single select, remove <code>open</code> attribute on
using javascript when an option is selected. <code>details</code> tag using javascript when an option is
selected.
</li> </li>
</ul> </ul>
<footer class="code"> <footer class="code">
@ -73,12 +82,16 @@
&lt;<b>summary aria-haspopup="listbox"</b>&gt;Single select&lt;<b>/summary</b>&gt; &lt;<b>summary aria-haspopup="listbox"</b>&gt;Single select&lt;<b>/summary</b>&gt;
&lt;<b>ul role="listbox"</b>&gt; &lt;<b>ul role="listbox"</b>&gt;
&lt;<b>li</b>&gt; &lt;<b>li</b>&gt;
&lt;<b>input type="radio" id="01" name="option1" /</b>&gt; &lt;<b>label for="01"</b>&gt;
&lt;<b>label for="01"</b>&gt;Option 1&lt;<b>/label</b>&gt; &lt;<b>input type="radio" id="01" name="option1" /</b>&gt;
Option 1
&lt;<b>/label</b>&gt;
&lt;<b>/li</b>&gt; &lt;<b>/li</b>&gt;
&lt;<b>li</b>&gt; &lt;<b>li</b>&gt;
&lt;<b>input type="radio" id="02" name="option1" /</b>&gt; &lt;<b>label for="02"</b>&gt;
&lt;<b>label for="02"</b>&gt;Option 2&lt;<b>/label</b>&gt; &lt;<b>input type="radio" id="02" name="option1" /</b>&gt;
Option 2
&lt;<b>/label</b>&gt;
&lt;<b>/li</b>&gt; &lt;<b>/li</b>&gt;
&lt;<b>/ul</b>&gt; &lt;<b>/ul</b>&gt;
&lt;<b>/details</b>&gt; &lt;<b>/details</b>&gt;
@ -89,12 +102,16 @@
&lt;<b>summary aria-haspopup="listbox"</b>&gt;Multi select&lt;<b>/summary</b>&gt; &lt;<b>summary aria-haspopup="listbox"</b>&gt;Multi select&lt;<b>/summary</b>&gt;
&lt;<b>ul role="listbox"</b>&gt; &lt;<b>ul role="listbox"</b>&gt;
&lt;<b>li</b>&gt; &lt;<b>li</b>&gt;
&lt;<b>input type="checkbox" id="01" name="option1" /</b>&gt; &lt;<b>label for="01"</b>&gt;
&lt;<b>label for="01"</b>&gt;Option 1&lt;<b>/label</b>&gt; &lt;<b>input type="checkbox" id="01" name="option1" /</b>&gt;
Option 1
&lt;<b>/label</b>&gt;
&lt;<b>/li</b>&gt; &lt;<b>/li</b>&gt;
&lt;<b>li</b>&gt; &lt;<b>li</b>&gt;
&lt;<b>input type="checkbox" id="02" name="option1" /</b>&gt; &lt;<b>label for="01"</b>&gt;
&lt;<b>label for="02"</b>&gt;Option 2&lt;<b>/label</b>&gt; &lt;<b>input type="checkbox" id="02" name="option1" /</b>&gt;
Option 2
&lt;<b>/label</b>&gt;
&lt;<b>/li</b>&gt; &lt;<b>/li</b>&gt;
&lt;<b>/ul</b>&gt; &lt;<b>/ul</b>&gt;
&lt;<b>/details</b>&gt; &lt;<b>/details</b>&gt;

View file

@ -5,7 +5,6 @@
article { article {
margin: var(--block-spacing-vertical) 0; margin: var(--block-spacing-vertical) 0;
padding: var(--block-spacing-vertical) var(--block-spacing-horizontal); padding: var(--block-spacing-vertical) var(--block-spacing-horizontal);
overflow: hidden;
border-radius: var(--border-radius); border-radius: var(--border-radius);
background: var(--card-background-color); background: var(--card-background-color);
box-shadow: var(--card-box-shadow); box-shadow: var(--card-box-shadow);

View file

@ -5,13 +5,20 @@ details[role='list'] {
summary { summary {
margin-bottom: 0; margin-bottom: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical)
var(--form-element-spacing-horizontal);
border: var(--border-width) solid var(--form-element-border-color); border: var(--border-width) solid var(--form-element-border-color);
border-radius: var(--border-radius); border-radius: var(--border-radius);
height: calc(
1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 +
var(--border-width) * 2
);
line-height: inherit;
cursor: pointer; cursor: pointer;
&::after { &::after {
transform: rotate(0deg); transform: rotate(0deg);
height: 100%;
} }
& + ul { & + ul {
@ -35,45 +42,20 @@ details[role='list'] {
content: ''; content: '';
} }
input[type='radio'],
input[type='checkbox'] {
display: none;
appearance: none;
}
label { label {
cursor: pointer;
position: relative; position: relative;
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: calc(var(--spacing) * 0.5); padding: var(--form-element-spacing-vertical)
line-height: 1; var(--form-element-spacing-horizontal);
&:hover { &:hover {
background-color: var(--secondary-focus); background-color: var(--secondary-focus);
} }
}
input:checked + label { input[type='radio'],
background-color: var(--secondary-focus); input[type='checkbox'] {
} appearance: none;
input[type='checkbox'] {
& + label:before {
display: inline-block;
width: calc(var(--spacing) * 1.2);
height: calc(var(--spacing) * 1.2);
margin-right: calc(var(--spacing) * 0.5);
border: var(--border-width) solid var(--primary);
border-radius: var(--border-radius);
content: '';
vertical-align: text-bottom;
}
&:checked + label:before {
background-image: var(--icon-checkbox);
background-position: center;
background-size: calc(var(--spacing) * 0.8) auto;
background-repeat: no-repeat;
background-color: var(--primary);
} }
} }
} }