【问题标题】:Responsive horizontal timeline - Boostrap 4响应式水平时间线 - Bootstrap 4
【发布时间】:2019-04-13 16:55:43
【问题描述】:

我正在尝试制作响应式水平时间线。我正在为时间线和项目使用 Boostrap 4。到目前为止,我已经提出了这段代码,并且在响应性方面运行良好。

timeline.html

<div className="container timeline-container">
                    <div class="intro">
                        <div class="main-heading">
                            <div class="three-col top">
                                <div class="col">
                                    <div class="sub-heading">
                                        <div class="square">
                                            <div class="pic">
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="col">
                                    <div class="sub-heading">
                                        <div class="square">
                                            <div class="pic">
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="col">
                                    <div class="sub-heading">
                                        <div class="square">
                                            <div class="pic">
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="main-heading">
                            <div class="three-col bottom">
                                <div className="wrapper-bottom">
                                    <div class="col">
                                        <div class="timeline-dot"> 
                                        </div>
                                        <div class="sub-heading">
                                            <div class="square">
                                                <div class="pic">
                                                </div>
                                            </div>
                                        </div>
                                    </div>

                                    <div class="col">
                                        <div class="timeline-dot"> 
                                        </div>
                                        <div class="sub-heading">
                                            <div class="square">
                                                <div class="pic">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="col">
                                        <div class="timeline-dot"> 
                                        </div>
                                        <div class="sub-heading">
                                            <div class="square">
                                                <div class="pic">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

style.css

.container.timeline-container{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }

  * {
    box-sizing: border-box;
  }

  .intro {
    position: relative;
  }

  .square {
    width: 100px;
    height: 100px;
    margin: 25px;
    transform:rotate(45deg);
    overflow: hidden;
  }
  .pic {
    background: url(http://placekitten.com/g/150/150);
    width: 150px;
    height: 150px;
    margin: -25px;
    -ms-transform: rotate(45deg);
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
  }

  .timeline-dot {
    width: 10px;
    height: 10px;
    border-radius: 20px;
    margin: 0 auto;
    background: #CF4532;
    margin-top: -6px;
  }

  .main-heading {
    text-align: center;
    font-size: 30px;
    line-height: 30px;
    position: relative;
  }

  .three-col.bottom{
    border-top: 2px solid #4A4A4A;
  }

  .three-col:after {
    display: block;
    clear: both;
    content: '';
  }

  .three-col .col {
    float: left;
    width: 33.33%;
    position: relative;
    padding: 0 20px;
  }

  .sub-heading {
    position: relative;
    display: inline-block;
    padding: 20px 0;

  }

我的时间线如下所示:

有两点我想改变:

1) 删除第一个点之前和最后一个点之后的行,所以时间线看起来像这样

2) 使图片方块具有响应性。

我已经尝试过让父母 div 喜欢

.sub-heading {
    position: relative;
    display: inline-block;
    padding: 20px 0;
    width: 400px;
    height: 400px;   
}

还有图片广场

.square {
    width: 100%;
    height: 100%;
    margin: 25px;
    transform:rotate(45deg);
    overflow: hidden;
 }

但它不起作用。任何建议表示赞赏。

