@mixin node-state( $direction, $background, $color, $dot-size: $s-2 ) { position: relative; #{$timeline-prefix}-item-timeline { position: absolute; @if $direction == 'rtl' { left: auto; right: 0; } @else { left: 0; } top: 0; height: 100%; #{$timeline-prefix}-item-node { position: relative; width: $timeline-item-node-size; height: $timeline-item-node-size + $timeline-item-node-padding * 2; padding: $timeline-item-node-padding 0; text-align: center; @if $direction == 'rtl' { float: right; } @else { float: left; } } #{$timeline-prefix}-item-node#{$timeline-prefix}-item-node-custom { width: $timeline-item-custom-node-size; height: auto; font-size: $timeline-item-custom-node-font-size; word-break: break-all; @if $direction == 'rtl' { margin-right: calc(-#{($timeline-item-custom-node-size - $timeline-item-node-size) / 2}); margin-left: 0; } @else { margin-left: calc(-#{($timeline-item-custom-node-size - $timeline-item-node-size) / 2}); } line-height: 1; } #{$timeline-prefix}-item-dot { display: block; position: absolute; width: $dot-size; height: $dot-size; border-radius: 100%; top: 50%; margin-top: -$dot-size/2; left: 50%; margin-left: -$dot-size/2; } #{$timeline-prefix}-item-icon { display: block; position: absolute; width: $timeline-item-icon-size + 4; height: $timeline-item-icon-size + 4; line-height: $timeline-item-icon-size + 4; border-radius: 100%; top: 50%; left: 50%; margin-top: -$timeline-item-icon-size/2 - 2; margin-left: -$timeline-item-icon-size/2 - 2; #{$timeline-icon-prefix} { @include icon-size($timeline-item-icon-size); } } #{$timeline-prefix}-item-tail { position: absolute; width: auto; height: calc(100% - #{$timeline-item-node-size + 2*$timeline-item-node-padding}); top: $timeline-item-node-size + 2*$timeline-item-node-padding; @if $direction == 'rtl' { left: auto; right: $timeline-item-node-size/2; } @else { left: $timeline-item-node-size/2; } i { display: inline-block; vertical-align: top; height: 100%; width: $timeline-item-tail-size; position: relative; background: $timeline-item-tail-color; -webkit-transition: all $motion-duration-immediately $motion-linear; transition: all $motion-duration-immediately $motion-linear; } } } #{$timeline-prefix}-item-content { display: inline-block; @if $direction == 'rtl' { margin-right: $timeline-item-content-margin-left + $timeline-item-node-size; margin-left: 0; } @else { margin-left: $timeline-item-content-margin-left + $timeline-item-node-size; } #{$timeline-prefix}-item-title { margin: 0; font-size: $timeline-item-title-font-size; font-weight: $timeline-item-title-font-weight; line-height: $timeline-item-title-font-size + 4; margin-top: $timeline-item-title-margin-top; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $timeline-item-title-color; @if $direction == 'rtl' { text-align: right; } @else { text-align: left; } } #{$timeline-prefix}-item-body { margin: 0; margin-top: $timeline-item-body-margin-top; font-size: $timeline-item-body-font-size; line-height: $timeline-item-body-font-size + 4; color: $timeline-item-body-color; @if $direction == 'rtl' { text-align: right; } @else { text-align: left; } } #{$timeline-prefix}-item-time { margin: 0; margin-top: $timeline-item-time-margin-top; margin-bottom: $timeline-item-time-margin-bottom; font-size: $timeline-item-time-font-size; color: $timeline-item-time-color; @if $direction == 'rtl' { text-align: right; } @else { text-align: left; } } } // 时间轴左边存在内容的情况 &#{$timeline-prefix}-item-has-left-content { & > #{$timeline-prefix}-item-left-content { position: absolute; width: $timeline-item-left-content-width; display: inline-block; font-size: $timeline-item-left-body-font-size; color: $timeline-item-left-body-color; line-height: $timeline-item-left-body-font-size + 4; margin-top: $timeline-item-title-margin-top; @if $direction == 'rtl' { text-align: left; padding-left: $timeline-item-content-margin-left; padding-right: 0; } @else { text-align: right; padding-right: $timeline-item-content-margin-left; } p { word-break: break-word; } } & > #{$timeline-prefix}-item-timeline { @if $direction == 'rtl' { margin-right: $timeline-item-left-content-width; margin-left: 0; } @else { margin-left: $timeline-item-left-content-width; } } & > #{$timeline-prefix}-item-content { @if $direction == 'rtl' { margin-right: $timeline-item-left-content-width + $timeline-item-content-margin-left + $timeline-item-node-size; margin-left: 0; } @else { margin-left: $timeline-item-left-content-width + $timeline-item-content-margin-left + $timeline-item-node-size; } } } #{$timeline-prefix}-item-dot { background: $background; } #{$timeline-prefix}-item-icon { background: $background; color: $color; } }