geeks-ui-framework
Version:
A modern, lightweight CSS framework with 15+ components for developers. Build beautiful interfaces with minimal effort.
295 lines (253 loc) • 7.25 kB
CSS
/* ===================================
FORMS COMPONENT
=================================== */
/* Form Groups */
.form-group {
margin-bottom: 1.5rem;
}
.form-group:last-child {
margin-bottom: 0;
}
/* Form Labels */
.form-label {
display: block;
margin-bottom: 0.5rem;
font-weight: 600;
color: var(--text-color);
font-size: 0.875rem;
}
.form-label.required::after {
content: ' *';
color: var(--danger-color);
}
/* Form Controls */
.form-control {
display: block;
width: 100%;
padding: 0.75rem 1rem;
font-size: 1rem;
line-height: 1.5;
color: var(--text-color);
background-color: var(--white);
background-clip: padding-box;
border: 1px solid var(--border-color);
border-radius: 0.375rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.form-control:focus {
color: var(--text-color);
background-color: var(--white);
border-color: var(--primary-color);
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
}
.form-control::placeholder {
color: var(--muted-color);
opacity: 1;
}
.form-control:disabled {
background-color: var(--light-gray);
opacity: 1;
cursor: not-allowed;
}
/* Form Control Sizes */
.form-control-sm {
padding: 0.5rem 0.75rem;
font-size: 0.875rem;
}
.form-control-lg {
padding: 1rem 1.25rem;
font-size: 1.125rem;
}
/* Select Elements */
.form-select {
display: block;
width: 100%;
padding: 0.75rem 2.25rem 0.75rem 1rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: var(--text-color);
background-color: var(--white);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m1 6 7 7 7-7'/%3e%3c/svg%3e");
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 16px 12px;
border: 1px solid var(--border-color);
border-radius: 0.375rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.form-select:focus {
border-color: var(--primary-color);
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
}
/* Checkboxes and Radios */
.form-check {
display: block;
min-height: 1.5rem;
padding-left: 1.75rem;
margin-bottom: 0.5rem;
}
.form-check-input {
width: 1.25rem;
height: 1.25rem;
margin-top: 0.125rem;
margin-left: -1.75rem;
vertical-align: top;
background-color: var(--white);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
border: 1px solid var(--border-color);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
}
.form-check-input[type="checkbox"] {
border-radius: 0.25rem;
}
.form-check-input[type="radio"] {
border-radius: 50%;
}
.form-check-input:active {
filter: brightness(90%);
}
.form-check-input:focus {
border-color: var(--primary-color);
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
}
.form-check-input:checked {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
.form-check-input:checked[type="checkbox"] {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type="radio"] {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-label {
cursor: pointer;
font-size: 0.875rem;
}
/* Input Groups */
.input-group {
position: relative;
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.input-group>.form-control {
position: relative;
flex: 1 1 auto;
width: 1%;
min-width: 0;
}
.input-group-text {
display: flex;
align-items: center;
padding: 0.75rem 1rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: var(--text-color);
text-align: center;
white-space: nowrap;
background-color: var(--light-gray);
border: 1px solid var(--border-color);
}
.input-group>.form-control:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group>.form-control:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.input-group>.input-group-text:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group>.input-group-text:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
/* Form Text */
.form-text {
margin-top: 0.25rem;
font-size: 0.875rem;
color: var(--muted-color);
}
/* Form Validation */
.was-validated .form-control:valid,
.form-control.is-valid {
border-color: var(--success-color);
}
.was-validated .form-control:valid:focus,
.form-control.is-valid:focus {
border-color: var(--success-color);
box-shadow: 0 0 0 0.2rem rgba(16, 185, 129, 0.25);
}
.was-validated .form-control:invalid,
.form-control.is-invalid {
border-color: var(--danger-color);
}
.was-validated .form-control:invalid:focus,
.form-control.is-invalid:focus {
border-color: var(--danger-color);
box-shadow: 0 0 0 0.2rem rgba(239, 68, 68, 0.25);
}
.valid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 0.875rem;
color: var(--success-color);
}
.invalid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 0.875rem;
color: var(--danger-color);
}
.was-validated .form-control:valid~.valid-feedback,
.form-control.is-valid~.valid-feedback {
display: block;
}
.was-validated .form-control:invalid~.invalid-feedback,
.form-control.is-invalid~.invalid-feedback {
display: block;
}
/* Floating Labels */
.form-floating {
position: relative;
}
.form-floating>.form-control {
height: calc(3.5rem + 2px);
line-height: 1.25;
padding: 1rem 1rem 0.25rem 1rem;
}
.form-floating>label {
position: absolute;
top: 0;
left: 0;
height: 100%;
padding: 1rem 1rem 0.25rem 1rem;
pointer-events: none;
border: 1px solid transparent;
transform-origin: 0 0;
transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
}
.form-floating>.form-control:focus~label,
.form-floating>.form-control:not(:placeholder-shown)~label {
opacity: 0.65;
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
}