Блок выходящий за пределы родителя

305
31 марта 2018, 14:39

В общем все вроде просто. Есть родитель, его ширина 800px. У него есть родитель, его ширина 150% ширины родителя так что он выходит за его пределы. Все работает нормально до тех пор пока не сузить окзно браузера. Из-за margin-left: 25% блок обрезается слева правильно выходя за пределы окна, но справа у него остается несимметричный отрезок. Так есть это можно исправить добавляя overflow:hidden к родителю с шириной 100%, но это не подойдет из-за проблемы если сузить еще сильнее то нет скрола по основному контенту так же.

Я создал пример на JSFiddle потому-то там можно поиграть с размером вьюпорта. Попробуйте его увеличить и сузить, потом попробуйте добавить overflow:hidden к .body.

https://jsfiddle.net/m6op1dwt/11/

Я полагаю все-равно может быть что-то непонятно, я отвечу на все вопросы. Спасибо за внимание.

Answer 1

Желательно не допускать ситуаций, когда дочерний элемент больше родителя. Но ситуации бывают разные. Вот способ с абсолютным позиционированием:

*{ 
  box-sizing:border-box; 
} 
body{ 
  margin:0; 
} 
.container{ 
  padding-top:50px; 
  max-width:800px; 
  margin:auto; 
  position:relative; 
} 
.progress{ 
  border:1px solid; 
  width:150%;    
  max-width:100vw; /*Ограничиваем ширину прогресс-бара шириной экрана*/ 
  height:30px; 
  background-color:#ddd; 
  position:absolute; 
  top:10px;   
  left:50%; /*смещаем прогресс-бар влево на 50% ширины родителя*/ 
  transform:translateX(-50%); /*смещаем прогресс-бар вправо на 50% своей ширины, тем самым центрируя его относительно родителя*/ 
} 
.progress__bar{ 
  width:50%; 
  height:100%; 
  background-color:#cda; 
}
<div class="container"> 
  <div class="progress"> 
    <div class="progress__bar"></div> 
  </div> 
  <p>Многие думают, что Lorem Ipsum - взятый с потолка псевдо-латинский набор слов, но это не совсем так. Его корни уходят в один фрагмент классической латыни 45 года н.э., то есть более двух тысячелетий назад. Ричард МакКлинток, профессор латыни из колледжа Hampden-Sydney, штат Вирджиния, взял одно из самых странных слов в Lorem Ipsum, "consectetur", и занялся его поисками в классической латинской литературе.</p> 
</div>

Вариант с изменением разметки(более корректный, на мой взгляд)

*{ 
  box-sizing:border-box; 
} 
.progress{ 
  max-width:1600px; 
  margin:0 auto 10px; 
  height:30px; 
  background-color:#ddd; 
  border:1px solid; 
} 
.progress__bar{ 
  height:100%; 
  width:50%; 
  background-color:#cda; 
} 
.container{ 
  max-width:800px; 
  margin:auto; 
}
<div class="progress"> 
  <div class="progress__bar"></div> 
</div> 
<div class="container">Многие думают, что Lorem Ipsum - взятый с потолка псевдо-латинский набор слов, но это не совсем так. Его корни уходят в один фрагмент классической латыни 45 года н.э., то есть более двух тысячелетий назад. Ричард МакКлинток, профессор латыни из колледжа Hampden-Sydney, штат Вирджиния, взял одно из самых странных слов в Lorem Ipsum, "consectetur", и занялся его поисками в классической латинской литературе.</div>

READ ALSO
Как сделать четкую рамку при наведении (SVG)?

Как сделать четкую рамку при наведении (SVG)?

Изучаю SVG графикуПытаюсь сделать логотип, хочу что бы при наведении заливка менялась у самого блока и у буквы, это сделать получилось, так...

325
Как можно поменять стили внутри iFrame?

Как можно поменять стили внутри iFrame?

Есть сайт http://leiberlshv55372

334
Стили футера в зависимости от высоты блока

Стили футера в зависимости от высоты блока

Можно ли сделать так, чтобы если блок меньше высоты окна страницы(короткое объявление), то футер был бы прижат к нижней части окна браузера,...

231
выбрать один checkbox из двух

выбрать один checkbox из двух

Есть несколько checkbox-ов,нужно чтобы выбирался 1 или 2 checkbox, а остальные выбирались независимо от нихid, name не меняются так как используются в программе

254