Yo : ./style/lib/element/yo-range.scss
源代码
源代码
@charset "utf-8"; // 定义range的基础构造 @mixin _range { > .scale { position: relative; margin: 0 map-get($range, thumb-height) / 2; font-size: .12rem; > .divide { display: inline-block; @include transform(translatex(-50%)); white-space: nowrap; // 由于第1个刻度并不要指定偏移值,所以不需要绝对定位 // 所以将第1个刻度保留为流内元素,这样将能实现撑开父容器的效果 &:not(:first-child) { position: absolute; } &:last-child { left: 100%; } &.divide-on { color: map-get($range, on-divide-color); } } } > .track { overflow: hidden; position: relative; height: map-get($range, thumb-height) + .02rem; @include gradient(linear, top, map-get($range, track-color), map-get($range, track-color)); background-repeat: no-repeat; background-position: center; background-size: 100% map-get($range, track-height); > .thumb { position: absolute; &::before, &::after { display: block; content: "\0020"; } // 进度色轴 &::before { position: absolute; top: 50%; right: 0; left: -9999px; height: map-get($range, track-height); @include transform(translatey(-50%)); background-color: map-get($range, on-track-color); content: "\0020"; } &:not(:only-child):first-child { z-index: 1; &::before { background-color: map-get($range, track-color); } } // 进度滑球 &::after { position: relative; margin-top: .01rem; @include square(map-get($range, thumb-height)); border-radius: 50%; box-shadow: 0 0 .01rem rgba(0, 0, 0, 0.25), 0 .01rem .02rem rgba(0, 0, 0, 0.15); background-color: map-get($range, thumb-color); } // 放手时回弹和缓动 &.transition { @include transition(transform .3s ease-out); } } } } /** * @module element * @method yo-range * @version 3.0.0 * @description 构造区间选择的自定义使用方法 * @demo http://ued.qunar.com/hy2/yo/demo/src/html/element/yo-range.html * @param {String} $name 定义扩展名称 <3.0.0> * @param {Length} $track-height 滑轴高度 <3.0.0> * @param {Color} $track-color 滑轴色 <3.0.0> * @param {Color} $on-track-color 选中滑轴色 <3.0.0> * @param {Color} $on-divide-color 选中刻度色 <3.0.0> * @param {Length} $thumb-height 滑球高度 <3.0.0> * @param {Color} $thumb-color 滑球色 <3.0.0> */ @mixin yo-range( $name: default, $track-height: default, $track-color: default, $on-track-color: default, $on-divide-color: default, $thumb-height: default, $thumb-color: default) { // 区别是否新增实例还是修改本身 $name: if($name == default, "", "-#{$name}"); // 如果值为default,则取config的定义 @if $track-height == default { $track-height: map-get($range, track-height); } @if $track-color == default { $track-color: map-get($range, track-color); } @if $on-track-color == default { $on-track-color: map-get($range, on-track-color); } @if $on-divide-color == default { $on-divide-color: map-get($range, on-divide-color); } @if $thumb-height == default { $thumb-height: map-get($range, thumb-height); } @if $thumb-color == default { $thumb-color: map-get($range, thumb-color); } .yo-range#{$name} { > .scale { @if $thumb-height != map-get($range, thumb-height) { margin: 0 $thumb-height / 2; } > .divide { &.divide-on { @if $on-divide-color != map-get($range, on-track-color) { color: $on-divide-color; } } } } > .track { @if $thumb-height != map-get($range, thumb-height) { height: $thumb-height + .02rem; } @if $track-color != map-get($range, track-color) { @include gradient(linear, top, $track-color, $track-color); } @if $track-height != map-get($range, track-height) { background-size: 100% $track-height; } > .thumb { &::before { @if $track-height != map-get($range, track-height) { height: $track-height; } @if $on-track-color != map-get($range, on-track-color) { background-color: $on-track-color; } } &:not(:only-child):first-child { &::before { @if $track-color != map-get($range, track-color) { background-color: $track-color; } } } // 进度滑球 &::after { @if $thumb-height != map-get($range, thumb-height) { @include square($thumb-height); } @if $thumb-color != map-get($range, thumb-color) { background-color: $thumb-color; } } } } // 增量扩展 @content; } } // 调用本文件时载入按钮基础构造 .yo-range { @include _range; }