【问题讨论】:

    标签: css bootstrap-4 timeline


    【解决方案1】:

    1) 您可以在每一列上使用 css ::after 伪类来实现。从.three-col.bottom 中删除边框顶部,并将边框添加到带有::after 的顶行的每个.col

    请注意css:

    .three-col.top .col::after {
      content: "";
      position: absolute;
      display: block;
      left: 0;
      right: 0;
      bottom: 0;
      border-bottom: 2px solid #4A4A4A;
    }
    
    .three-col.top .col:first-child::after {
      left: 50%;
    }
    
    .three-col.top .col:last-child::after {
      right: 50%;
    }
    

    2) 去掉方形 div,你不需要它。还将您的 .pic 样式更改为

    .pic {
      background: url(http://placekitten.com/g/150/150);
      width: 60px;
      height: 60px;
      -ms-transform: rotate(45deg);
      -webkit-transform: rotate(45deg);
      transform: rotate(45deg);
      margin: 25px;
      background-size: cover;
      background-position: center;
      background-repeat: no-repeat;
    }
    

    对于响应式设计,您需要使用 css 媒体查询

    https://www.w3schools.com/css/css3_mediaqueries.asp.

    所以你可以试试这样的:

    @media (min-width: 800px) {
      .pic {
        width: 150px;
        height: 150px;
      }
    }
    
    @media (min-width: 1024px) {
      .pic {
        width: 200px;
        height: 200px;
      }
    }
    
    @media (min-width: 1200px) {
      .pic {
        width: 250px;
        height: 250px;
      }
    }
    

    完整代码:

    .container.timeline-container{
          position: absolute;
          top: 50%;
          left: 50%;
          transform: translate(-50%, -50%);
        }
    
        * {
          box-sizing: border-box;
        }
    
        .intro {
          position: relative;
        }
    
        .square {
          width: 100px;
          height: 100px;
          margin: 25px;
          transform:rotate(45deg);
          overflow: hidden;
        }
        .pic {
          background: url(http://placekitten.com/g/150/150);
          width: 60px;
          height: 60px;
          -ms-transform: rotate(45deg);
          -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
          margin: 25px;
          background-size: cover;
          background-position: center;
          background-repeat: no-repeat;
        }
    
        .timeline-dot {
          width: 10px;
          height: 10px;
          border-radius: 20px;
          margin: 0 auto;
          background: #CF4532;
          margin-top: -6px;
        }
    
        .main-heading {
          text-align: center;
          font-size: 30px;
          line-height: 30px;
          position: relative;
        }
    
        .three-col:after {
          display: block;
          clear: both;
          content: '';
        }
    
        .three-col .col {
          float: left;
          width: 33.33%;
          position: relative;
          padding: 0 20px;
        }
    
        .sub-heading {
          position: relative;
          display: inline-block;
          padding: 35px 0;
    
        }
    
        .three-col.top .col::after {
          content: "";
          position: absolute;
          background: #000;
          display: block;
          left: 0;
          right: 0;
          bottom: 0;
          border-bottom: 2px solid #4A4A4A;
        }
    
        .three-col.top .col:first-child::after {
          left: 50%;
        }
    
        .three-col.top .col:last-child::after {
          right: 50%;
        }
    
        @media (min-width: 576px) {
          .pic {
            width: 100px;
            height: 100px;
          }
        }
    
        @media (min-width: 800px) {
          .pic {
            width: 150px;
            height: 150px;
          }
        }
    
        @media (min-width: 1024px) {
          .pic {
            width: 200px;
            height: 200px;
          }
        }
    
        @media (min-width: 1200px) {
          .pic {
            width: 250px;
            height: 250px;
          }
        }
    <div className="container timeline-container">
        <div class="intro">
          <div class="main-heading">
            <div class="three-col top">
              <div class="col">
                <div class="sub-heading">
                  <div class="pic">
                  </div>
                </div>
              </div>
              <div class="col">
                <div class="sub-heading">
                  <div class="pic">
                  </div>
                </div>
              </div>
              <div class="col">
                <div class="sub-heading">
                  <div class="pic">
                  </div>
                </div>
              </div>
            </div>
          </div>
          <div class="main-heading">
            <div class="three-col bottom">
              <div className="wrapper-bottom">
                <div class="col">
                  <div class="timeline-dot">
                  </div>
                  <div class="sub-heading">
                    <div class="pic">
                    </div>
                  </div>
                </div>
    
                <div class="col">
                  <div class="timeline-dot">
                  </div>
                  <div class="sub-heading">
                    <div class="pic">
                    </div>
                  </div>
                </div>
                <div class="col">
                  <div class="timeline-dot">
                  </div>
                  <div class="sub-heading">
                    <div class="pic">
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>

    【讨论】:

    • 是的,伪类确实有效。你知道如何解决我的问题2) To make picture squares responsive 中的第二件事吗?我已经用上面的代码试过了,但我的方块只是失去了它们的形状。使用上面的代码,我试图让父 div 具有 400px 的固定宽度和高度,并且只申请 100% 的子 div 宽度和高度。但不工作。
    • “使图片方块具有响应性”到底是什么意思?
    • 我只是想让这张图片变成正方形或菱形,以适应所有屏幕。
    • 请提供更多信息,我不明白你的意思..你想改变方块的宽度和高度?您想在移动设备上更改布局吗?一个例子可能会有所帮助。响应式在桌面上看起来不错。
    • 好吧,抱歉,也许没有解释得那么好。是的,我希望我的图片根据显示的设备而变大或变小。当我尝试通过更改 width/height 来使它们更大时,形状丢失了。是的,在桌面上是可以的,虽然我希望它们更大,但我不知道如何:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2016-07-26
    • 2015-11-14
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多