创建连接的圈子

时间:2016-12-24 01:02:49

标签: html css

我需要创建此图片:

enter image description here

它包含用线条附加的圆圈。我在红色框中画出来表明它们是div,因为当它在手机上显示时它应该是这样的:

enter image description here

我已经尝试过做what this post says但是它对我不起作用,因为李的不在同一个div中。

这是我的代码:

.steps {
  max-width: 1170px;
  margin: auto;
  overflow: auto;
}
.step-1,
.step-2,
.step-3,
.step-4 {
  width: 25%;
  float: left;
}
<div class="steps">
  <div class="step-1">
    <div class="step-image">
      <img src="step1.jpg">
    </div>
    <div class="step-title">Measure Your Space</div>
    <div class="step-number">1
    </div>
  </div>

  <div class="step-2">
    <div class="step-image">
      <img src="step2.jpg">
    </div>
    <div class="step-title">Your Kitchen is Designed</div>
    <div class="step-number">2</div>
  </div>

  <div class="step-3">
    <div class="step-image">
      <img src="step3.jpg">
    </div>
    <div class="step-title">Your Materials are Shipped</div>
    <div class="step-number">3</div>
  </div>

  <div class="step-4">
    <div class="step-image">
      <img src="step4.jpg">
    </div>
    <div class="step-title">Start contruction of your dream kitchen</div>
    <div class="step-number">4</div>
  </div>
</div>

如何使用连接它们的线创建圆圈?

4 个答案:

答案 0 :(得分:7)

以下解决方案适用于带行的版本 要删除媒体查询下的行content: none;

section {
  display: inline-block;
  width: 25%;
  text-align: center;
}

div {
  margin: .5em;
  border: 1px solid red;
  padding: .5em;
  position: relative;
}

a {
  display: inline-block;
  height: 2em;
  width: 2em;
  line-height: 2em;
  text-align: center;
  border: 1px solid;
  border-radius: 50%;
  background: silver;
}

a:before, a:after {
  content: "";
  position: absolute;
  border-top: 1px solid;
  margin-top: 1em;
  z-index: -1;
}

a:before {
  margin-left: -1px;
  left: -.5em;
  right: 50%;
}

a:after {
  margin-right: -1px;
  left: 50%;
  right: -.5em;
}

section:first-child a:before,
section:last-child a:after {
  content: none;
}
<main>
  <section>
    <div>
      <p>Some content</p>
      <a>1</a>
    </div>
  </section><section>
    <div>
      <p>Some content</p>
      <a>2</a>
    </div>
  </section><section>
    <div>
      <p>Some content</p>
      <a>3</a>
    </div>
  </section><section>
    <div>
      <p>Some content</p>
      <a>4</a>
    </div>
  </section>
</main>

答案 1 :(得分:3)

这是一个带有最小标记的示例,对于标记和行,使用::after::before伪元素(从2:nd位置开始)

