rsuite
Version:
A suite of react components
214 lines (177 loc) • 4.62 kB
text/less
@import '../../styles/common';
.@{ns}form-control-wrapper .@{ns}error-message {
position: absolute;
padding: @error-message-padding-vertical @error-message-padding-horizontal;
background-color: @error-message-background-color;
border: 1px solid @error-message-border-color;
border-radius: @border-radius-base;
filter: ~'drop-shadow(0 0 6px rgba(0,0,0,.1))';
z-index: @zindex-error-message;
color: @error-message-font-color;
font-size: @error-message-font-size;
display: none;
white-space: nowrap;
// Used to provide relation for error message
&-wrapper {
position: absolute;
}
&-show {
display: block;
animation-duration: 0.3s;
animation-timing-function: ease-out;
}
&-arrow {
&::before,
&::after {
content: '';
position: absolute;
border-color: transparent;
border-style: solid;
}
}
// Placement
// == Bottom Left && Bottom Right && Top Left && Top Right
&-placement-bottom-start,
&-placement-bottom-end {
bottom: -1px; // Error message width form-control has 1px gap
.@{ns}error-message {
top: 0;
&-show {
animation-name: errorMessageSlideDownIn;
}
}
.@{ns}error-message-arrow {
&::before,
&::after {
border-width: 0 @error-message-triangle-width @error-message-triangle-width;
border-bottom-color: @error-message-border-color;
top: -1 * @error-message-triangle-width;
}
&::after {
top: -1 * (@error-message-triangle-width - 1);
border-bottom-color: @error-message-background-color;
}
}
}
&-placement-top-start,
&-placement-top-end {
top: -1px; // Error message width form-control has 1px gap
.@{ns}error-message {
bottom: 0;
&-show {
animation-name: errorMessageSlideUpIn;
}
}
.@{ns}error-message-arrow {
&::before,
&::after {
border-width: @error-message-triangle-width @error-message-triangle-width 0;
border-top-color: @error-message-border-color;
bottom: -1 * @error-message-triangle-width;
}
&::after {
bottom: -1 * (@error-message-triangle-width - 1);
border-top-color: @error-message-background-color;
}
}
}
&-placement-bottom-start,
&-placement-top-start {
left: 0;
.@{ns}error-message {
left: 0;
}
.@{ns}error-message-arrow {
&::before,
&::after {
left: @error-message-triangle-gap;
}
}
}
&-placement-bottom-end,
&-placement-top-end {
right: 0;
.@{ns}error-message {
right: 0;
}
.@{ns}error-message-arrow {
&::before,
&::after {
right: @error-message-triangle-gap;
}
}
}
// == Left Top && Left Bottom Right && Top && Right Bottom
&-placement-left-start,
&-placement-left-end {
left: -1px;
.@{ns}error-message {
right: 0;
&-show {
animation-name: errorMessageSlideRightIn;
}
}
.@{ns}error-message-arrow {
&::before,
&::after {
border-width: @error-message-triangle-width 0 @error-message-triangle-width
@error-message-triangle-width;
border-left-color: @error-message-border-color;
right: -1 * @error-message-triangle-width;
}
&::after {
right: -1 * (@error-message-triangle-width - 1);
border-left-color: @error-message-background-color;
}
}
}
&-placement-right-start,
&-placement-right-end {
right: -1px;
.@{ns}error-message {
left: 0;
&-show {
animation-name: errorMessageSlideLeftIn;
}
}
.@{ns}error-message-arrow {
&::before,
&::after {
border-width: @error-message-triangle-width @error-message-triangle-width
@error-message-triangle-width 0;
border-right-color: @error-message-border-color;
left: -1 * @error-message-triangle-width;
}
&::after {
left: -1 * (@error-message-triangle-width - 1);
border-right-color: @error-message-background-color;
}
}
}
&-placement-left-start,
&-placement-right-start {
top: 0;
.@{ns}error-message {
top: 0;
}
.@{ns}error-message-arrow {
&::before,
&::after {
top: @error-message-triangle-vertical;
}
}
}
&-placement-left-end,
&-placement-right-end {
bottom: 0;
.@{ns}error-message {
bottom: 0;
}
.@{ns}error-message-arrow {
&::before,
&::after {
bottom: @error-message-triangle-vertical;
}
}
}
}