fomantic-ui
Version:
Fomantic empowers designers and developers by creating a shared vocabulary for UI.
946 lines (852 loc) • 26.9 kB
text/less
/*!
* # Fomantic-UI - Step
* https://github.com/fomantic/Fomantic-UI/
*
*
* Released under the MIT license
* https://opensource.org/licenses/MIT
*
*/
/*******************************
Step
*******************************/
/* --------------
Load Theme
--------------- */
@type: "element";
@element: "step";
@import (multiple) "../../theme.config";
@notCircular: if(@variationStepCircular, e(":not(.circular)"));
@notVertical: if(@variationStepVertical, e(":not(.vertical)"));
@notUnstackable: if(@variationStepUnstackable, e(":not(.unstackable)"));
/*******************************
Plural
*******************************/
.ui.steps@{notCircular} {
display: inline-flex;
flex-direction: row;
align-items: stretch;
margin: @stepMargin;
background: @stepsBackground;
box-shadow: @stepsBoxShadow;
line-height: @lineHeight;
border-radius: @stepsBorderRadius;
border: @stepsBorder;
}
.ui.steps@{notUnstackable} {
flex-wrap: wrap;
}
/* First Steps */
.ui.steps:first-child {
margin-top: 0;
}
/* Last Steps */
.ui.steps:last-child {
margin-bottom: 0;
}
/*******************************
Singular
*******************************/
.ui.steps@{notCircular} .step {
position: relative;
display: flex;
flex: 1 0 auto;
flex-flow: row wrap;
vertical-align: middle;
align-items: center;
justify-content: @justifyContent;
margin: @verticalMargin @horizontalMargin;
padding: @verticalPadding @horizontalPadding;
background: @background;
color: @textColor;
box-shadow: @boxShadow;
border-radius: @borderRadius;
border: @border;
border-right: @divider;
transition: @transition;
}
/* Arrow */
.ui.steps@{notCircular} .step::after {
display: none;
position: absolute;
z-index: 2;
content: "";
top: @arrowTopOffset;
right: @arrowRightOffset;
background-color: @arrowBackgroundColor;
width: @arrowSize;
height: @arrowSize;
border-style: solid;
border-color: @borderColor;
border-width: @arrowBorderWidth;
transition: @transition;
transform: translateY(-50%) translateX(50%) rotate(-45deg);
}
/* First Step */
.ui.steps@{notCircular} .step:first-child {
padding-left: @horizontalPadding;
border-radius: @stepsBorderRadius 0 0 @stepsBorderRadius;
}
/* Last Step */
.ui.steps@{notCircular} .step:last-child {
border-radius: 0 @stepsBorderRadius @stepsBorderRadius 0;
border-right: none;
margin-right: 0;
}
/* Only Step */
.ui.steps@{notCircular} .step:only-child {
border-radius: @stepsBorderRadius;
}
/*******************************
Content
*******************************/
/* Title */
.ui.steps .step .title {
font-family: @titleFontFamily;
font-size: @titleFontSize;
font-weight: @titleFontWeight;
line-height: @lineHeight;
}
.ui.steps .step > .title {
width: 100%;
}
/* Description */
.ui.steps .step .description {
font-weight: @descriptionFontWeight;
font-size: @descriptionFontSize;
color: @descriptionColor;
line-height: @lineHeight;
}
.ui.steps .step > .description {
width: 100%;
}
.ui.steps .step .title ~ .description {
margin-top: @descriptionDistance;
}
/* Icon */
.ui.steps .step > i.icon {
line-height: 1;
font-size: @iconSize;
margin: 0 @iconDistance 0 0;
}
.ui.steps .step > i.icon,
.ui.steps .step > i.icon ~ .content {
display: block;
flex: 0 1 auto;
align-self: @iconAlign;
}
/* Horizontal Icon */
.ui.steps@{notVertical} .step > i.icon {
width: auto;
}
/* Link */
.ui.steps .link.step,
.ui.steps a.step {
cursor: pointer;
}
/*******************************
Types
*******************************/
& when (@variationStepCircular) {
.ui.circular.steps {
border: 0;
border-radius: 0;
box-shadow: none;
&@{notVertical} {
background: transparent;
border: 0;
border-radius: 0;
box-shadow: none;
position: relative;
display: flex;
padding: @circularStepsMargin;
margin: @circularStepsPadding;
& .step {
background: @circularStepColor;
cursor: default;
height: @circularStepBorderWidth;
display: flex;
flex-wrap: wrap;
align-items: center;
flex: 1;
position: relative;
margin-left: @circularStepRingSize;
&::before {
left: -@circularStepRingSize;
}
&::after {
left: @circularStepIconDistance;
}
&.completed {
background: @circularStepCompletedBackground;
}
&.completed::after {
left: @circularStepCompletedIconDistance;
}
&:last-child {
flex: 0;
}
& .content {
margin-top: @circularStepContentMarginTop;
padding: @circularStepContentPadding;
&.center.aligned {
margin-top: @circularStepContentCenterAlignedMarginTop;
& .title {
padding: @circularStepContentPadding;
margin-left: @circularStepContentCenterAlignedMarginLeft;
background: @circularStepContentCenterAlignedBackground;
}
}
&.bottom.aligned {
margin-top: @circularStepContentBottomAlignedMarginTop;
}
&:not(.aligned) .title + .description {
margin-top: @circularStepContentDescriptionDistance;
}
}
}
& a.step::before,
& a.step::after,
& a.step .content,
& .step.link .content,
& .step.link::before,
& .step.link::after {
cursor: pointer;
}
}
& .step {
color: inherit;
&::before {
content: "";
border-radius: 50%;
border: @circularStepBorder;
height: @circularStepRingSize;
width: @circularStepRingSize;
line-height: @circularStepRingSize;
position: absolute;
}
&::after {
content: "";
display: block;
position: absolute;
border-radius: 50%;
background: @circularStepColor;
height: @circularStepIconSize;
width: @circularStepIconSize;
}
&.active {
&::before {
border-color: @circularStepActiveColor;
}
&::after {
background: @circularStepActiveColor;
}
& .title {
color: @circularStepActiveColor;
}
}
&.completed {
&::before {
background: @circularStepCompletedBackground;
border-color: @circularStepCompletedBackground;
}
&::after {
background: transparent;
content: "\e800";
font-family: Step;
color: @circularStepCompletedColor;
height: auto;
line-height: @circularStepCompletedIconLineHeight;
}
}
}
}
@supports selector(:has(.f)) {
.ui.circular.steps@{notVertical} .step:last-child:has(.content) {
flex: 1;
}
.ui.circular.steps@{notVertical} .step:last-child:has(.center.aligned.content) {
background: none;
}
}
}
& when (@variationStepOrdered) {
/* --------------
Ordered
--------------- */
.ui.ordered.steps {
counter-reset: ordered;
}
.ui.ordered.steps .step::before {
text-align: center;
content: counter(ordered);
align-self: @iconAlign;
counter-increment: ordered;
font-family: @orderedFontFamily;
font-weight: @orderedFontWeight;
}
.ui.ordered.steps@{notCircular} .step::before {
display: block;
position: static;
font-size: @iconSize;
margin-right: @iconDistance;
}
& when (@variationStepCircular) {
.ui.circular.ordered.steps .step {
&::before {
line-height: calc(@circularStepRingSize - @circularStepBorderWidth);
}
&.completed::before {
content: "";
}
&::after {
background: transparent;
}
&.active::before {
color: @circularStepActiveColor;
}
}
}
.ui.ordered.steps .step > * {
display: block;
align-self: @iconAlign;
}
}
& when (@variationStepVertical) {
/* --------------
Vertical
--------------- */
.ui.vertical.steps@{notCircular} {
display: inline-flex;
flex-direction: column;
overflow: visible;
}
.ui.vertical.steps@{notCircular} .step {
justify-content: flex-start;
border-radius: @borderRadius;
padding: @verticalPadding @horizontalPadding;
border-right: none;
border-bottom: @verticalDivider;
}
.ui.vertical.steps@{notCircular} .step:first-child {
padding: @verticalPadding @horizontalPadding;
border-radius: @stepsBorderRadius @stepsBorderRadius 0 0;
}
.ui.vertical.steps@{notCircular} .step:last-child {
border-bottom: none;
border-radius: 0 0 @stepsBorderRadius @stepsBorderRadius;
}
.ui.vertical.steps@{notCircular} .step:only-child {
border-radius: @stepsBorderRadius;
}
/* Arrow */
.ui.vertical.steps@{notCircular} .step::after {
top: @verticalArrowTopOffset;
right: @verticalArrowRightOffset;
border-width: @verticalArrowBorderWidth;
display: @verticalArrowDisplay;
}
.ui.right.vertical.steps@{notCircular} .step::after {
border-width: @verticalLeftArrowBorderWidth;
left: @verticalLeftArrowLeftOffset;
right: @verticalLeftArrowRightOffset;
transform: translateY(-50%) translateX(-50%) rotate(-45deg);
}
.ui.vertical.steps@{notCircular} .active.step::after {
display: @verticalActiveArrowDisplay;
}
.ui.vertical.steps@{notCircular} .step:last-child::after {
display: @verticalLastArrowDisplay;
}
.ui.vertical.steps@{notCircular} .active.step:last-child::after {
display: @verticalActiveLastArrowDisplay;
}
/* Circular Step */
& when (@variationStepCircular) {
.ui.circular.vertical.steps {
display: inline-flex;
flex-flow: column wrap;
align-items: flex-start;
& .step {
position: relative;
width: 100%;
&::before {
left: 0;
top: 0;
}
&::after {
left: @verticalCircularStepIconDistance;
top: @verticalCircularStepIconDistance;
}
& .content {
padding-left: @verticalCircularStepContentPadding;
}
&:not(:last-child) {
padding-bottom: @verticalCircularStepPadding;
& .content::before {
content: "";
position: absolute;
border-left: @circularStepBorder;
top: @circularStepRingSize;
bottom: 0;
left: @verticalCircularStepLineDistance;
}
}
&.completed .content::before {
border-color: @circularStepCompletedBackground;
}
&.completed::before {
background: @circularStepCompletedBackground;
border-color: @circularStepCompletedBackground;
}
&.completed::after {
top: @verticalCircularStepCompletedIconDistance;
}
}
}
}
}
/* ---------------
Responsive
---------------- */
/* Mobile (Default) */
@media only screen and (max-width: (@largestMobileScreen)) {
.ui.steps@{notUnstackable}@{notCircular} {
display: inline-flex;
overflow: visible;
flex-direction: column;
}
.ui.steps@{notUnstackable}@{notCircular} .step {
width: 100% ;
flex-direction: column;
border-radius: @borderRadius;
padding: @verticalPadding @horizontalPadding;
border-right: none;
border-bottom: @stepsBorder;
}
.ui.steps@{notUnstackable}@{notCircular} .step:first-child {
padding: @verticalPadding @horizontalPadding;
border-radius: @stepsBorderRadius @stepsBorderRadius 0 0;
}
.ui.steps@{notUnstackable}@{notCircular} .step:last-child {
border-radius: 0 0 @stepsBorderRadius @stepsBorderRadius;
border-bottom: none;
}
/* Arrow */
.ui.steps@{notUnstackable}@{notCircular} .step::after {
top: unset;
bottom: -@arrowSize;
right: 50%;
transform: translateY(-50%) translateX(50%) rotate(45deg);
}
& when (@variationStepVertical) {
.ui.vertical.steps@{notCircular} .active.step:last-child::after {
display: none;
}
}
/* Content */
.ui.steps@{notUnstackable}@{notCircular} .step .content {
text-align: center;
}
/* Icon */
.ui.steps@{notUnstackable}@{notCircular} .step > i.icon,
.ui.ordered.steps@{notUnstackable}@{notCircular} .step::before {
margin: 0 0 @mobileIconDistance 0;
}
}
/*******************************
States
*******************************/
/* Link Hover */
.ui.steps@{notCircular} .link.step:hover::after,
.ui.steps@{notCircular} .link.step:hover,
.ui.steps@{notCircular} a.step:hover::after,
.ui.steps@{notCircular} a.step:hover {
background: @hoverBackground;
color: @hoverColor;
}
/* Link Down */
.ui.steps@{notCircular} .link.step:active::after,
.ui.steps@{notCircular} .link.step:active,
.ui.steps@{notCircular} a.step:active::after,
.ui.steps@{notCircular} a.step:active {
background: @downBackground;
color: @downColor;
}
/* Active */
.ui.steps@{notCircular} .step.active {
cursor: auto;
background: @activeBackground;
}
.ui.steps@{notCircular} .step.active::after {
background: @activeBackground;
}
.ui.steps@{notCircular} .step.active .title {
color: @activeColor;
}
.ui.ordered.steps .step.active::before,
.ui.steps .active.step i.icon {
color: @activeIconColor;
}
/* Active Arrow */
.ui.steps@{notCircular} .step::after {
display: @arrowDisplay;
}
.ui.steps@{notCircular} .active.step::after {
display: @activeArrowDisplay;
}
.ui.steps@{notCircular} .step:last-child::after {
display: @lastArrowDisplay;
}
.ui.steps@{notCircular} .active.step:last-child::after {
display: @activeLastArrowDisplay;
}
/* Active Hover */
.ui.steps@{notCircular} .link.active.step:hover::after,
.ui.steps@{notCircular} .link.active.step:hover,
.ui.steps@{notCircular} a.active.step:hover::after,
.ui.steps@{notCircular} a.active.step:hover {
cursor: pointer;
background: @activeHoverBackground;
color: @activeHoverColor;
}
/* Completed */
.ui.steps .step.completed > i.icon::before,
.ui.ordered.steps .step.completed::before {
color: @completedColor;
}
& when (@variationStepDisabled) {
/* Disabled */
.ui.steps@{notCircular} .disabled.step {
cursor: auto;
background: @disabledBackground;
pointer-events: none;
}
.ui.steps@{notCircular} .disabled.step,
.ui.steps@{notCircular} .disabled.step .title,
.ui.steps@{notCircular} .disabled.step .description {
color: @disabledColor;
}
.ui.steps@{notCircular} .disabled.step::after {
background: @disabledBackground;
}
& when (@variationStepCircular) {
.ui.circular.steps .disabled.step {
cursor: auto;
opacity: @circularStepDisabledItemOpacity;
pointer-events: none;
&::before,
&::after {
cursor: auto;
}
}
}
}
/*******************************
Variations
*******************************/
& when (@variationStepStackable) {
/* --------------
Stackable
--------------- */
/* Tablet Or Below */
@media only screen and (max-width: @largestTabletScreen) {
.ui[class*="tablet stackable"].steps@{notCircular} {
display: inline-flex;
overflow: visible;
flex-direction: column;
}
/* Steps */
.ui[class*="tablet stackable"].steps@{notCircular} .step {
flex-direction: column;
border-radius: @borderRadius;
padding: @verticalPadding @horizontalPadding;
border-right: none;
border-bottom: @stepsBorder;
}
.ui[class*="tablet stackable"].steps@{notCircular} .step:first-child {
padding: @verticalPadding @horizontalPadding;
border-radius: @stepsBorderRadius @stepsBorderRadius 0 0;
}
.ui[class*="tablet stackable"].steps@{notCircular} .step:last-child {
border-radius: 0 0 @stepsBorderRadius @stepsBorderRadius;
border-bottom: none;
}
/* Arrow */
.ui[class*="tablet stackable"].steps@{notCircular} .step::after {
top: unset;
bottom: -@arrowSize;
right: 50%;
transform: translateY(-50%) translateX(50%) rotate(45deg);
}
/* Content */
.ui[class*="tablet stackable"].steps@{notCircular} .step .content {
text-align: center;
}
/* Icon */
.ui[class*="tablet stackable"].steps .step > i.icon,
.ui[class*="tablet stackable"].ordered.steps .step::before {
margin: 0 0 @mobileIconDistance 0;
}
}
}
& when (@variationStepFluid) {
/* --------------
Fluid
--------------- */
/* Fluid */
.ui.fluid.steps {
display: flex;
width: 100%;
}
}
& when (@variationStepAttached) {
/* --------------
Attached
--------------- */
/* Top */
.ui.attached.steps@{notCircular} {
width: @attachedWidth ;
margin: 0 @attachedHorizontalOffset @attachedVerticalOffset;
max-width: @attachedWidth;
border-radius: @stepsBorderRadius @stepsBorderRadius 0 0;
}
.ui.attached.steps@{notCircular} .step:first-child {
border-radius: @stepsBorderRadius 0 0 0;
}
.ui.attached.steps@{notCircular} .step:last-child {
border-radius: 0 @stepsBorderRadius 0 0;
}
/* Bottom */
.ui.bottom.attached.steps@{notCircular} {
margin: @attachedVerticalOffset @attachedHorizontalOffset 0;
border-radius: 0 0 @stepsBorderRadius @stepsBorderRadius;
}
.ui.bottom.attached.steps@{notCircular} .step:first-child {
border-radius: 0 0 0 @stepsBorderRadius;
}
.ui.bottom.attached.steps@{notCircular} .step:last-child {
border-radius: 0 0 @stepsBorderRadius 0;
}
}
& when (@variationStepEqualWidth) {
/* -------------------
Evenly Divided
-------------------- */
.ui.one.steps,
.ui.two.steps,
.ui.three.steps,
.ui.four.steps,
.ui.five.steps,
.ui.six.steps,
.ui.seven.steps,
.ui.eight.steps {
width: 100%;
}
.ui.one.steps > .step,
.ui.two.steps > .step,
.ui.three.steps > .step,
.ui.four.steps > .step,
.ui.five.steps > .step,
.ui.six.steps > .step,
.ui.seven.steps > .step,
.ui.eight.steps > .step {
flex-wrap: nowrap;
}
.ui.one.steps > .step {
width: 100%;
}
.ui.two.steps > .step {
width: 50%;
}
.ui.three.steps > .step {
width: 33.333%;
}
.ui.four.steps > .step {
width: 25%;
}
.ui.five.steps > .step {
width: 20%;
}
.ui.six.steps > .step {
width: 16.666%;
}
.ui.seven.steps > .step {
width: 14.285%;
}
.ui.eight.steps > .step {
width: 12.5%;
}
}
/* -------------------
Sizes
-------------------- */
.ui.steps .step,
.ui.step {
font-size: @medium;
}
& when not (@variationStepSizes = false) {
each(@variationStepSizes, {
@s: @@value;
.ui.@{value}.steps .step,
.ui.@{value}.step {
font-size: @s;
}
& when (@variationStepCircular) {
.ui.@{value}.circular.steps@{notVertical} {
margin: @s 0;
padding: @s 0;
}
}
});
}
& when (@variationStepInverted) {
/* --------------
Inverted
--------------- */
.ui.inverted.steps@{notCircular} {
border: 1px solid @solidWhiteBorderColor;
}
.ui.inverted.steps@{notCircular} .step {
color: @invertedTextColor;
background: @black;
border-color: @solidWhiteBorderColor;
}
.ui.inverted.steps@{notCircular} .step::after {
background-color: @black;
border-color: @solidWhiteBorderColor;
}
.ui.inverted.steps .step .description {
color: @invertedTextColor;
}
/* Active */
.ui.inverted.steps@{notCircular} .step.active,
.ui.inverted.steps@{notCircular} .step.active::after {
background: @invertedActiveBackground;
}
.ui.inverted.ordered.steps@{notCircular} .step.active::before,
.ui.inverted.steps@{notCircular} .active.step i.icon {
color: @invertedSelectedTextColor;
}
& when (@variationStepDisabled) {
/* Disabled */
.ui.inverted.steps@{notCircular} .disabled.step,
.ui.inverted.steps@{notCircular} .disabled.step::after {
background: @invertedDisabledBackground;
}
.ui.inverted.steps@{notCircular} .disabled.step,
.ui.inverted.steps@{notCircular} .disabled.step .title,
.ui.inverted.steps@{notCircular} .disabled.step .description {
color: @invertedDisabledTextColor;
}
}
/* Link Hover */
.ui.inverted.steps@{notCircular} .link.step:hover::after,
.ui.inverted.steps@{notCircular} .link.step:hover,
.ui.inverted.steps@{notCircular} a.step:hover::after,
.ui.inverted.steps@{notCircular} a.step:hover {
background: @invertedHoverBackground;
color: @invertedHoveredTextColor;
}
/* Link Down */
.ui.inverted.steps@{notCircular} .link.step:active::after,
.ui.inverted.steps@{notCircular} .link.step:active,
.ui.inverted.steps@{notCircular} a.step:active::after,
.ui.inverted.steps@{notCircular} a.step:active {
background: @invertedActiveHoverBackground;
color: @invertedPressedTextColor;
}
& when (@variationStepCircular) {
/* Circular Step */
.ui.inverted.circular.steps {
& .step .content {
color: @invertedTextColor;
}
&@{notVertical} {
& .step:not(.completed) {
background: @invertedTextColor;
}
& .step:not(.active):not(.completed)::before {
border-color: @invertedTextColor;
}
& .step .center.aligned.content .title {
background: @invertedCircularStepContentCenterAlignedBackground;
}
}
&:not(.ordered) .step:not(.active):not(.completed)::after {
background: @invertedTextColor;
}
& when (@variationStepVertical) {
&.vertical {
& .step:not(.active):not(.completed)::before {
border-color: @invertedTextColor;
}
& .step:not(.completed) .content::before {
background: @invertedTextColor;
}
}
}
}
}
}
& when (@variationStepCircular) and not (@variationStepColors = false) {
each(@variationStepColors, {
@variation: @value;
@color: @colors[@@variation][color];
.ui.ui.circular.steps .step.@{variation} {
&::before {
border-color: @color;
}
&::after {
background: @color;
}
}
.ui.ui.@{variation}.circular.steps .step, .ui.ui.ui.circular.steps .step.@{variation} {
&.active::before {
border-color: @color;
}
&.active::after {
background: @color;
}
&.completed::before {
background: @color;
border-color: @color;
}
}
.ui.ui.@{variation}.circular.steps@{notVertical} .step, .ui.ui.ui.circular.steps@{notVertical} .step.@{variation} {
&.completed {
background: @color;
}
}
.ui.ui.circular.steps@{notVertical} .step.@{variation} {
background: @color;
}
.ui.ui.@{variation}.circular.steps .step, .ui.ui.ui.circular.steps .step.@{variation} {
&.active .content .title {
color: @color;
}
}
& when (@variationStepVertical) {
.ui.ui.vertical.circular.steps .step.completed.@{variation} .content::before {
border-color: @color;
}
.ui.ui.@{variation}.vertical.circular.steps .step, .ui.ui.vertical.circular.steps .step.@{variation} {
&.completed .content::before {
border-color: @color;
}
}
}
& when (@variationStepOrdered) {
.ui.ui.@{variation}.circular.ordered.steps .step, .ui.ui.circular.ordered.steps .step.@{variation} {
&::after {
background: transparent;
}
&.active::before {
color: @color;
}
}
}
});
}
// stylelint-disable no-invalid-position-at-import-rule
@import (multiple, optional) "../../overrides.less";