onsenui
Version:
HTML5 Mobile Framework & UI Components
277 lines (235 loc) • 7.32 kB
CSS
: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);
}
/*~
name: Radio Button
category: Radio Button
elements: ons-input
markup: |
<label class="radio-button">
<input type="radio" class="radio-button__input" name="r" checked="checked">
<div class="radio-button__checkmark"></div>
Label
</label>
<label class="radio-button">
<input type="radio" class="radio-button__input" name="r">
<div class="radio-button__checkmark"></div>
Label
</label>
<label class="radio-button">
<input type="radio" class="radio-button__input" name="r">
<div class="radio-button__checkmark"></div>
Label
</label>
*/
.radio-button__input {
/* mixin: hide-input */
position: absolute;
right: 0;
top: 0;
left: 0;
bottom: 0;
padding: 0;
border: 0;
background-color: transparent;
z-index: 1;
vertical-align: top;
outline: none;
width: 100%;
height: 100%;
margin: 0;
appearance: none;
}
.radio-button__input:active,
.radio-button__input:focus {
outline: 0;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.radio-button {
display: inline-block;
vertical-align: top;
/* mixin: reset-cursor */
cursor: default;
user-select: none;
/* mixin: hide-input-parent */
position: relative;
line-height: var(--radio-button-size);
text-align: left;
}
.radio-button__checkmark:before {
content: '';
position: absolute;
/* mixin: reset-box-model */
box-sizing: border-box;
width: var(--checkbox-size);
height: var(--checkbox-size);
background: transparent;
border: none;
border-radius: var(--checkbox-size);
left: 0;
}
.radio-button__checkmark {
/* mixin: reset-box-model */
box-sizing: border-box;
display: inline-block;
vertical-align: top;
/* mixin: reset-cursor */
cursor: default;
user-select: none;
/* mixin: reset-font */
font-family: -apple-system, 'Helvetica Neue', 'Helvetica', 'Arial', 'Lucida Grande', sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-weight: var(--font-weight);
/* mixin: hide-input-parent */
position: relative;
width: var(--radio-button-size);
height: var(--radio-button-size);
background: var(--radio-button-background);
pointer-events: none;
}
.radio-button__checkmark:after {
/* mixin: checkmark */
content: '';
position: absolute;
top: 7px;
left: 4px;
opacity: 0;
width: 11px;
height: 4px;
background: transparent;
border: 2px solid var(--highlight-color);
border-top: none;
border-right: none;
border-radius: 0;
transform: rotate(-45deg);
}
: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 {
/* mixin: disabled */
opacity: 0.3;
cursor: default;
pointer-events: none;
}
/*~
name: Material Radio Button
category: Radio Button
elements: ons-input
markup: |
<label class="radio-button radio-button--material">
<input type="radio" class="radio-button__input radio-button--material__input" name="r" checked="checked">
<div class="radio-button__checkmark radio-button--material__checkmark"></div>
Label
</label>
<label class="radio-button radio-button--material">
<input type="radio" class="radio-button__input radio-button--material__input" name="r">
<div class="radio-button__checkmark radio-button--material__checkmark"></div>
Label
</label>
<label class="radio-button radio-button--material">
<input type="radio" class="radio-button__input radio-button--material__input" name="s" disabled checked>
<div class="radio-button__checkmark radio-button--material__checkmark"></div>
Label
</label>
<label class="radio-button radio-button--material">
<input type="radio" class="radio-button__input radio-button--material__input" name="s" disabled>
<div class="radio-button__checkmark radio-button--material__checkmark"></div>
Label
</label>
*/
.radio-button--material {
line-height: calc(var(--material-radio-button-size) + 2px);
/* mixin: material-font */
font-family: 'Roboto', 'Noto', sans-serif;
-webkit-font-smoothing: antialiased;
font-weight: var(--material-font-weight);
}
.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);
}