UNPKG

weui

Version:

A UI library by WeChat official design team, includes the most useful widgets/modules in mobile web applications.

327 lines (310 loc) 8.62 kB
/* * Tencent is pleased to support the open source community by making WeUI available. * * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the MIT License (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://opensource.org/licenses/MIT * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions and * limitations under the License. */ @import "../../base/fn"; /** 竖版的线上下端和文字区域对齐 横版的线左右端间距固定4px **/ body, page { --weui-STEPS-DEFAULT-COLOR: var(--weui-FG-3); --weui-STEPS-HIGHLIGHT-COLOR: var(--weui-BRAND); --weui-STEPS-FONT-SIZE: 17; --weui-STEPS-LINEHEIGHT: 1.4; --weui-STEPS-DOT-SIZE: ~"calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em)"; --weui-STEPS-ICON-SIZE: 40; --weui-STEPS-VERTICAL-DOT-GAP: ~"calc((1em - var(--weui-STEPS-DOT-SIZE)) / 2)"; --weui-STEPS-HORIZONAL-DOT-GAP: 4px; } .weui-steps { line-height: var(--weui-STEPS-LINEHEIGHT); font-size: ~"calc(1px * var(--weui-STEPS-FONT-SIZE))"; } .weui-steps__item__title, .weui-steps__item__desc { display: block; } .weui-steps__item__title { font-weight: 500; } .weui-steps__item__desc { font-size: 14px; color: var(--weui-FG-2); margin-top: 4px; } .weui-steps_vertical { position: relative; .weui-steps__item { position: relative; padding-bottom: 32px; &::before { content: ""; .setLeftLine(var(--weui-STEPS-DEFAULT-COLOR)); top: ~"calc((var(--weui-STEPS-LINEHEIGHT) - (var(--weui-STEPS-LINEHEIGHT) - 1) / 2) * 1em)"; // 线的顶部跟文字区域底部对齐 bottom: ~"calc((var(--weui-STEPS-LINEHEIGHT) - 1) / 2 * -1em)"; // 线的底部跟下个步骤的文字区域顶部对齐 } &:first-child { &:not(.weui-steps__item_success) { .weui-steps__item__inner { &::before { background-color: var(--weui-STEPS-HIGHLIGHT-COLOR); } } } } &:last-child { &::before { display: none; } } } .weui-steps__item__inner { position: relative; z-index: 1; // 盖在线的上层 padding-left: 36px; // before用来画圆点 &::before { content: ""; width: var(--weui-STEPS-DOT-SIZE); height: var(--weui-STEPS-DOT-SIZE); border-radius: 100%; background-color: var(--weui-STEPS-DEFAULT-COLOR); position: absolute; z-index: 1; left: 0; top: ~"calc(var(--weui-STEPS-LINEHEIGHT) / 2 * 1em)"; transform: translate(-50%, -50%); // 和步骤文本第一行垂直居中 } } .weui-steps__icon { font-size: ~"calc(1px * var(--weui-STEPS-FONT-SIZE))"; width: ~"calc(var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em)"; height: ~"calc(var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em)"; position: absolute; z-index: 1; left: 0; top: ~"calc(var(--weui-STEPS-LINEHEIGHT) / 2 * 1em)"; transform: translate(-50%, -50%); margin-top: ~"calc((var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em - 1em) / 2 - .28em)"; // 和文本第一行顶对齐,不能直接top0,因为上下都需要盖住线,最后的0.28em是图标的空白区域多余出来 } .weui-steps__item_icon { &::before { top: ~"calc(var(--weui-STEPS-VERTICAL-DOT-GAP) + var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em - .14em)"; // 最后的0.14em是因为图标的空白区域需要计算进去 } .weui-steps__item__inner { &::before { display: none; } } } .weui-steps__item_icon-prev { &::before { bottom: ~"calc(var(--weui-STEPS-VERTICAL-DOT-GAP) - (var(--weui-STEPS-LINEHEIGHT) - 1) / 2 * 1em + .14em)"; // 最后0.14em是因为图标的空白区域需要计算进去 } } .weui-steps__item_success { &::before { border-color: var(--weui-STEPS-HIGHLIGHT-COLOR); } .weui-steps__item__inner { &::before { background-color: var(--weui-STEPS-HIGHLIGHT-COLOR); } } & + .weui-steps__item { .weui-steps__item__inner { &::before { background-color: var(--weui-STEPS-HIGHLIGHT-COLOR); } } } } } .weui-steps_horizonal { display: flex; .weui-steps__item { flex: 1; display: flex; align-items: center; &::before { content: ""; display: block; width: var(--weui-STEPS-DOT-SIZE); height: var(--weui-STEPS-DOT-SIZE); border-radius: 100%; background-color: var(--weui-STEPS-DEFAULT-COLOR); flex-shrink: 0; } &::after { content: ""; height: 0.5px; flex: 1; margin: 0 var(--weui-STEPS-HORIZONAL-DOT-GAP); background: var(--weui-STEPS-DEFAULT-COLOR); } &:last-child { flex: none; &::after { display: none; } } &:first-child { &:not(.weui-steps__item_success) { &::before { background: var(--weui-STEPS-HIGHLIGHT-COLOR); } } } } .weui-steps__item__inner { margin-left: 8px; } .weui-steps__item_success { &::before, &::after { background: var(--weui-STEPS-HIGHLIGHT-COLOR); } & + .weui-steps__item { &::before { background: var(--weui-STEPS-HIGHLIGHT-COLOR); } } } } // 以下两种扩展暂时不放出来 .weui-steps_horizonal-primary { display: flex; .weui-steps__item { flex: 1; position: relative; &::before { .setTopLine(var(--weui-STEPS-DEFAULT-COLOR)); } &:last-child { flex: none; &::before { display: none; } } } .weui-steps__item__inner { position: relative; padding-top: 36px; &::before { content: ""; position: absolute; z-index: 1; width: var(--weui-STEPS-DOT-SIZE); height: var(--weui-STEPS-DOT-SIZE); border-radius: 100%; background-color: var(--weui-STEPS-DEFAULT-COLOR); top: 0; left: 0; transform: translateY(-50%); } &::after { content: ""; background-color: var(--weui-BG-2); width: ~"calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP))"; height: ~"calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP))"; position: absolute; top: 0; left: 0; transform: translate(~"calc(-50% + var(--weui-STEPS-DOT-SIZE) / 2)", -50%); } } .weui-steps__item_success { &::before { border-color: var(--weui-STEPS-HIGHLIGHT-COLOR); } .weui-steps__item__inner { &::before { background: var(--weui-STEPS-HIGHLIGHT-COLOR); } } & + .weui-steps__item { .weui-steps__item__inner { &::before { background: var(--weui-STEPS-HIGHLIGHT-COLOR); } } } } } .weui-steps_horizonal-center { display: flex; text-align: center; .weui-steps__item { flex: 1; position: relative; &::after, &::before { .setTopLine(var(--weui-STEPS-DEFAULT-COLOR)); } &::before { right: 50%; } &::after { left: 50%; } &:first-child { &::before { display: none; } } &:last-child { &::after { display: none; } } } .weui-steps__item__inner { position: relative; z-index: 1; padding-top: 36px; &::before { content: ""; position: absolute; z-index: 1; width: var(--weui-STEPS-DOT-SIZE); height: var(--weui-STEPS-DOT-SIZE); border-radius: 100%; background-color: var(--weui-STEPS-DEFAULT-COLOR); top: 0; left: 50%; transform: translate(-50%, -50%); } &::after { content: ""; background-color: var(--weui-BG-2); width: ~"calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP))"; height: ~"calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP))"; position: absolute; top: 0; left: 50%; transform: translate(-50%, -50%); } } .weui-steps__item_success { &::before, &::after, .weui-steps__item__inner::before, & + .weui-steps__item::before, & + .weui-steps__item .weui-steps__item__inner::before { background: var(--weui-STEPS-HIGHLIGHT-COLOR); } } }