Отзывчивый горизонтальный график - Boostrap 4 - PullRequest
2 голосов
/ 13 апреля 2019

Я пытаюсь сделать отзывчивую горизонтальную шкалу времени.Я использую 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;

  }

Моя временная шкала выглядит так:

enter image description here

Есть две вещи, которые я хотел бы изменить:

1) Удалить строку перед первой и после последней точки, чтобы временная шкала выглядела следующим образомenter image description here

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;
 }

Но это не работает.Любой совет приветствуется.

1 Ответ

1 голос
/ 13 апреля 2019

1) Это можно сделать с помощью псевдокласса css ::after в каждом столбце. Снимите верхнюю границу с .three-col.bottom и добавьте границу к каждому .col верхнего ряда с помощью ::after.

Обратите внимание на 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>
...