Skip to content

Commit 57beef6

Browse files
committed
feat: radio button update with checkbox css simplification
1 parent 69f9e32 commit 57beef6

File tree

2 files changed

+97
-20
lines changed

2 files changed

+97
-20
lines changed

scss/forms/_control-item.scss

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,83 @@
296296
min-height: $ouds-checkbox-size-min-height;
297297
}
298298

299+
//
300+
// Radio button specific
301+
//
302+
303+
.radio-button-additional-label {
304+
display: block;
305+
margin: 0;
306+
font-weight: $ouds-font-weight-strong;
307+
color: $ouds-color-content-default;
308+
@include get-font-size("label-medium");
309+
}
310+
311+
.radio-button-item-outlined {
312+
&:hover,
313+
&:active,
314+
&:has([type]:checked) {
315+
padding: subtract($ouds-control-item-space-inset, 1px);
316+
border: 1px solid $ouds-color-border-default; // TODO: Introduce design token once created
317+
}
318+
319+
&:has([type]:checked) {
320+
border-color: $ouds-color-action-selected;
321+
322+
&:hover {
323+
border-color: $ouds-color-action-hover;
324+
}
325+
326+
&:active {
327+
border-color: $ouds-color-action-pressed;
328+
}
329+
330+
.was-validated &:has([type]:invalid),
331+
&:has([type].is-invalid) {
332+
border-color: $ouds-color-action-negative-enabled;
333+
}
334+
335+
.was-validated &:has([type]:invalid:hover),
336+
&:has([type].is-invalid:hover) {
337+
border-color: $ouds-color-action-negative-hover;
338+
}
339+
340+
.was-validated &:has([type]:invalid:focus-visible),
341+
&:has([type].is-invalid:focus-visible) {
342+
border-color: $ouds-color-action-negative-focus;
343+
}
344+
345+
.was-validated &:has([type]:invalid:active),
346+
&:has([type].is-invalid:active) {
347+
border-color: $ouds-color-action-negative-pressed;
348+
}
349+
}
350+
351+
&:hover {
352+
border-color: $ouds-color-action-hover;
353+
}
354+
355+
&:active {
356+
border-color: $ouds-color-action-pressed;
357+
}
358+
359+
.was-validated &:has([type]:invalid:hover),
360+
&:has([type].is-invalid:hover) {
361+
border-color: $ouds-color-action-negative-hover;
362+
}
363+
364+
.was-validated &:has([type]:invalid:focus-visible),
365+
&:has([type].is-invalid:focus-visible) {
366+
border-color: $ouds-color-action-negative-focus;
367+
}
368+
369+
.was-validated &:has([type]:invalid:active),
370+
&:has([type].is-invalid:active) {
371+
border-color: $ouds-color-action-negative-pressed;
372+
}
373+
}
374+
375+
299376
//
300377
// Bootstrap compatibility
301378
//