div.connected {
  counter-reset: num;
}
div.connected div {
  float: left;
  width: calc(25% - 22px);
  position: relative;
  text-align: center;
  margin: 0 10px;
  padding: 80px 0 10px 0;
  border: 1px solid #eee;
  background: url(http://placehold.it/60/f00) no-repeat top 10px center;
}
div.connected div::after {
  display: block;
  counter-increment: num;
  content: counter(num);
  width: 1.5em;
  height: 1.5em;
  text-align: center;
  line-height: 1.5em;
  border-radius: 50%;
  border: 1px solid gray;
  margin: 0 auto;
}
div.connected div ~ div::before {
  content: '';
  position: absolute;
  width: calc(100% - 1.5em + 22px);
  right: calc(50% + 0.75em);
  height: 1px;
  background-color: gray;
  bottom: calc(.75em + 10px);
  z-index: -1;
}
div.connected span {
  display: inline-block;
  padding-bottom: 10px;
}
@media screen and (max-width: 600px) {

  div.connected div {
    width: calc(50% - 22px);
  }
  div.connected div:nth-child(n+3) {
    margin-top: 20px;
  }
  div.connected div:nth-child(3)::before {
    display: none;
  }
  
}
<div class="connected">
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
</div>

这是一个更新版本,可解决项目文字较长时的错位

div.connected {
  display: flex;
  flex-wrap: wrap;
  counter-reset: num;
}
div.connected div {
  float: left;
  width: calc(25% - 22px);
  position: relative;
  text-align: center;
  margin: 0 10px;
  padding: 80px 0 10px 0;
  border: 1px solid #eee;
  background: url(http://placehold.it/60/f00) no-repeat top 10px center;
}
div.connected div::after {
  display: block;
  counter-increment: num;
  content: counter(num);
  position: absolute;
  left: calc(50% - 0.75em - 1px);
  bottom: 10px;
  width: 1.5em;
  height: 1.5em;
  text-align: center;
  line-height: 1.5em;
  border-radius: 50%;
  border: 1px solid gray;
}
div.connected div ~ div::before {
  content: '';
  position: absolute;
  width: calc(100% - 1.5em + 22px);
  right: calc(50% + 0.75em);
  height: 1px;
  background-color: gray;
  bottom: calc(.75em + 10px);
  z-index: -1;
}
div.connected span {
  display: inline-block;
  padding-bottom: 30px;
}
@media screen and (max-width: 600px) {

  div.connected div {
    width: calc(50% - 22px);
  }
  div.connected div:nth-child(n+3) {
    margin-top: 20px;
  }
  div.connected div:nth-child(3)::before {
    display: none;
  }
  
}
<div class="connected">
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some long long long text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
</div>

更新了,被问到如何在圆圈下方移动文字,所以这里有一种方法(参见CSS中的注释)

注意,由于绝对定位用于连接器/圆圈,并且由于较长的文本可以换行,因此可能需要使用现有的@media查询调整底部距离(50px)。

div.connected {
  display: flex;
  flex-wrap: wrap;
  counter-reset: num;
}

div.connected div {
  float: left;
  width: calc(25% - 22px);
  position: relative;
  text-align: center;
  margin: 0 10px;
  
  /* padding: 80px 0 10px 0;   changed  */
  padding: 120px 0 10px 0;
  
  border: 1px solid #eee;
  background: url(http://placehold.it/60/f00) no-repeat top 10px center;
}

div.connected div::after {
  display: block;
  counter-increment: num;
  content: counter(num);
  position: absolute;
  left: calc(50% - 0.75em - 1px);
  
  /* bottom: 10px;   changed  */
  bottom: 50px;

  width: 1.5em;
  height: 1.5em;
  text-align: center;
  line-height: 1.5em;
  border-radius: 50%;
  border: 1px solid gray;
}

div.connected div~div::before {
  content: '';
  position: absolute;
  width: calc(100% - 1.5em + 22px);
  right: calc(50% + 0.75em);
  height: 1px;
  background-color: gray;
  
  /* bottom: calc(.75em + 10px);   changed  */
  bottom: calc(.75em + 50px);
  
  z-index: -1;
}

div.connected span {
  display: inline-block;
}

@media screen and (max-width: 600px) {
  div.connected div {
    width: calc(50% - 22px);
  }
  div.connected div:nth-child(n+3) {
    margin-top: 20px;
  }
  div.connected div:nth-child(3)::before {
    display: none;
  }
}
<div class="connected">
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
  <div>
    <span>Some long long long text here</span>
  </div>
  <div>
    <span>Some text here</span>
  </div>
</div>

答案 2 :(得分:1)

给定标记,一个简单的解决方案是将水平线(:after的{​​{1}}伪元素)与.step-number div对齐。以下是:

.step-#

&#13;
&#13;
.step-1,
.step-2,
.step-3,
.step-4 {
  ...
  /* Set position of step divs to be relative. */
  position: relative;
}

.step-number:after {
  /* Absolutely position this to the bottom center of step-#.
     15px is the radius of step-number.
     A 100% width, and a 50% left expands the line's
     length to the center of the next step-#. */
  position: absolute;
  left: 50%;
  bottom: 15px;
  margin-left: 15px;

  ...
}

.step-number {
  /* A fixed width of 30px allows us to correctly position the line. */
  border-radius: 20px;
  width: 30px;
  height: 30px;
  ...
}
&#13;
.step-number {
  border-radius: 20px;
  width: 30px;
  height: 30px;
  line-height: 30px;
  border: 1px #AAA solid;
  text-align: center;
  display: inline-block;
  background-color: #FFF;
}
/* 
Absolutely position this to the bottom center of step-#.
15px is the radius of step-number.

A 100% width, and a 50% left expands the line's
length to the center of the next step-#.
*/

.step-number:after {
  content: ' ';
  position: absolute;
  left: 50%;
  margin-left: 15px;
  bottom: 15px;
  width: 100%;
  height: 1px;
  background-color: #AAA;
}
/* Hide the line after the last step */

.step-4 .step-number:after {
  display: none;
}
.steps {
  max-width: 1170px;
  margin: auto;
  overflow: auto;
}
.step-title {
  min-height: 80px;
}
.step-1,
.step-2,
.step-3,
.step-4 {
  width: 22%;
  vertical-align: top;
  display: inline-block;
  text-align: center;
  /* Set position of step divs to be relative. */
  position: relative;
  border: 1px #FAA solid;
}


@media screen and (max-width: 400px) {
  .step-number:after {
    content: none;
    display: none;
  }
}
&#13;
&#13;
&#13;

为了跟上小屏幕,您可以添加媒体查询以隐藏水平线,一旦<div class="steps"> <div class="step-1"> <div class="step-image"> <img src="https://placehold.it/100x100"> </div> <div class="step-title">Measure Your Space</div> <div class="step-number">1 </div> </div> <div class="step-2"> <div class="step-image"> <img src="https://placehold.it/100x100"> </div> <div class="step-title">Your Kitchen is Designed</div> <div class="step-number">2</div> </div> <div class="step-3"> <div class="step-image"> <img src="https://placehold.it/100x100"> </div> <div class="step-title">Your Materials are Shipped</div> <div class="step-number">3</div> </div> <div class="step-4"> <div class="step-image"> <img src="https://placehold.it/100x100"> </div> <div class="step-title">Start contruction of your dream kitchen</div> <div class="step-number">4</div> </div> </div>跨越多行。

.step-#

答案 3 :(得分:0)

.steps {
  max-width: 1170px;
  margin: auto;
  overflow: auto;
  box-sizing:border-box;
}
.step-1,
.step-2,
.step-3,
.step-4 {
  width: 90px;
  height:200px;
  float: left;
  border:2px solid #ff0000;
  box-sizing:border-box;
  text-align:center;
  position:relative;
  margin:5px;
  z-index:999;
}
img{
  width:50%;
  height:50px;
  margin:auto;
  margin-top:10px
  }
.step-number{
    border-radius: 50%;
    border: 1px solid #000;
    position: absolute;
    bottom: 20px;
    right: 43%;
    padding: 4px;
  z-index:999;
  }
hr{
  position: absolute;
    width: 282px;
    height: 1px;
    right: 53px;
    bottom: 23px;
    z-index: 990;
 }
<div class="steps">
  <div class="step-1">
    <div class="step-image">
      <img src="https://i.stack.imgur.com/ElI1w.jpg">
    </div>
    <div class="step-title">Measure Your Space</div>
    <div class="step-number">1
    </div>
  </div>

  <div class="step-2">
    <div class="step-image">
      <img src="https://i.stack.imgur.com/ElI1w.jpg">
    </div>
    <div class="step-title">Your Kitchen is Designed</div>
    <div class="step-number">2</div>
  </div>

  <div class="step-3">
    <div class="step-image">
      <img src="https://i.stack.imgur.com/ElI1w.jpg">
    </div>
    <div class="step-title">Your Materials are Shipped</div>
    <div class="step-number">3</div>
  </div>

  <div class="step-4">
    <div class="step-image">
      <img src="https://i.stack.imgur.com/ElI1w.jpg">
    </div>
    <div class="step-title">Start contruction of your dream kitchen</div>
    <div class="step-number">4</div>
    <hr/>
  </div>
</div>