Как сделать что бы полоса индикаторов при ресайзе сохраняла своё положение на изображении без смены html?

386
21 декабря 2016, 03:51

Привет!
Как сделать такое, пример представлен

.b-about__carousel-inner { 
  height: auto; 
  position: relative; 
} 
.b-about .carousel-fade .carousel-inner .active { 
  opacity: 1; 
  position: relative; 
} 
.b-about__indicator-list { 
  margin-top: -54px; 
  width: 100%; 
  top: 50%; 
  bottom: auto; 
  margin-top: -74px; 
  position: absolute; 
} 
.b-about__indicator-list li { 
  width: 17px; 
  height: 2px; 
  margin: 0 3px; 
  background-color: #cfcfcf; 
  border: 0; 
  border-radius: 0; 
} 
.b-about__indicator-item.active { 
  width: 17px; 
  height: 2px; 
  margin: 0 3px; 
  background-color: #ed454b; 
  margin: 0 6px; 
} 
.b-about__container-image { 
  height: auto; 
  width: 100%; 
  background-color: #e6e6e6; 
  text-align: center; 
  position: relative; 
} 
.b-about__image { 
  display: block; 
  width: 100%; 
} 
.b-about__information { 
  padding: 91px 15px 0 25px; 
  margin: 0 auto; 
  height: 300px; 
}
<div role="listbox" class="b-about__carousel-inner carousel-inner"> 
  <div class="active b-about__item item"> 
    <div class="b-about__container-image"> 
      <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTD60q-ZK6Jnex3EvBk8tjS205SgzGkqzCQ0qDhgy-D84lrtTax151OVPs" alt="" title="" class="b-about__image"> 
    </div> 
    <div class="b-about__information"> 
      <h2 class="b-title b-title--about">Двигатель</h2> 
      <div class="b-about__text-about"> 
        <p>Надежный, прочный и&nbsp;экономичный 4-цилиндровый двигатель</p> 
      </div> 
    </div> 
  </div> 
 
 
 
 
  <!-- Controls--> 
 
  <ol class="b-about__indicator-list carousel-indicators"> 
    <li data-target="#about" data-slide-to="0" class="active b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="1" class="b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="2" class="b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="3" class="b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="4" class="b-about__indicator-item"></li> 
  </ol> 
</div>

Answer 1

Если вам надо позиция относительно низа картинки, так и задайте её относительно низа то есть bottom. При это не нужно указывать margin для абсолютно позиционируемых элементов, это не имеет смысла. Если контейнер имеет фиксированный размер, то укажите единицы измерения в пикселях, если контейнер резиновый, то в процентах.

И общий совет: поменьше используйте магических чисел вроде 74px.

Answer 2

Если без изменения html, то только javascript-ом задавать top для ваших индикаторов равный высоте изображения и margin-top отрицательный на нужный отступ снизу

var imgHeight = $('.b-about__container-image').height() 
$('.b-about__indicator-list').css('top', imgHeight); 
 
$(window).on('resize', function(){ 
  imgHeight = $('.b-about__container-image').height() 
  $('.b-about__indicator-list').css('top', imgHeight); 
});
.b-about__carousel-inner { 
  height: auto; 
  position: relative; 
} 
.b-about .carousel-fade .carousel-inner .active { 
  opacity: 1; 
  position: relative; 
} 
.b-about__indicator-list { 
  width: 100%; 
  margin-top: -50px; 
  position: absolute; 
} 
.b-about__indicator-list li { 
  width: 17px; 
  height: 2px; 
  margin: 0 3px; 
  background-color: #cfcfcf; 
  border: 0; 
  border-radius: 0; 
} 
.b-about__indicator-item.active { 
  width: 17px; 
  height: 2px; 
  margin: 0 3px; 
  background-color: #ed454b; 
  margin: 0 6px; 
} 
.b-about__container-image { 
  height: auto; 
  width: 100%; 
  background-color: #e6e6e6; 
  text-align: center; 
  position: relative; 
} 
.b-about__image { 
  display: block; 
  width: 100%; 
} 
.b-about__information { 
  padding: 91px 15px 0 25px; 
  margin: 0 auto; 
  height: 300px; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<div role="listbox" class="b-about__carousel-inner carousel-inner"> 
  <div class="active b-about__item item"> 
    <div class="b-about__container-image"> 
      <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTD60q-ZK6Jnex3EvBk8tjS205SgzGkqzCQ0qDhgy-D84lrtTax151OVPs" alt="" title="" class="b-about__image"> 
    </div> 
    <div class="b-about__information"> 
      <h2 class="b-title b-title--about">Двигатель</h2> 
      <div class="b-about__text-about"> 
        <p>Надежный, прочный и&nbsp;экономичный 4-цилиндровый двигатель</p> 
      </div> 
    </div> 
  </div> 
 
 
 
 
  <!-- Controls--> 
 
  <ol class="b-about__indicator-list carousel-indicators"> 
    <li data-target="#about" data-slide-to="0" class="active b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="1" class="b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="2" class="b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="3" class="b-about__indicator-item"></li> 
    <li data-target="#about" data-slide-to="4" class="b-about__indicator-item"></li> 
  </ol> 
</div>

А так, вообще нужно перенести индикаторы в b-about__container-image и спокойно указывать ему нужный bottom

READ ALSO
Как поделить форму ввода на ячейки?

Как поделить форму ввода на ячейки?

Вместо обычной формы ввода не получается сделать чтобы для каждого введенного символа была своя ячейка

283
Существует ли способ указать min-padding?

Существует ли способ указать min-padding?

Существует ли способ указать min-padding?

303
Yii2: добавить timestamp к js, подключенному через registerJsFile()

Yii2: добавить timestamp к js, подключенному через registerJsFile()

Я знаю, что в yii2 можно добавлять timestamp к подключаемым js/css, если в AssetManager указать 'appendTimestamp' => true

689
Активная кнопка html5

Активная кнопка html5

Как добавить стиль к неактивной/активной кнопки?

309