How to display 3 items per row in flexbox?
I have a list and I want to display my li elements horizontally and 3 per row. I’ve been trying to get what I want, but no luck. Is there a solution?
- @foreach(App\Http\Controllers\HomeController::getservice($service->id) as $key => $value)
- title>>
description!!>
@endforeach
.serv ul < display: inline-flex; margin: 0; padding: 0; width: 33%; text-align: left; float: left; >.serv ul li < list-style: none; display: inline-block; padding: 0; >.serv ul li span
3 Answers 3
- You probably want to use display: flex not inline-flex .
- Add flex-wrap: wrap to allow wrapping onto multiple lines.
- Remove width: 33% if you wish it to take entire space avaiable.
For 3 items per row, add on the flex items:
- flex-basis: 33.333333%
- You can also use the flex ‘s shorthand like the following: flex: 0 0 33.333333% => which also means flex-basis: 33.333333% .
How to combine that with flex gap. It seems to break if the item has a gap: 1em or any other value applied and only two are shown per row.
@BenjaminK for padding add box-sizing: border-box to li, for margin say 1em change it to flex: 0 0 calc(33.333333% — 2em).
I had this same issue, but the selected correct answer did not work cause the my child items needed to have a fix width so here is my solution to show X items of fix width on DISPLAY: FLEX.
// Flex item width required: 215px // Flex item margin 20px on each side: 215px + 20 + 20 = 255px // I needed 3(your item per row) so: 255px * 3 // Then to (100% of parent-flex minus 255 * 3) / 2 padding on each side // So it stays in the center. padding: 40px calc((100% - (255px * 3)) / 2);
*, *::before, *::after < box-sizing: border-box; >.parent-flex < display: flex; flex-wrap: wrap; justify-content: center; background-color: tomato; padding: 40px calc((100% - (255px * 3)) / 2); >.flex-item
Разделение страницы на 3 независимых вертикальных блока
Задача состоит в том, что необходимо разделить на три части страницу. Два сайдбара слева и справа, и контент посередине. Ширина каждого блока статическая и главное что блок с контентом должен отображаться по центру. Неожиданно возникли проблемы с такой задачей и нигде не могу найти решение, уже вроде все перепробовал и интернет прошерстил. Вот что у меня вышло с помощью display: table. Но блоки между собой очень зависимы, и я даже не могу воспользоваться какими-либо отступами для контента, не затрагивая другие блоки. HTML:
some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content
.page-wrapper < display: table; width: 100%; height: 100%; >.left-panel-wrapper, .right-panel-wrapper < display: table-cell; width: 100px; height: 100%; background-color: #f6f8fa; >.left-panel, .right-panel < display: inline-block; >.content-wrapper < display: table-cell; >.content
2 ответа 2
.page-wrapper < display: flex; justify-content: space-between; >.left-panel-wrapper < width: 200px; background-color: orange; >.right-panel-wrapper < width: 200px; background-color: green; >.content-wrapper < /*width: 250px;*/ width: calc(100% - 400px); padding: 0 30px; >
some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content
на inline-block с костылём
.page-wrapper < text-align: justify; overflow: hidden; min-width: 1000px; >.page-wrapper:after < content: ''; width: 100%; display: inline-block; >.left-panel-wrapper < display: inline-block; width: 200px; background-color: orange; vertical-align: top; >.right-panel-wrapper < display: inline-block; width: 200px; background-color: green; vertical-align: top; >.content-wrapper < display: inline-block; vertical-align: top; width: 500px; margin: 0 auto; padding: 0 10px; >/* костыль */ .left-panel-wrapper, .right-panel-wrapper, .content-wrapper < position: relative; >.left-panel-wrapper:before, .right-panel-wrapper:before, .content-wrapper:before
some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content some content
Суть в том, что обвертки даёте overflow: hidden; а каждой колонки подкладку в виде before, через absolute, что создаёт вид background.
Html три вертикальных блока
БлогNot. CSS: как вложить три блока «матрёшкой» и центрировать контент в них?
CSS: как вложить три блока «матрёшкой» и центрировать контент в них?
То есть, получить вот такое:
Для горизонтального центрирования всё просто. Вертикальное же изначально не было предусмотрено в спецификации CSS и по сей день вызывает ряд проблем.
На вложенных табличных тегах сделать такое элементарно, а вот на разделах div кодик как-то уродлив вышел, и в старых браузерах ничего позиционироваться не будет, мне кажется, но как сделать лучше? 🙂
В принципе, это же общая схема элемента HTML получилась. В Firefox, IE11 и «Хромом» из Андроида 7 дома сработало. Ниже — разметка:
.outer < background-color: #666; margin: auto; width: 300px; height: 300px; position: relative; >.inner < height: 260px; width: 260px; margin: auto; background-color: #999; border: 2px solid blue; text-align: center; vertical-align: middle; >.insider < width: 180px; height: 180px; background-color: #ccc; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); >.rightText < text-align: right; transform: translate(0, 210px); >.middleText