:root {
--radio-button-background-active: rgba(0, 0, 0, 0);
--radio-button-indicator-color: var(--highlight-color);
--radio-button-background: transparent;
--radio-button-border: 3px solid var(--radio-button-indicator-color);
--radio-button-size: 24px;
--material-radio-button-size: 20px;
--material-radio-button-shadow-size: calc((48px - var(--material-radio-button-size)) / 2);
--radio-button: {
@apply(--reset-box-model);
position: relative;
display: inline-block;
vertical-align: top;
@apply(--reset-cursor);
@apply(--reset-font);
@apply(--hide-input-parent);
}
--radio-button__label: {
position: relative;
display: inline-block;
vertical-align: top;
@apply(--reset-cursor);
}
--radio-button--before: {
content: '';
position: absolute;
border-radius: 100%;
@apply(--reset-box-model);
}
--radio-button--after: {
content: '';
position: absolute;
border-radius: 100%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
--radio-button--disabled: {
@apply(--disabled);
}
}
/*~
name: Radio Button
category: Radio Button
elements: ons-input
markup: |
*/
.radio-button__input {
@apply(--hide-input);
}
.radio-button__input:active,
.radio-button__input:focus {
outline: 0;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.radio-button {
@apply(--radio-button__label);
@apply(--hide-input-parent);
line-height: var(--radio-button-size);
text-align: left;
}
.radio-button__checkmark:before {
@apply(--radio-button--before);
width: var(--checkbox-size);
height: var(--checkbox-size);
background: transparent;
border: none;
border-radius: var(--checkbox-size);
left: 0;
}
.radio-button__checkmark {
@apply(--radio-button);
position: relative;
width: var(--radio-button-size);
height: var(--radio-button-size);
background: var(--radio-button-background);
pointer-events: none;
}
.radio-button__checkmark:after {
@apply(--checkmark);
}
:checked + .radio-button__checkmark {
background: var(--radio-button-background-active);
}
:checked + .radio-button__checkmark:after {
opacity: 1;
}
:checked + .radio-button__checkmark:before {
background: transparent;
border: none;
}
:disabled + .radio-button__checkmark {
@apply(--radio-button--disabled);
}
/*~
name: Material Radio Button
category: Radio Button
elements: ons-input
markup: |
*/
.radio-button--material {
line-height: calc(var(--material-radio-button-size) + 2px);
@apply(--material-font);
}
.radio-button--material__input:before {
content: '';
position: absolute;
top: 0;
left: 0;
opacity: 0;
width: var(--material-radio-button-size);
height: var(--material-radio-button-size);
box-shadow: 0 0 0 var(--material-radio-button-shadow-size) var(--material-radio-button-inactive-color);
border: none;
box-sizing: border-box;
border-radius: 50%;
background-color: var(--material-radio-button-inactive-color);
pointer-events: none;
display: block;
transform: scale3d(0.2, 0.2, 0.2);
transition: opacity 0.25s ease-out, transform 0.1s ease-out;
}
.radio-button--material__input:checked:before {
box-shadow: 0 0 0 var(--material-radio-button-shadow-size) var(--material-radio-button-active-color);
background-color: var(--material-radio-button-active-color);
}
.radio-button--material__input:active:before {
opacity: .15;
transform: scale3d(1, 1, 1);
}
.radio-button--material__checkmark {
width: var(--material-radio-button-size);
height: var(--material-radio-button-size);
overflow: visible;
}
.radio-button--material__checkmark:before {
background: transparent;
border: 2px solid var(--material-radio-button-inactive-color);
box-sizing: border-box;
border-radius: 50%;
width: var(--material-radio-button-size);
height: var(--material-radio-button-size);
transition: border 0.2s ease;
}
.radio-button--material__checkmark:after {
transition: background 0.2s ease, transform 0.2s ease;
top: calc(var(--material-radio-button-size) / 4);
left: calc(var(--material-radio-button-size) / 4);
width: calc(var(--material-radio-button-size) / 2);
height: calc(var(--material-radio-button-size) / 2);
border: none;
border-radius: 50%;
transform: scale(0);
}
:checked + .radio-button--material__checkmark:before {
background: transparent;
border: 2px solid var(--material-radio-button-active-color);
}
.radio-button--material__input + .radio-button__checkmark:after {
background: var(--material-radio-button-inactive-color);
opacity: 1;
transform: scale(0);
}
:checked + .radio-button--material__checkmark:after {
opacity: 1;
background: var(--material-radio-button-active-color);
transform: scale(1);
}
:disabled + .radio-button--material__checkmark {
opacity: 1;
}
:disabled + .radio-button--material__checkmark:after {
background-color: var(--material-radio-button-disabled-color);
border-color: var(--material-radio-button-disabled-color);
}
:disabled + .radio-button--material__checkmark:before {
border-color: var(--material-radio-button-disabled-color);
}