Проблема с расстоянием между шагами, которые не постоянны, когда мы даем контент - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь создать вертикальный степпер с содержимым с правой стороны.Однако у меня проблема.Проблема в том, что расстояние между шагами не является постоянным, когда у меня есть содержание.Потому что расстояние шагов берется в зависимости от высоты содержимого.Как я могу преодолеть эту проблему и сделать расстояние между каждым шагом постоянным, независимо от длины контента?

Вот что я сделал на данный момент

.container {
  width: 100%;
  background: #fff;
}

.step {
  padding: 50px 10px;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
}

.v-stepper {
  position: relative;
}

.step .circle {
  background-color: #dedede;
  border-radius: 100%;
  width: 24px;
  height: 24px;
  display: inline-block;
}

.step .line {
  top: 24px;
  left: 12px;
  height: 100%;
  position: absolute;
  border-left: 1px solid #dedede;
}

.step.completed .circle {
  visibility: visible;
  background-color: rgb(6, 150, 215);
  border-color: rgb(6, 150, 215);
}

.step.completed .label {
  color: rgb(6, 150, 215);
}

.step.active .circle {
  visibility: visible;
  border-color: rgb(6, 150, 215);
}

.step.empty .circle {
  visibility: hidden;
}

.step.empty .line {
  top: 0;
  height: 150%;
}

.step:last-child .line {
  display: none;
}

.label {
  margin-left: 20px;
  display: inline-block;
}

.headline {
  background: #dedede;
  padding: 5px;
}
<div class="container">
  <div class="step completed">
    <div class="v-stepper">
      <div class="circle"></div>
      <div class="line"></div>
    </div>

    <div class="label">
      Personal
    </div>
    <div class="content">
      <h3>Personal</h3>
      <p>Description on the topic personal</p>
      <h3 class="headline">Information</h3>
      <form>
        <input type="text" id="first_name" />
        <input type="text" id="last_name" />
        <input type="text" id="Phone Number" />
        <input type="text" id="email" />
        <input type="text" id="address" />
        <input type="text" id="country" />
        <input type="text" id="city" />
      </form>

    </div>
  </div>

  <div class="step">
    <div class="v-stepper">
      <div class="circle"></div>
      <div class="line"></div>
    </div>

    <div class="label">
      Education
    </div>
  </div>

  <div class="step">
    <div class="v-stepper">
      <div class="circle"></div>
      <div class="line"></div>
    </div>

    <div class="label">
      Background
    </div>
  </div>

</div>

ОБНОВЛЕНИЕ

Я имею в виду следующий путь

enter image description here

Степпер должен иметь постоянную высоту (расстояние от одного круга до другого) независимо от того, как долго его содержимое имеет.Потому что я буду показывать только содержание выбранного шага.

1 Ответ

0 голосов
/ 20 декабря 2018

Как было предложено во втором комментарии godfather, чтобы круги были связаны друг с другом, удалите верхний и нижний отступы из .step, и чтобы содержимое каждого шага имело свои собственные отступы, просто добавьте отступы к .step .content.

Вот рабочий фрагмент

.container {
  width: 100%;
  background: #fff;
}

.step {
  /* Remove the padding from top and bottom*/
  /*padding: 50px 10px;*/
  padding: 0 10px;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  position: relative;
}
/* Add this to make the content of each step has its own padding */
.step .content{
  padding: 20px 0 50px;
}
.v-stepper {
  position: relative;
}

.step .circle {
  background-color: #dedede;
  border-radius: 100%;
  width: 24px;
  height: 24px;
  display: inline-block;
}

.step .line {
  top: 24px;
  left: 12px;
  height: 100%;
  position: absolute;
  border-left: 1px solid #dedede;
}

.step.completed .circle {
  visibility: visible;
  background-color: rgb(6, 150, 215);
  border-color: rgb(6, 150, 215);
}

.step.completed .label {
  color: rgb(6, 150, 215);
}

.step.active .circle {
  visibility: visible;
  border-color: rgb(6, 150, 215);
}

.step.empty .circle {
  visibility: hidden;
}

.step.empty .line {
  top: 0;
  height: 150%;
}

.step:last-child .line {
  display: none;
}

.label {
  margin-left: 20px;
  display: inline-block;
}

.headline {
  background: #dedede;
  padding: 5px;
}
<div class="container">
  <div class="step completed">
    <div class="v-stepper">
      <div class="circle"></div>
      <div class="line"></div>
    </div>

    <div class="label">
      Personal
    </div>
    <div class="content">
      <h3>Personal</h3>
      <p>Description on the topic personal</p>
      <h3 class="headline">Information</h3>
      <form>
        <input type="text" id="first_name" />
        <input type="text" id="last_name" />
        <input type="text" id="Phone Number" />
        <input type="text" id="email" />
        <input type="text" id="address" />
        <input type="text" id="country" />
        <input type="text" id="city" />
      </form>
     

    </div>
  </div>

  <div class="step">
    <div class="v-stepper">
      <div class="circle"></div>
      <div class="line"></div>
    </div>

    <div class="label">
      Education
    </div>
    <div class="content">
      <h3>Personal</h3>
      <p>Description on the topic personal</p>
      <h3 class="headline">Information</h3>
      <form>
        <input type="text" id="first_name" />
        <input type="text" id="last_name" />
        <input type="text" id="Phone Number" />
        <input type="text" id="email" />
        <input type="text" id="address" />
        <input type="text" id="country" />
        <input type="text" id="city" />
      </form>
     

    </div>
  </div>

  <div class="step">
    <div class="v-stepper">
      <div class="circle"></div>
      <div class="line"></div>
    </div>

    <div class="label">
      Background
    </div>
  </div>

</div>
...