Ступенчатый индикатор выполнения CSS с прозрачностью - PullRequest
0 голосов
/ 13 сентября 2018

Может ли кто-нибудь помочь мне поставить прозрачную рамку вокруг кругов в пошаговом индикаторе прогресса, используя только CSS?

Есть много хороших стартов, как в этом посте: Создание кругов CSS3, соединенных линиями

И этот веб-сайт: https://www.cssscript.com/animated-step-progress-bar-pure-javascript/

Или этот веб-сайт: http://christabor.github.io/css-progress-wizard/

Моя проблема заключается в том, что мне нужна прозрачная рамка вокруг кругов, которые находятся на линиипроходит через.в этом примере зеленая линия проходит поверх серой границы круга.

enter image description here

Вот ручка, с которой можно начать, на основена одном из примеров выше.https://codepen.io/anon/pen/oPydjx

body {
  font-family: 'Lato', sans-serif;
  font-size: 20px;
  padding: 20px;
}

@media handheld,
screen and (max-width: 400px) {
  .container {
    margin: 0;
    width: 100%;
  }
  .progress-indicator.stacked {
    display: block;
    width: 100%;
  }
  .progress-indicator.stacked>li {
    height: 80px;
  }
}

.flexer,
.progress-indicator {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex
}

.flexer-element,
.progress-indicator>li {
  -ms-flex: 1;
  -webkit-flex: 1;
  -moz-flex: 1;
  flex: 1
}

.progress-indicator>li {
  list-style: none;
  text-align: center;
  width: auto;
  padding: 0;
  margin: 0;
  position: relative;
  text-overflow: ellipsis;
  color: #bbb;
  display: block
}

.progress-indicator>li.completed,
.progress-indicator>li.completed .bubble {
  color: #65d074
}

.progress-indicator>li .bubble {
  border-radius: 1000px;
  width: 20px;
  height: 20px;
  background-color: #bbb;
  display: block;
  margin: 0 auto .5em;
  border-bottom: 1px solid #888
}

.progress-indicator>li .bubble:after,
.progress-indicator>li .bubble:before {
  display: block;
  position: absolute;
  top: 9px;
  width: 100%;
  height: 3px;
  content: '';
  background-color: #bbb
}

.progress-indicator>li.completed .bubble,
.progress-indicator>li.completed .bubble:after,
.progress-indicator>li.completed .bubble:before {
  background-color: #65d074;
  border-color: #247830
}

.progress-indicator>li .bubble:before {
  left: 0
}

.progress-indicator>li .bubble:after {
  right: 0
}

.progress-indicator>li:first-child .bubble:after,
.progress-indicator>li:first-child .bubble:before {
  width: 50%;
  margin-left: 50%
}

.progress-indicator>li:last-child .bubble:after,
.progress-indicator>li:last-child .bubble:before {
  width: 50%;
  margin-right: 50%
}

.progress-indicator>li.active,
.progress-indicator>li.active .bubble {
  color: #337AB7
}

.progress-indicator>li.active .bubble,
.progress-indicator>li.active .bubble:after,
.progress-indicator>li.active .bubble:before {
  background-color: #337AB7;
  border-color: #122a3f
}

@media handheld,
screen and (max-width: 400px) {
  .progress-indicator {
    font-size: 60%
  }
}
<html>

<body>

  <ul class="progress-indicator">
    <li class="completed">
      <span class="bubble"></span> Step 1. <br><small>(complete)</small>
    </li>
    <li class="completed">
      <span class="bubble"></span> Step 2. <br><small>(complete)</small>
    </li>
    <li class="active">
      <span class="bubble"></span> Step 3. <br><small>(active)</small>
    </li>
    <li>
      <span class="bubble"></span> Step 4.
    </li>
    <li>
      <span class="bubble"></span> Step 5.
    </li>
  </ul>

</body>

</html>

1 Ответ

0 голосов
/ 13 сентября 2018

Поскольку линии являются абсолютно позиционными элементами, они появляются над пузырем.Вы можете добавить box-shadow к пузырю, чтобы получить эффект:

.progress-indicator>li .bubble {
  box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);

  border-radius: 50%;
  width: 20px;
  height: 20px;
  background-color: #bbb;
  display: block;
  margin: 0 auto .5em;
  border-bottom: 1px solid #888;
}

Пример:

body {
  font-family: 'Lato', sans-serif;
  font-size: 20px;
  padding: 20px;
}

@media handheld,
screen and (max-width: 400px) {
  .container {
    margin: 0;
    width: 100%;
  }
  .progress-indicator.stacked {
    display: block;
    width: 100%;
  }
  .progress-indicator.stacked>li {
    height: 80px;
  }
}

.flexer,
.progress-indicator {
  display: flex
}

.flexer-element,
.progress-indicator>li {
  flex: 1
}

.progress-indicator>li {
  list-style: none;
  text-align: center;
  width: auto;
  padding: 0;
  margin: 0;
  position: relative;
  text-overflow: ellipsis;
  color: #bbb;
  display: block
}

.progress-indicator>li.completed,
.progress-indicator>li.completed .bubble {
  color: #65d074
}

.progress-indicator>li .bubble {
  box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);
  
  border-radius: 50%;
  width: 20px;
  height: 20px;
  background-color: #bbb;
  display: block;
  margin: 0 auto .5em;
  border-bottom: 1px solid #888;
}

.progress-indicator>li .bubble:after,
.progress-indicator>li .bubble:before {
  display: block;
  position: absolute;
  top: 9px;
  width: 100%;
  height: 3px;
  content: '';
  background-color: #bbb
}

.progress-indicator>li.completed .bubble,
.progress-indicator>li.completed .bubble:after,
.progress-indicator>li.completed .bubble:before {
  background-color: #65d074;
  border-color: #247830
}

.progress-indicator>li .bubble:before {
  left: 0
}

.progress-indicator>li .bubble:after {
  right: 0
}

.progress-indicator>li:first-child .bubble:after,
.progress-indicator>li:first-child .bubble:before {
  width: 50%;
  margin-left: 50%
}

.progress-indicator>li:last-child .bubble:after,
.progress-indicator>li:last-child .bubble:before {
  width: 50%;
  margin-right: 50%
}

.progress-indicator>li.active,
.progress-indicator>li.active .bubble {
  color: #337AB7
}

.progress-indicator>li.active .bubble,
.progress-indicator>li.active .bubble:after,
.progress-indicator>li.active .bubble:before {
  background-color: #337AB7;
  border-color: #122a3f
}

@media handheld,
screen and (max-width: 400px) {
  .progress-indicator {
    font-size: 60%
  }
}
<ul class="progress-indicator">
  <li class="completed">
    <span class="bubble"></span> Step 1. <br><small>(complete)</small>
  </li>
  <li class="completed">
    <span class="bubble"></span> Step 2. <br><small>(complete)</small>
  </li>
  <li class="active">
    <span class="bubble"></span> Step 3. <br><small>(active)</small>
  </li>
  <li>
    <span class="bubble"></span> Step 4.
  </li>
  <li>
    <span class="bubble"></span> Step 5.
  </li>
</ul>

</body>

</html>
...