构建步骤进度条(css和jquery)

Wil*_*ner 58 css jquery multi-step progress-bar

在此输入图像描述

您已经在Paypal等网站上看到了此类进度条的迭代.如何使用CSS和设置它jquery?我有4页,每页都是一步...所以4个步骤.

Jel*_*tok 52

我已经搜索了一个可视化我的Web应用程序中的流程步骤的解决方案.我找到了Stephen A Thomas的以下优秀文章:

追踪纯CSS的进展(原始链接现已死亡)

在他的方法中,托马斯甚至只使用CSS - 没有Javascript!从本质上讲,他的文章中的以下CSS代码对我有用:

    <style>

    <!-- Progress with steps -->

    ol.progtrckr {
        margin: 0;
        padding: 0;
        list-style-type: none;
    }

    ol.progtrckr li {
        display: inline-block;
        text-align: center;
        line-height: 3em;
    }

    ol.progtrckr[data-progtrckr-steps="2"] li { width: 49%; }
    ol.progtrckr[data-progtrckr-steps="3"] li { width: 33%; }
    ol.progtrckr[data-progtrckr-steps="4"] li { width: 24%; }
    ol.progtrckr[data-progtrckr-steps="5"] li { width: 19%; }
    ol.progtrckr[data-progtrckr-steps="6"] li { width: 16%; }
    ol.progtrckr[data-progtrckr-steps="7"] li { width: 14%; }
    ol.progtrckr[data-progtrckr-steps="8"] li { width: 12%; }
    ol.progtrckr[data-progtrckr-steps="9"] li { width: 11%; }

    ol.progtrckr li.progtrckr-done {
        color: black;
        border-bottom: 4px solid yellowgreen;
    }
    ol.progtrckr li.progtrckr-todo {
        color: silver; 
        border-bottom: 4px solid silver;
    }

    ol.progtrckr li:after {
        content: "\00a0\00a0";
    }
    ol.progtrckr li:before {
        position: relative;
        bottom: -2.5em;
        float: left;
        left: 50%;
        line-height: 1em;
    }
    ol.progtrckr li.progtrckr-done:before {
        content: "\2713";
        color: white;
        background-color: yellowgreen;
        height: 1.2em;
        width: 1.2em;
        line-height: 1.2em;
        border: none;
        border-radius: 1.2em;
    }
    ol.progtrckr li.progtrckr-todo:before {
        content: "\039F";
        color: silver;
        background-color: white;
        font-size: 1.5em;
        bottom: -1.6em;
    }

</style>
Run Code Online (Sandbox Code Playgroud)

以及他的示例中的HTML标记(我使用Grails GSP页面动态生成标记和'done/todo'类):

<ol class="progtrckr" data-progtrckr-steps="5">
    <li class="progtrckr-done">Order Processing</li>
    <li class="progtrckr-done">Pre-Production</li>
    <li class="progtrckr-done">In Production</li>
    <li class="progtrckr-done">Shipped</li>
    <li class="progtrckr-todo">Delivered</li>
</ol>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.对我来说效果很好.


更新:以下(缩短版)也适用.

    ol.progtrckr {
        display: table;
        list-style-type: none;
        margin: 0;
        padding: 0;
        table-layout: fixed;
        width: 100%;
    }
    ol.progtrckr li {
        display: table-cell;
        text-align: center;
        line-height: 3em;
    }
    ... and the rest of the CSS ...

    <ol class="progtrckr">
        ...
    </ol>
Run Code Online (Sandbox Code Playgroud)

display: table; table-layout: fixed; width: 100%只要内容不溢出,确保列表项的大小自动相同.没有必要使用data-progtrckr-steps及其相关的CSS.

  • 可悲的是,链接不再有效. (2认同)

Pat*_*oon 15

在这个页面上有很多非常好的答案,我用Google搜索了一些,但没有一个答案勾选了我愿望清单上的所有复选框:

  • 仅CSS,没有Javascript
  • 坚持Tom Kenny的最佳设计实践
  • 布局像其他答案一样
  • 每个步骤都有一个名称和一个数字
  • 响应式布局:字体大小独立
  • 流体布局:列表及其项目按可用宽度缩放
  • 名称和数字以其块为中心
  • "完成"颜色上升到并包括活动项目,但不会超过它.
  • 活动项目应以图形方式突出显示

