react-formian
Version:
A React framework for easily creating and handling controlled forms
470 lines (453 loc) • 20 kB
CSS
.formian-form {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box; }
.formian-form * {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box; }
.formian-form section {
display: flex;
flex-basis: 100%;
flex-flow: row wrap; }
.formian-form div, .formian-form section {
position: relative;
outline: none; }
.formian-form .input-container.range input {
-webkit-appearance: none;
width: 100%;
background: transparent; }
.formian-form .input-container.range input::-webkit-slider-thumb {
-webkit-appearance: none; }
.formian-form .input-container.range input::-ms-track {
width: 100%;
cursor: pointer;
/* Hides the slider so custom styles can be added */
background: transparent;
border-color: transparent;
color: transparent; }
.formian-form .input-container.range input {
background-color: #555555;
border: 0px;
height: 10px;
border-radius: 90px;
margin: 15px 0; }
.formian-form .input-container.range input:focus::-webkit-slider-thumb {
background: #31708f;
border-color: #31708f; }
.formian-form .input-container.range input::-webkit-slider-thumb {
-webkit-appearance: none;
height: 30px;
background: #ffffff;
border: 2px solid #555555;
border-radius: 2px;
width: 20px;
cursor: pointer; }
.formian-form .input-container.range input::-webkit-slider-thumb:hover, .formian-form .input-container.range input::-webkit-slider-thumb:focus {
background: #31708f;
border-color: #31708f; }
.formian-form .input-container.select select {
background-color: #ffffff; }
.formian-form .input-container.select .select-custom .custom-icon {
position: absolute;
pointer-events: none;
right: 5px;
bottom: 9px;
font-size: 1.5em;
color: #555555; }
.formian-form .input-container.select select:focus ~ .select-custom .custom-icon,
.formian-form .input-container.select select:hover ~ .select-custom .custom-icon {
color: #31708f; }
.formian-form .input-container.checkbox,
.formian-form .input-container.radio,
.formian-form .input-container.onoff {
/* Hover and focus states */
/* Checked state */
/* Hover and focus states whilst checked */ }
.formian-form .input-container.checkbox label,
.formian-form .input-container.radio label,
.formian-form .input-container.onoff label {
cursor: pointer;
display: flex;
align-items: center;
line-height: 15px;
vertical-align: middle;
margin-left: 0; }
.formian-form .input-container.checkbox input,
.formian-form .input-container.radio input,
.formian-form .input-container.onoff input {
opacity: 0;
height: 12px;
width: 25px;
z-index: 2;
position: absolute; }
.formian-form .input-container.checkbox .radio-text, .formian-form .input-container.checkbox .off-text, .formian-form .input-container.checkbox .on-text,
.formian-form .input-container.radio .radio-text,
.formian-form .input-container.radio .off-text,
.formian-form .input-container.radio .on-text,
.formian-form .input-container.onoff .radio-text,
.formian-form .input-container.onoff .off-text,
.formian-form .input-container.onoff .on-text {
font-size: 20px;
font-weight: normal; }
.formian-form .input-container.checkbox .onoff-text, .formian-form .input-container.checkbox .checkbox-text,
.formian-form .input-container.radio .onoff-text,
.formian-form .input-container.radio .checkbox-text,
.formian-form .input-container.onoff .onoff-text,
.formian-form .input-container.onoff .checkbox-text {
font-size: 1em;
font-weight: normal; }
.formian-form .input-container.checkbox .checkbox-custom,
.formian-form .input-container.checkbox .onoff-custom,
.formian-form .input-container.checkbox .radio-custom,
.formian-form .input-container.radio .checkbox-custom,
.formian-form .input-container.radio .onoff-custom,
.formian-form .input-container.radio .radio-custom,
.formian-form .input-container.onoff .checkbox-custom,
.formian-form .input-container.onoff .onoff-custom,
.formian-form .input-container.onoff .radio-custom {
cursor: pointer;
margin: 0 5px 0 0;
position: relative;
border: 2px solid #555555; }
.formian-form .input-container.checkbox input:focus ~ .checkbox-custom,
.formian-form .input-container.checkbox input:hover ~ .checkbox-custom,
.formian-form .input-container.checkbox input:focus ~ .onoff-custom,
.formian-form .input-container.checkbox input:hover ~ .onoff-custom,
.formian-form .input-container.checkbox input:focus ~ .radio-custom,
.formian-form .input-container.checkbox input:hover ~ .radio-custom,
.formian-form .input-container.radio input:focus ~ .checkbox-custom,
.formian-form .input-container.radio input:hover ~ .checkbox-custom,
.formian-form .input-container.radio input:focus ~ .onoff-custom,
.formian-form .input-container.radio input:hover ~ .onoff-custom,
.formian-form .input-container.radio input:focus ~ .radio-custom,
.formian-form .input-container.radio input:hover ~ .radio-custom,
.formian-form .input-container.onoff input:focus ~ .checkbox-custom,
.formian-form .input-container.onoff input:hover ~ .checkbox-custom,
.formian-form .input-container.onoff input:focus ~ .onoff-custom,
.formian-form .input-container.onoff input:hover ~ .onoff-custom,
.formian-form .input-container.onoff input:focus ~ .radio-custom,
.formian-form .input-container.onoff input:hover ~ .radio-custom {
border-color: #31708f; }
.formian-form .input-container.checkbox input:focus ~ .checkbox-custom .custom-icon,
.formian-form .input-container.checkbox input:hover ~ .checkbox-custom .custom-icon,
.formian-form .input-container.checkbox input:focus ~ .onoff-custom .custom-icon,
.formian-form .input-container.checkbox input:hover ~ .onoff-custom .custom-icon,
.formian-form .input-container.checkbox input:focus ~ .radio-custom .custom-icon,
.formian-form .input-container.checkbox input:hover ~ .radio-custom .custom-icon,
.formian-form .input-container.radio input:focus ~ .checkbox-custom .custom-icon,
.formian-form .input-container.radio input:hover ~ .checkbox-custom .custom-icon,
.formian-form .input-container.radio input:focus ~ .onoff-custom .custom-icon,
.formian-form .input-container.radio input:hover ~ .onoff-custom .custom-icon,
.formian-form .input-container.radio input:focus ~ .radio-custom .custom-icon,
.formian-form .input-container.radio input:hover ~ .radio-custom .custom-icon,
.formian-form .input-container.onoff input:focus ~ .checkbox-custom .custom-icon,
.formian-form .input-container.onoff input:hover ~ .checkbox-custom .custom-icon,
.formian-form .input-container.onoff input:focus ~ .onoff-custom .custom-icon,
.formian-form .input-container.onoff input:hover ~ .onoff-custom .custom-icon,
.formian-form .input-container.onoff input:focus ~ .radio-custom .custom-icon,
.formian-form .input-container.onoff input:hover ~ .radio-custom .custom-icon {
border-color: #31708f; }
.formian-form .input-container.checkbox input:checked ~ .checkbox-custom .custom-icon, .formian-form .input-container.checkbox input:checked ~ .checkbox-custom .fa,
.formian-form .input-container.checkbox input:checked ~ .onoff-custom .custom-icon,
.formian-form .input-container.checkbox input:checked ~ .onoff-custom .fa,
.formian-form .input-container.checkbox input:checked ~ .readio-custom .custom-icon,
.formian-form .input-container.checkbox input:checked ~ .readio-custom .fa,
.formian-form .input-container.radio input:checked ~ .checkbox-custom .custom-icon,
.formian-form .input-container.radio input:checked ~ .checkbox-custom .fa,
.formian-form .input-container.radio input:checked ~ .onoff-custom .custom-icon,
.formian-form .input-container.radio input:checked ~ .onoff-custom .fa,
.formian-form .input-container.radio input:checked ~ .readio-custom .custom-icon,
.formian-form .input-container.radio input:checked ~ .readio-custom .fa,
.formian-form .input-container.onoff input:checked ~ .checkbox-custom .custom-icon,
.formian-form .input-container.onoff input:checked ~ .checkbox-custom .fa,
.formian-form .input-container.onoff input:checked ~ .onoff-custom .custom-icon,
.formian-form .input-container.onoff input:checked ~ .onoff-custom .fa,
.formian-form .input-container.onoff input:checked ~ .readio-custom .custom-icon,
.formian-form .input-container.onoff input:checked ~ .readio-custom .fa {
opacity: 1; }
.formian-form .input-container.checkbox:hover input:not([disabled]):checked ~ .checkbox-custom,
.formian-form .input-container.checkbox:hover input:not([disabled]):checked ~ .radio-custom,
.formian-form .input-container.checkbox:hover input:not([disabled]):checked ~ .onoff-custom,
.formian-form .input-container.checkbox input:checked:focus ~ .checkbox-custom,
.formian-form .input-container.checkbox input:checked:focus ~ .radio-custom,
.formian-form .input-container.checkbox input:checked:focus ~ .onoff-custom,
.formian-form .input-container.radio:hover input:not([disabled]):checked ~ .checkbox-custom,
.formian-form .input-container.radio:hover input:not([disabled]):checked ~ .radio-custom,
.formian-form .input-container.radio:hover input:not([disabled]):checked ~ .onoff-custom,
.formian-form .input-container.radio input:checked:focus ~ .checkbox-custom,
.formian-form .input-container.radio input:checked:focus ~ .radio-custom,
.formian-form .input-container.radio input:checked:focus ~ .onoff-custom,
.formian-form .input-container.onoff:hover input:not([disabled]):checked ~ .checkbox-custom,
.formian-form .input-container.onoff:hover input:not([disabled]):checked ~ .radio-custom,
.formian-form .input-container.onoff:hover input:not([disabled]):checked ~ .onoff-custom,
.formian-form .input-container.onoff input:checked:focus ~ .checkbox-custom,
.formian-form .input-container.onoff input:checked:focus ~ .radio-custom,
.formian-form .input-container.onoff input:checked:focus ~ .onoff-custom {
border-color: #31708f; }
.formian-form .input-container.checkbox {
margin: 5px 0 10px 0; }
.formian-form .input-container.checkbox label {
width: fit-content; }
.formian-form .input-container.checkbox .checkbox-custom {
height: 25px;
width: 25px;
background-color: #ffffff; }
.formian-form .input-container.checkbox .checkbox-custom .custom-icon, .formian-form .input-container.checkbox .checkbox-custom .fa {
position: absolute;
bottom: 5px;
font-size: 30px;
color: #31708f;
opacity: 0; }
.formian-form .input-container.checkbox .checkbox-custom:hover, .formian-form .input-container.checkbox .checkbox-custom:focus, .formian-form .input-container.checkbox .checkbox-custom:active {
border-color: #31708f; }
.formian-form .input-container.onoff {
margin: 5px 0 10px 0;
/* Checked state */ }
.formian-form .input-container.onoff label {
width: fit-content; }
.formian-form .input-container.onoff .onoff-custom {
display: block;
width: 80px;
height: 30px;
background: transparent;
border-radius: 100px;
overflow: hidden; }
.formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper {
width: 150%;
margin-left: -50%;
transition: all 0.5s ease; }
.formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper .on-text, .formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper .custom-icon, .formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper .off-text {
display: inline-block;
position: relative;
background-color: transparent; }
.formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper .on-text {
color: transparent;
width: 35%;
text-align: left; }
.formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper .custom-icon {
top: 3px;
left: 3px;
width: 20px;
height: 20px;
background: transparent;
border-radius: 90px;
opacity: 1;
box-shadow: 0 0 0 2px transparent;
border: 2px solid #555555; }
.formian-form .input-container.onoff .onoff-custom .onoff-custom-wrapper .off-text {
color: #000000;
width: 35%;
text-align: right; }
.formian-form .input-container.onoff input:checked ~ .onoff-custom {
background: #31708f; }
.formian-form .input-container.onoff input:checked ~ .onoff-custom .onoff-custom-wrapper {
margin-left: 10%; }
.formian-form .input-container.onoff input:checked ~ .onoff-custom .onoff-custom-wrapper .custom-icon {
border-color: #31708f;
background: #ffffff;
box-shadow: 0 0 0 2px #ffffff; }
.formian-form .input-container.onoff input:checked ~ .onoff-custom .onoff-custom-wrapper .on-text {
color: #ffffff; }
.formian-form .input-container.onoff input:checked ~ .onoff-custom .onoff-custom-wrapper .off-text {
color: transparent; }
.formian-form .input-container.radio {
display: inline-block;
width: auto; }
.formian-form .input-container.radio .radio-custom {
min-width: 80px;
background: transparent;
border: 2px solid #555555;
display: block;
border-radius: 100px;
position: relative;
padding: 0px 5px; }
.formian-form .input-container.radio .radio-custom .custom-icon {
position: absolute;
top: calc(50% - 9px);
left: 4px;
width: 18px;
height: 18px;
box-shadow: 0 0 0 2px transparent;
border: 2px solid #555555;
background-color: transparent;
border-radius: 90px; }
.formian-form .input-container.radio .radio-custom .radio-text {
color: #000000;
background-color: transparent;
padding: 5px 5px 5px 30px; }
.formian-form .input-container.radio input:focus ~ .radio-custom {
border-color: #31708f; }
.formian-form .input-container.radio input:focus ~ .radio-custom .custom-icon {
box-shadow: 0 0 0 2px #ffffff;
background-color: #ffffff;
border-color: #31708f; }
.formian-form .input-container.radio input:checked ~ .radio-custom {
background-color: #31708f;
border-color: #31708f; }
.formian-form .input-container.radio input:checked ~ .radio-custom .custom-icon {
border-color: #31708f;
box-shadow: 0 0 0 2px white;
background-color: white; }
.formian-form .input-container.radio input:checked ~ .radio-custom .radio-text {
color: #ffffff; }
.formian-form .input-container.submit input,
.formian-form .input-container.reset input {
color: #31708f;
background-color: #ffffff;
border: 2px solid #31708f;
padding: 15px 0; }
.formian-form .input-container.submit input:focus, .formian-form .input-container.submit input:hover,
.formian-form .input-container.reset input:focus,
.formian-form .input-container.reset input:hover {
color: #ffffff;
background-color: #31708f; }
.formian-form .input-container.submit.disabled input,
.formian-form .input-container.reset.disabled input {
color: #ababab;
cursor: help;
background-color: #808080;
border-color: #808080; }
.formian-form .input-container.submit.disabled input:focus, .formian-form .input-container.submit.disabled input:hover,
.formian-form .input-container.reset.disabled input:focus,
.formian-form .input-container.reset.disabled input:hover {
color: #ababab;
background-color: #808080;
border-color: #808080; }
.formian-form .error {
border-color: #a94442 ; }
.formian-form .error-message {
display: none;
position: absolute;
bottom: -10%;
width: fit-content;
max-width: 150px;
color: #ffffff;
background-color: #a94442;
border-radius: 5px;
padding: 10px; }
.formian-form .error-message.error {
display: block; }
.formian-form .error-message.left {
text-align: right;
right: 102%; }
.formian-form .error-message.left::after {
right: -10px; }
.formian-form .error-message.right {
text-align: left;
left: 102%; }
.formian-form .error-message.right::after {
left: -10px; }
.formian-form .error-message::after {
content: "\25B6";
color: #a94442;
position: absolute;
top: calc(50% - 6px); }
.formian-form .input-container.field {
padding-left: 5px; }
.formian-form .input-container.field input {
cursor: initial; }
.formian-form .input-container.number.no-wheel input::-webkit-outer-spin-button,
.formian-form .input-container.number.no-wheel input::-webkit-inner-spin-button {
/* display: none; <- Crashes Chrome on hover */
-webkit-appearance: none;
margin: 0;
/* <-- Apparently some margin are still there even though it's hidden */ }
.formian-form .input-container.file {
display: flex; }
.formian-form .input-container.file input {
position: absolute;
height: 0;
width: 0;
left: -9999px; }
.formian-form .input-container.file label {
color: #555555;
background-color: #ffffff;
border: 2px solid #555555;
height: 35px;
margin: 5px 0;
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
border-right: 0;
padding: 0 10px;
flex-grow: 0;
display: flex;
align-items: center; }
.formian-form .input-container.file label:focus, .formian-form .input-container.file label:hover {
color: #ffffff;
background-color: #31708f;
border-color: #31708f; }
.formian-form .input-container.file input:focus ~ label {
color: #ffffff;
background-color: #31708f;
border-color: #31708f; }
.formian-form .input-container.file .file-name {
flex-grow: 1;
z-index: 2;
border: 2px solid #555555;
height: 35px;
margin: 5px 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
background: #ffffff;
padding: 0 0 0 5px;
font-size: 1em;
display: flex;
align-items: center; }
.formian-form .input-container.file input:focus ~ .file-name,
.formian-form .input-container.file label:hover ~ .file-name,
.formian-form .input-container.file label:active ~ .file-name {
border-color: #31708f; }
.formian-form .input-container.file .file-info {
position: absolute;
right: 10px;
bottom: -7px;
z-index: 3;
font-size: 0.6em; }
.formian-form {
width: 100%;
display: flex;
font-size: inherit;
flex-basis: 100%;
flex-flow: column; }
.formian-form label, .formian-form legend {
display: block;
margin: 0 0 0 5px;
font-size: 1.1em;
font-weight: bold; }
.formian-form fieldset {
border: none;
padding: 0;
margin: 0 5px; }
.formian-form fieldset.fieldset-radio {
border: 2px solid #555555; }
.formian-form fieldset.fieldset-radio:focus-within {
border-color: #31708f; }
.formian-form .input-container.fieldset {
width: 100%;
display: flex;
flex-basis: 100%;
flex-flow: row;
flex-wrap: wrap; }
.formian-form .input-container {
position: relative;
width: 100%;
min-height: 25px;
margin: 5px 0;
padding: 0 5px; }
.formian-form .input-container input, .formian-form .input-container select, .formian-form .input-container textarea {
outline: none;
resize: none;
cursor: pointer;
border: 2px solid #555555;
-webkit-appearance: none;
-webkit-border-radius: 2px;
border-radius: 2px;
width: 100%;
margin: 5px 0 10px;
padding: 5px;
font-size: 1em; }
.formian-form .input-container input:focus, .formian-form .input-container input:hover, .formian-form .input-container select:focus, .formian-form .input-container select:hover, .formian-form .input-container textarea:focus, .formian-form .input-container textarea:hover {
outline: none;
border-color: #31708f; }
/*# sourceMappingURL=style.css.map*/