silverstripe-framework/admin/client/src/styles/legacy/_forms.scss

922 lines
18 KiB
SCSS

/**
* This file defines common styles for form elements used throughout the CMS interface.
* It is an addition to the base styles defined in framework/css/Form.css.
*
* @package framework
* @subpackage admin
*/
/** ----------------------------------------------------
* Basic form fields
* ---------------------------------------------------- */
form.nostyle {
@include clear-form-field-styles();
}
.field {
display: block;
border-bottom: 1px solid $color-light-separator;
//overflow: hidden;
&.ui-tabs {
border-bottom: 0;
}
// bottom padding accounts for the border and we have a negative
// margin with a postive padding to ensure the bottom border extends over the edges
padding: 0 0 $grid-y - 1 0;
margin: $grid-y 0;
&.noborder, &:last-child {
padding-bottom: 0;
border-bottom: none;
box-shadow: none;
}
// using the legacy version as some of the more complex form fields
// need to use relative positioning and overflow hidden will not expand
// the containing boxes
@include legacy-pie-clearfix();
&.nolabel {
> .middleColumn {
margin-left: 0;
}
> .description {
margin-left: 0;
}
}
&.checkbox label.right {
margin: $grid-y/2 0 0 0;
display:inline;
font-style: normal;
color: $color-text;
clear:none;
}
label {
&.left {
float: left;
display: block;
width: $grid-x * 22;
padding: $grid-y $grid-x $grid-y 0;
margin-bottom: 0;
}
&.right {
cursor: pointer;
clear: both;
color: lighten($color-text, 20%);
display: block;
font-style: italic;
margin: $grid-y/2 0 0 $grid-x*23;
}
}
.middleColumn {
margin-left: $grid-x * 23;
}
span.readonly {
padding-top: $grid-y;
display: block;
}
.fieldgroup .fieldgroup-field.last { /* This is used on page/settings/visibility */
padding-bottom: 8px; /* replicates li item spacing */
}
// Additional help text to clarify the field intent,
// displayed alongside the field (rather than in a tooltip)
.description {
clear: both;
color: lighten($color-text, 8.5%); //8.5% is the minimum required to meet contrast standards while still retaining visual difference from normal text
display: block;
font-style: italic;
line-height: $grid-y * 2;
margin: $grid-y/2 0 0 $grid-x*23; // left align with .middleColumn
}
&.checkbox .description, &.ss-gridfield .description {
margin-left: 0;
}
input.text,
textarea,
select,
.TreeDropdownField {
margin-left: 10px;
width: 100%;
max-width: $grid-x * 64;
box-sizing: border-box;
&.description {
margin:0; //overrides help class adding left margin to the textarea input.
}
.description {
max-width: $grid-x * 64;
}
}
input.text,
textarea,
.TreeDropdownField {
background: #fff;
border: 1px solid lighten($color-medium-separator, 20%);
padding: ($grid-y - 1) ($grid-x - 1);
line-height: $grid-y * 2;
margin: 0;
outline: none;
transition: box-shadow .2s ease-in,
border .2s ease-in;
border-radius: 4px;
background-image: linear-gradient(#EAEAEA, #fff 10%);
&:focus {
border: 1px solid lighten($color-medium-separator, 10%);
border-top-color: $color-medium-separator;
box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset;
}
}
input[disabled], input.disabled,
textarea[disabled], textarea.disabled,
select[disabled], select.disabled {
color: lighten($color-text, 20%);
background: #efefef;
}
&#Action {
box-shadow: none;
}
// When a field's description is toggleable, it's given an icon (right title) which is used as
// a click target for toggling the visibility of the description. See LeftAndMain.FieldDescriptionToggle.js
&.cms-description-toggle {
> .middleColumn { // The field wrapper
display: inline-block;
vertical-align: middle;
margin-left: 0;
width: 36%;
min-width: 300px;
}
.right { // The column the trigger is inside.
display: inline-block;
vertical-align: middle;
height: 15px;
margin: 0 0 0 7px;
}
.btn-icon-information { // The default icon.
display: inline-block;
width: 15px;
height: 15px;
}
.description {
padding: 12px 0;
width: 36%;
}
// Overrides of the above default styles, for specific field types.
&.textarea,
&.htmleditor,
&.optionset,
&.listbox,
&.upload {
.right {
vertical-align: top;
margin-top: 4px;
}
}
&.htmleditor {
.middleColumn,
.description {
width: 95%;
}
}
&.optionset {
.right {
margin-top: 8px;
}
li {
width: 170px;
}
}
&.listbox {
select {
margin-left: 0;
}
}
&.upload {
.description {
margin-left: 184px;
}
}
.cms-file-info-data & {
> .middleColumn {
margin-left: 8px !important;
width: auto;
min-width: 0;
}
.description {
margin-left: 104px;
width: auto;
}
}
}
}
form.stacked .field, .field.stacked {
@include form-field-stacked;
}
form.small .field, .field.small {
label {
&.left {
width: $grid-x * 14;
}
}
.middleColumn {
margin-left: $grid-x * 15;
}
input.text,
textarea,
select,
.TreeDropdownField {
width: auto;
}
}
.field {
/* TreeDropdowns */
.TreeDropdownField {
padding: 0;
.treedropdownfield-panel {
border: 1px solid lighten($color-medium-separator, 20%);
border-top: none;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
}
&.treedropdownfield-open-tree {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
&.treedropdownfield-with-rise {
-webkit-border-radius: 0 0 4px 4px;
-moz-border-radius: 0 0 4px 4px;
border-radius: 0 0 4px 4px;
.treedropdownfield-panel {
border: 1px solid lighten($color-medium-separator, 20%);
border-bottom: none;
-webkit-border-radius: 4px 4px 0 0;
-moz-border-radius: 4px 4px 0 0;
border-radius: 4px 4px 0 0;
}
}
// Hide badges, as they cost too much horizontal space,
// and mess up rendering for selected node title
.badge {
display: none;
}
}
/* dropdowns */
.dropdown {
select {
margin-top: $grid-y;
}
}
/* Chosen override */
.chosen-container {
max-width: 512px;
vertical-align: bottom;
.chosen-results {
padding-top: 4px;
li {
font-size: 11px;
line-height: $grid-y * 2;
padding: $grid-y / 2 $grid-x / 2;
}
}
}
.chosen-container-active {
.chosen-single {
border: 1px solid lighten($color-medium-separator, 10%);
}
}
.chosen-container-single .chosen-single {
height: 32px;
line-height: 30px; /* not relative, as then we'd had to redo most of chosen */
font-size: $font-size-root;
background-image: linear-gradient(#efefef, #fff 10%, #fff 90%, #efefef);
&:hover, &:focus, &:active {
text-decoration: none;
}
div {
width: 24px;
b {
background-position: 4px 3px;
}
}
}
.chosen-choices {
border-radius: 3px;
.search-choice {
line-height: 16px;
.search-choice-close {
top: 5px;
}
}
.search-field input {
height: 18px;
}
}
/* Date Fields */
input.month, input.day, input.year {
width: ($grid-x * 7);
}
input.time {
width: ($grid-x * 11); // smaller time field, since input is restricted
}
/* Hides borders in settings/access. Activated from JS */
&.remove-splitter {
border-bottom: none;
box-shadow: none;
}
}
/** ----------------------------------------------------
* Buttons
* ---------------------------------------------------- */
.cms {
.button-no-style{
button{
border-radius: 0;
background: none;
border: none;
color: $color-text-blue-link;
display: block;
font-weight:normal;
margin:0;
outline:none;
padding-left:10px;
padding-right:10px;
text-align: left;
text-shadow: none;
white-space:normal;
&.ss-ui-action-destructive{
color: darken($color-error,25%);
}
span{
padding-left:0;
padding-right:0;
}
&:hover, &:focus, &:active{
box-shadow: none;
outline: none;
background: none;
border: none;
}
&.loading {
background: transparent url(../images/network-save.gif) no-repeat right $grid-x center;
.ui-button-text {
padding-left: 16px /* icon */ + ($grid-x/2);
}
}
}
}
.btn-toolbar, .cms-actions-row {
> *:last-child {
margin-right: 0;
}
}
.south .btn-toolbar, .ui-tabs-panel .btn-toolbar, .ui-tabs-panel iframe .btn-toolbar {
padding-top: 0;
padding-bottom: 0;
}
input.loading, button.loading,
input.ui-state-default.loading, .ui-widget-content input.ui-state-default.loading,
.ui-widget-header input.ui-state-default.loading {
.ui-icon {
background: transparent url(../images/network-save.gif) no-repeat 0 0;
}
color: lighten($color-text-dark, 20%);
border-color: darken($color-button-disabled, 10%);
cursor: default;
}
input.loading, button.loading {
&.ss-ui-action-constructive {
.ui-icon {
background: transparent url(../images/network-save-constructive.gif) no-repeat 0 0;
}
}
}
.ss-ui-button {
margin-top:0px;
font-weight: bold;
text-decoration: none;
line-height: $grid-y * 2;
color: lighten($color-text-dark, 10%);
border: 1px solid $color-button-generic-border;
border-bottom: 1px solid darken($color-button-generic-border, 10%);
cursor: pointer;
background-color: $color-button-generic;
white-space: nowrap;
background-image: linear-gradient(lighten($color-button-generic, 10%), darken($color-button-generic, 5%));
text-shadow: lighten($color-button-generic, 20%) 0 1px 1px;
&.ui-state-hover, &:hover {
text-decoration: none;
background-color: lighten($color-button-generic, 10%);
background-image: linear-gradient(lighten($color-button-generic, 20%), $color-button-generic);
box-shadow: 0 0 5px darken($color-button-generic, 20%);
}
&:active, &:focus, &.ui-state-active, &.ui-state-focus {
border: 1px solid darken($color-button-generic, 20%);
background-color: lighten($color-button-generic, 10%);
background-image: linear-gradient(lighten($color-button-generic, 20%), $color-button-generic);
box-shadow: 0 0 5px darken($color-button-generic, 20%) inset;
}
&.ss-ui-action-minor {
span {
padding-left: 0;
padding-right: 0;
}
}
/* constructive */
&.ss-ui-action-constructive {
text-shadow:none;
font-weight: bold;
color: $color-text-light;
border-color: $color-button-constructive-border;
border-bottom-color: darken($color-button-constructive-border, 10%);
background-color: $color-button-constructive;
background-image: linear-gradient(scale-color(lighten($color-button-constructive, 10%), $red:50%), $color-button-constructive);
text-shadow: darken($color-button-constructive, 3%) 0 -1px -1px;
&.ui-state-hover, &:hover {
border-color: darken($color-button-constructive-border, 10%);
background-color: $color-button-constructive;
background-image: linear-gradient(
scale-color(saturate(lighten($color-button-constructive, 10%), 10%), $red:60%),
lighten($color-button-constructive, 5%)
);
}
&:active, &:focus, &.ui-state-active, &.ui-state-focus {
background-color: darken($color-button-constructive, 2%);
box-shadow: inset 0 1px 3px rgb(23, 24, 26), 0 1px 0 rgba(255, 255, 255, .6);
}
}
/* destructive */
&.ss-ui-action-destructive {
color: $color-button-destructive;
background-color: $color-button-generic;
}
&.ss-ui-button-small {
.ui-button-text {
font-size: $font-size-sm;
}
}
&.ui-state-highlight {
background-color: $color-button-highlight;
border: 1px solid $color-button-highlight-border;
}
&.ss-ui-action-minor {
background: none;
border: 0;
color: lighten($color-text-dark, 10%);
text-decoration: underline;
box-shadow: none;
&:hover {
text-decoration: none;
color: $color-text-dark;
}
&:focus,
&:active {
text-decoration: none;
color: lighten($color-text-dark, 20%);
}
}
&.ss-ui-button-loading {
opacity: 0.8;
}
/* font-icon buttons */
&[class*="font-icon-"],
&[class^="font-icon-"],
&.ss-ui-button-constructive[class*="font-icon-"] {
padding: 5px 8px;
margin-bottom: $grid-y*1.5;
vertical-align: middle;
box-shadow: none;
border: 0;
background: none;
text-shadow: none;
text-decoration: none;
font-weight: normal;
color: $color-text;
&:hover {
box-shadow: none;
background: #dee3e8;
color: darken($color-text, 10%);
border: 0;
}
&:focus {
box-shadow: none;
background: #dee3e8;
color: darken($color-text, 10%);
border: 0;
}
&:before {
font-size: 16px;
margin-right: 5px;
margin-top: 0;
vertical-align: middle;
}
&.ui-state-focus {
box-shadow: none;
}
&.active,
&:active {
box-shadow: 0 0 3px rgba(191, 194, 196, .9) inset;
background: #dee3e8;
color: darken($color-text, 10%);
border: 0;
}
&.font-icon-search {
padding: 4px 5px;
margin-right: 6px;
&::before {
font-size: 20px;
}
}
.ui-button-text {
display: inline-block;
padding: 0;
}
.ui-icon {
display: none;
}
&.no-text {
padding: 5px 6px;
color: lighten($color-text, 10%);
&:hover,
&:active,
&:focus,
&.active {
box-shadow: none;
background: none;
color: darken($color-text, 10%);
}
&::before {
margin: 0;
}
}
}
}
.ss-ui-buttonset {
.ui-button {
margin-left: -1px;
}
}
.ss-ui-buttonset {
margin: 0 $grid-x 0 0;
padding: 0;
}
.ss-ui-loading-icon {
background: url(../images/network-save.gif) no-repeat;
display: block;
width: 16px;
height: 16px;
}
}
/** ----------------------------------------------------
* Grouped form fields
* ---------------------------------------------------- */
.fieldgroup {
.fieldgroup-field {
float: left;
display: block;
padding: $grid-y $grid-x 0 0;
.field {
border: none;
padding-bottom: 0;
}
.fieldholder-small {
padding: 0 0 $grid-y 0;
}
.fieldgroup input.text, .fieldgroup textarea, .fieldgroup select, .fieldgroup .TreeDropdownField {
margin-left: 0;
}
// Style specific label with display block, otherwise
// checkbox falls under the text
.fieldholder-small-label {
display: block;
}
label {
padding: $grid-y $grid-x $grid-y 0;
margin-left: 0;
margin-right: 1em;
width: auto;
}
.checkbox {
display: inline;
}
.fieldgroup .fieldgroup-field {
padding-top: 0;
}
}
&.stacked {
.fieldgroup-field {
float: none;
}
}
}
.ss-toggle {
margin: $grid-y 0;
.ui-accordion-header {
font-weight: bold;
font-size: 12px;
&.ui-state-default {
background-image: linear-gradient(lighten($color-shadow-light, 15%), $color-shadow-light);
text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
}
.ui-accordion-header-icon {
margin-top: -9px;
}
}
.ui-accordion-content {
padding: $grid-y 0 $grid-y*1.5;
.field {
box-shadow: none;
padding-left: $grid-x*1.5;
padding-right: $grid-x*1.5;
&:last-child {
margin-bottom: 0;
}
.middleColumn {
margin-left: 0;
}
label {
float: none;
margin-left: 0;
&.ss-ui-button {
float: left;
}
}
.description {
margin-left: 0;
}
}
}
}
/** ----------------------------------------------------
* Checkbox Field
* ---------------------------------------------------- */
.field.checkbox {
padding-left: $grid-x * 23;
margin-bottom: $grid-y;
input {
margin-left: 0;
position: relative;
display: inline;
}
}
input.checkbox {
margin-left: 0;
}
/** ----------------------------------------------------
* Radiobutton Field
* ---------------------------------------------------- */
.field.radio {
padding-left: $grid-x * 23;
margin-bottom: $grid-y;
input {
margin-left: 0;
}
}
input.radio {
margin-left: 0
}
/** ----------------------------------------------------
* Optionsets and Checkboxsets
* ---------------------------------------------------- */
.optionset {
padding-bottom: 8px;
padding-top: 8px;
padding-left: 0;
li {
float: left;
display: block;
width: $grid-x * 27;
padding-bottom: $grid-x;
padding-top: 0;
line-height: $grid-y * 2;
list-style: none;
input {
display: inline-block;
padding-right: 0;
margin-right: 0;
}
label {
display: inline;
cursor: pointer;
padding-left: $grid-y;
}
}
&.field {
padding-top: 0;
}
}
/** ----------------------------------------------------
* HTML Text
* ---------------------------------------------------- */
.htmleditor {
@include form-field-stacked;
textarea {
visibility: hidden; // enabled by JS
}
.mceEditor {
input, select {
width: auto;
}
}
label.left {
padding-bottom: $grid-y/2;
}
}
.action-hidden {
display: none;
}
/***************************************************************
* On/Off Switch.
* Example html set-up:
* <fieldset class="switch-states">
* <div class="switch">
* <a href="my-page/?stage=Draft" class="first active"><span>Draft</span></a>
* <a href="my-page/?stage=Live" class="last"><span>Live</span></a>
* </div>
* </fieldset>
****************************************************************/
.switch-states{
padding:0 20px 0 0;
margin-right: 5px;
.switch{
@include box-shadow(inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1));
@include border-radius(3px);
background:lighten(#2d3035,69%);
display: block;
height: 25px;
margin-top:3px;
width:100%;
z-index:5;
a {
@include hide-text-overflow;
color:lighten($color-text-dark,40%);
color:rgba($color-text-dark,0.5);
cursor: pointer;
float:left;
font-weight:bold;
height: 100%;
line-height: 25px;
z-index:2;
position:relative;
min-width: 80px;
/* Make text unselectable in browsers that support that */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
&:hover{
color:lighten($color-text-dark, 30%);
color:rgba($color-text-dark,0.7);
}
span {
@include box-sizing('border-box');
@include hide-text-overflow;
display:inline-block;
padding:0 10px;
text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
color:lighten($color-text-dark,40%);
color:rgba($color-text-dark,0.5);
width: 100%;
text-align: center;
}
&.active {
@include background-image(linear-gradient(
#2b9c32,
#64ab36
));
@include border-radius(3px);
@include box-shadow(inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2));
text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
background-color: #2b9c32;
span {
color: #fff;
text-shadow: 0 -1px 0 darken($color-menu-button,10%);
}
}
}
}
}