site/content/docs/0.3/forms/radio-button.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ You can find here the [OUDS Radio button design guidelines](https://unified-desi
1616
## Basic example
1717

1818
{{< example >}}
19-
<div class="radio-button-item">
19+
<div class="control-item">
2020
<div class="control-item-assets-container">
2121
<input class="control-item-indicator" type="radio" value="" id="radioDefault" name="radioBasic">
2222
</div>
2323
<div class="control-item-text-container">
2424
<label class="control-item-label" for="radioDefault">Label</label>
2525
</div>
2626
</div>
27-
<div class="radio-button-item control-item-divider">
27+
<div class="control-item control-item-divider">
2828
<div class="control-item-assets-container">
2929
<input class="control-item-indicator" type="radio" value="" id="radioFullOption" checked name="radioBasic" aria-describedby="radioFullOptionAdditionalText radioFullOptionHelper">
3030
</div>
@@ -60,7 +60,7 @@ You can find here the [OUDS Radio button design guidelines](https://unified-desi
6060

6161
## Approach
6262

63-
Browser default radio buttons are replaced with the help of `.radio-button-item`. Radio buttons allows user to select a single option from a set of mutually exclusive choices.
63+
Browser default radio buttons are replaced with the help of `.control-item`. Radio buttons allows user to select a single option from a set of mutually exclusive choices.
6464

6565
Radio buttons are implemented using `.control-item-*` classes, see below.
6666

@@ -72,26 +72,26 @@ Radio buttons are implemented using `.control-item-*` classes, see below.
7272

7373
### Outlined
7474

75-
You can display an outlined radio buttons by adding a `.radio-button-item-outlined` to `.radio-button-item`. If there is an outlined radio button item in a group, all its siblings should also be outlined.
75+
You can display an outlined radio buttons by adding a `.radio-button-item-outlined` to `.control-item`. If there is an outlined radio button item in a group, all its siblings should also be outlined.
7676

7777
{{< example >}}
78-
<div class="radio-button-item radio-button-item-outlined control-item-divider">
78+
<div class="control-item radio-button-item-outlined control-item-divider">
7979
<div class="control-item-assets-container">
8080
<input class="control-item-indicator" type="radio" value="" id="radioOutlined1" name="radioOutlined" checked>
8181
</div>
8282
<div class="control-item-text-container">
8383
<label class="control-item-label" for="radioOutlined1">Label</label>
8484
</div>
8585
</div>
86-
<div class="radio-button-item radio-button-item-outlined control-item-divider">
86+
<div class="control-item radio-button-item-outlined control-item-divider">
8787
<div class="control-item-assets-container">
8888
<input class="control-item-indicator" type="radio" value="" id="radioOutlined2" name="radioOutlined">
8989
</div>
9090
<div class="control-item-text-container">
9191
<label class="control-item-label" for="radioOutlined2">Label</label>
9292
</div>
9393
</div>
94-
<div class="radio-button-item radio-button-item-outlined control-item-divider">
94+
<div class="control-item radio-button-item-outlined control-item-divider">
9595
<div class="control-item-assets-container">
9696
<input class="control-item-indicator is-invalid" type="radio" value="" id="radioOutlined3" name="radioOutlined">
9797
</div>
@@ -106,15 +106,15 @@ You can display an outlined radio buttons by adding a `.radio-button-item-outlin
106106
You can display a divider by adding `.control-item-divider` to a `.control-item`.
107107

108108
{{< example >}}
109-
<div class="radio-button-item control-item-divider">
109+
<div class="control-item control-item-divider">
110110
<div class="control-item-assets-container">
111111
<input class="control-item-indicator" type="radio" value="" id="radioDivider" name="radioDivider" checked>
112112
</div>
113113
<div class="control-item-text-container">
114114
<label class="control-item-label" for="radioDivider">Label</label>
115115
</div>
116116
</div>
117-
<div class="radio-button-item control-item-divider">
117+
<div class="control-item control-item-divider">
118118
<div class="control-item-assets-container">
119119
<input class="control-item-indicator" type="radio" value="" id="radioDivider2" name="radioDivider">
120120
</div>
@@ -129,7 +129,7 @@ You can display a divider by adding `.control-item-divider` to a `.control-item`
129129
You can display an icon by adding `.control-item-assets-container` with an icon (SVG or font-icon most likely) inside as a child of a `.control-item`.
130130

131131
{{< example >}}
132-
<div class="radio-button-item">
132+
<div class="control-item">
133133
<div class="control-item-assets-container">
134134
<input class="control-item-indicator" type="radio" value="" id="radioWithSVG" name="radioIcon" checked>
135135
</div>
@@ -142,7 +142,7 @@ You can display an icon by adding `.control-item-assets-container` with an icon
142142
</svg>
143143
</div>
144144
</div>
145-
<div class="radio-button-item">
145+
<div class="control-item">
146146
<div class="control-item-assets-container">
147147
<input class="control-item-indicator" type="radio" value="" id="radioWithIconFont" name="radioIcon">
148148
</div>
@@ -160,7 +160,7 @@ You can display an icon by adding `.control-item-assets-container` with an icon
160160
You can display an additional label for critical information for the option by adding a `.radio-button-additional-label` as a sibling of a `.control-item-label`.
161161

162162
{{< example >}}
163-
<div class="radio-button-item">
163+
<div class="control-item">
164164
<div class="control-item-assets-container">
165165
<input class="control-item-indicator" type="radio" value="" id="radioAdditionalLabel">
166166
</div>
@@ -176,7 +176,7 @@ You can display an additional label for critical information for the option by a
176176
You can display an helper text by adding a `.control-item-helper` as a sibling of a `.control-item-label`.
177177

178178
{{< example >}}
179-
<div class="radio-button-item">
179+
<div class="control-item">
180180
<div class="control-item-assets-container">
181181
<input class="control-item-indicator" type="radio" value="" id="radioHelperText">
182182
</div>
@@ -192,7 +192,7 @@ You can display an helper text by adding a `.control-item-helper` as a sibling o
192192
You can reverse the component by adding `.control-item-reverse` to a `.control-item`.
193193

194194
{{< example >}}
195-
<div class="radio-button-item control-item-reverse">
195+
<div class="control-item control-item-reverse">
196196
<div class="control-item-assets-container">
197197
<input class="control-item-indicator" type="radio" value="" id="radioReverse">
198198
</div>
@@ -230,15 +230,15 @@ Put your checkboxes, radios, and switches on the opposite side with the `.form-c
230230
Add the `disabled` attribute and the associated `<label>` are automatically styled to match with a lighter color to help indicate the input's state.
231231

232232
{{< example stackblitz_add_js="true" >}}
233-
<div class="radio-button-item">
233+
<div class="control-item">
234234
<div class="control-item-assets-container">
235235
<input class="control-item-indicator" type="radio" value="" id="radioDisabled" disabled name="radioDisabled">
236236
</div>
237237
<div class="control-item-text-container">
238238
<label class="control-item-label" for="radioDisabled">Label</label>
239239
</div>
240240
</div>
241-
<div class="radio-button-item">
241+
<div class="control-item">
242242
<div class="control-item-assets-container">
243243
<input class="control-item-indicator" type="radio" value="" id="radioCheckedDisabled" checked disabled name="radioDisabled">
244244
</div>
@@ -272,7 +272,7 @@ Add the `disabled` attribute and the associated `<label>` are automatically styl
272272
You can display an invalid radio button by adding `.is-invalid` to a `.control-item-indicator`. <!-- Please take a look at our [Validation]({{< docsref "/forms/validation" >}}) page to know more about this. -->
273273

274274
{{< example >}}
275-
<div class="radio-button-item">
275+
<div class="control-item">
276276
<div class="control-item-assets-container">
277277
<input class="control-item-indicator is-invalid" type="radio" value="" id="radioInvalid">
278278
</div>
@@ -290,7 +290,7 @@ When radio buttons belong to a group (e.g., in a form), you must provide clear c
290290
<div class="row">
291291
<fieldset class="col-md-6">
292292
<legend>Radio buttons group example</legend>
293-
<div class="radio-button-item control-item-divider">
293+
<div class="control-item control-item-divider">
294294
<div class="control-item-assets-container">
295295
<input class="control-item-indicator" type="radio" value="" id="radioGroup1" name="radioGroup" aria-describedby="radioGroup1AdditionalLabel radioGroup1Description">
296296
</div>
@@ -305,12 +305,12 @@ When radio buttons belong to a group (e.g., in a form), you must provide clear c
305305
</svg>
306306
</div>
307307
</div>
308-
<div class="radio-button-item control-item-divider">
308+
<div class="control-item control-item-divider">
309309
<div class="control-item-assets-container">
310310
<input class="control-item-indicator" type="radio" value="" id="radioGroup2" checked name="radioGroup" aria-describedby="radioGroup2AdditionalLabel radioGroup2Description">
311311
</div>
312312
<div class="control-item-text-container">
313-
<label class="control-item-label" for="radioGroup2">A longer label for showing behavior in this case, </label>
313+
<label class="control-item-label" for="radioGroup2">A longer label for showing behavior in this case</label>
314314
<p class="radio-button-additional-label" id="radioGroup2AdditionalLabel">Radio button indicator and icon will stick to the top area of the component</p>
315315
<p class="control-item-helper" id="radioGroup2Description">Also a longer helper text, it will also wrap at some point depending on the component width</p>
316316
</div>

0 commit comments

Comments
 (0)