#html #css #flexbox
#HTML #css #flexbox
Вопрос:
position: absolute
Можно ли сделать так, чтобы элементы 6 и 7 в этом списке отображались рядом в строке 6, не изменяя HTML или не прибегая к хакерству?
ul {
border: 1px solid gray;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
list-style-type: none;
}
li {
width: 33%;
border: 1px solid #ccc;
text-align: center;
}
<div class="flex-container">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
</div>
Ответ №1:
Вот один из методов:
- Переключите
flex-direction
наrow
. - Включить
wrap
. - Дайте каждому элементу flex достаточную ширину, чтобы в строке мог поместиться только один. Это заставляет следующие элементы создавать новые строки.
- Задайте двум последним элементам (6 и 7) ширину, которая позволяет обоим помещаться на одной строке.
ul {
display: flex;
justify-content: center;
flex-wrap: wrap;
list-style-type: none;
border: 1px solid gray;
}
li {
flex: 0 0 66%; /* flex-grow flex-shrink flex-basis */
text-align: center;
border: 1px solid #ccc;
}
li:nth-last-child(-n 2) {
flex-basis: 45%;
}
<div class="flex-container">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
</div>
Ответ №2:
Вы можете сделать это следующим образом:
ul {
border: 1px solid gray;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
}
li {
min-width: 33%;
max-width: 33%;
border: 1px solid #ccc;
text-align: center;
margin-left: 100%;
margin-right: 100%;
}
li:nth-last-child(-n 2) {
margin: 0;
}
<div class="flex-container">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
</div>