Ответ 1
Как я могу центрировать улицу без ее обрезания?
Это был действительно хороший вопрос, возникли некоторые проблемы с определением способа достижения такого поведения.
Я не верю, что вы найдете чистое решение CSS
, однако мы можем сделать это, используя бит javascript
.
В основном я создал script, прикрепленный к событию изменения размера окна, который будет выполнять следующие действия:
- проверьте, сколько элементов у нас внутри нашего элемента-оболочки:
#wrapper
- разделите количество элементов на 3 (так как у нас есть 3 элемента в каждом столбце), чтобы узнать, сколько столбцов потребуется для отображения элементов
- назначить ширину элементу-оболочке, используя следующую формулу: количество столбцов * ширина каждого элемента (в нашем случае
200px
)
Выполняя это, мы принудительно переполняем родительский элемент, а полоса прокрутки будет иметь нормальное поведение, отображая каждый элемент.
Полный код доступен в jsfiddle
.
Посмотрите следующий пример:
function onResize() {
var wrapper = document.querySelector('#wrapper');
var items = wrapper.querySelectorAll('li');
var columns = Math.ceil(items.length / 3);
var width = 200 * columns;
wrapper.style.width = width > window.innerWidth ? width + 'px' : '100%';
}
onResize();
window.addEventListener('resize', onResize);
html,
body {
height: 100%;
text-align: center;
}
*,
*:before,
*:after {
box-sizing: border-box;
padding: 0;
margin: 0;
}
#wrapper {
height: 100%;
display: inline-flex;
align-items: center;
justify-content: center;
background-color: aqua;
}
ul {
height: 75%;
list-style: none;
display: flex;
align-content: center;
flex-direction: column;
flex-wrap: wrap;
}
li {
flex-basis: calc(100% / 3 - 2px);
color: firebrick;
border: 1px solid firebrick;
background-color: greenYellow;
width: 200px;
display: flex;
align-items: center;
justify-content: center;
}
<div id="wrapper">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
</div>