所以我混合了几个例子的代码,修复了我需要的东西,结果如下:

Progress Tracker v2

我使用了以下CSS和HTML:

/* Progress Tracker v2 */
ol.progress[data-steps="2"] li { width: 49%; }
ol.progress[data-steps="3"] li { width: 33%; }
ol.progress[data-steps="4"] li { width: 24%; }
ol.progress[data-steps="5"] li { width: 19%; }
ol.progress[data-steps="6"] li { width: 16%; }
ol.progress[data-steps="7"] li { width: 14%; }
ol.progress[data-steps="8"] li { width: 12%; }
ol.progress[data-steps="9"] li { width: 11%; }

.progress {
    width: 100%;
    list-style: none;
    list-style-image: none;
    margin: 20px 0 20px 0;
    padding: 0;
}

.progress li {
    float: left;
    text-align: center;
    position: relative;
}

.progress .name {
    display: block;
    vertical-align: bottom;
    text-align: center;
    margin-bottom: 1em;
    color: black;
    opacity: 0.3;
}

.progress .step {
    color: black;
    border: 3px solid silver;
    background-color: silver;
    border-radius: 50%;
    line-height: 1.2;
    width: 1.2em;
    height: 1.2em;
    display: inline-block;
    z-index: 0;
}

.progress .step span {
    opacity: 0.3;
}

.progress .active .name,
.progress .active .step span {
    opacity: 1;
}

.progress .step:before {
    content: "";
    display: block;
    background-color: silver;
    height: 0.4em;
    width: 50%;
    position: absolute;
    bottom: 0.6em;
    left: 0;
    z-index: -1;
}

.progress .step:after {
    content: "";
    display: block;
    background-color: silver;
    height: 0.4em;
    width: 50%;
    position: absolute;
    bottom: 0.6em;
    right: 0;
    z-index: -1;
}

.progress li:first-of-type .step:before {
    display: none;
}

.progress li:last-of-type .step:after {
    display: none;
}

.progress .done .step,
.progress .done .step:before,
.progress .done .step:after,
.progress .active .step,
.progress .active .step:before {
    background-color: yellowgreen;
}

.progress .done .step,
.progress .active .step {
    border: 3px solid yellowgreen;
}
Run Code Online (Sandbox Code Playgroud)
<!-- Progress Tracker v2 -->
<ol class="progress" data-steps="4">
    <li class="done">
        <span class="name">Foo</span>
        <span class="step"><span>1</span></span>
    </li>
    <li class="done">
        <span class="name">Bar</span>
        <span class="step"><span>2</span></span>
    </li>
    <li class="active">
        <span class="name">Baz</span>
        <span class="step"><span>3</span></span>
    </li>
    <li>
        <span class="name">Quux</span>
        <span class="step"><span>4</span></span>
    </li>
</ol>
Run Code Online (Sandbox Code Playgroud)

从上面的例子中可以看出,现在有两个列表项类需要注意:activedone.使用class="active"当前步骤,使用class="done"了之前的所有步骤.

还要注意data-steps="4"ol标签; 将此值设置为将正确大小应用于所有列表项的步骤总数.

随意玩JSFiddle.请享用!


use*_*304 13

这就是我使用纯CSS和HTML(没有JavaScript /图像等)实现它的方法.

http://jsfiddle.net/tuPrn/

它在大多数浏览器中都会降级(我需要在<IE9中添加缺少最后一个类型的修复程序).


Ans*_*Kao -1

我要做的就是使用通常用于悬停在按钮上的相同技巧。准备一张由两部分组成的图像:(1) 上半部分呈灰色,表示不完整;(2) 下半部分呈彩色,表示已完成。使用同一张图片4次来组成进度条的4个步骤,不完整的步骤顶部对齐,不完整的步骤底部对齐。

为了利用图像对齐,您必须使用图像作为 4 个 div 的背景,而不是使用 img 元素。

这是用于背景图像对齐的 CSS:

div.progress-incomplete {
  background-position: top;
}
div.progress-finished {
  background-position: bottom;
}
Run Code Online (Sandbox Code Playgroud)