Я пытался выровнять свои коробки по горизонтали, но не смог решить проблему. Каждый раз, когда я пытаюсь это сделать, они складываются горизонтально. Вместо того, чтобы центрироваться прямо поперек. Или просто останется сложенным в столбец (вертикально).
HTML для блоков div:
<div class = "section2">
<h1 class = "s2h1">This is Random Info</h1>
<div class = "boxes">
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">Placeholder Text</h5>
</div>
</div>
</div>
</div>
</div>
CSS для блока div
.b1container {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
background-color: #ffdeab;
border-radius: 10px;
transition: 0.5s;
cursor: pointer;
}
.b1container:hover {
width: 250px;
height: 250px;
}
.s2boxImg {
width: 100px;
height: 100px;
border-radius: 5px;
border: 3px dotted #553c2b;
transition: 0.5s;
}
.s2boxImg:hover {
width: 250px;
height: 250px;
border: 3px dotted #f36dcb;
transition: 0.5s;
}
.boxes {
display: flex;
justify-content: space-evenly;
justify-content: center;
margin-top: 30px;
}
Я пытался использовать строку направления гибкости, я использовал выравнивание содержимого, чтобы убедиться, что все находится по центру. Я попытался переместить элементы div, чтобы убедиться, что все находится в правильном элементе div. Я также попытался равномерно распределить сам блок div, помеченный как «коробка».






Попробуйте добавить это правило CSS:
.box {
display: flex;
flex-wrap: nowrap;
}
Вы делаете блоки div гибкими, но div, который действительно содержит блоки, является блоком div.
просто добавьте flex-direction, который принимает либо row, либо column
b1container {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
flex-direction :row;
background-color: #ffdeab;
border-radius: 10px;
transition: 0.5s;
cursor: pointer;
}
вот ссылка, которая очень хорошо объясняет flexbox Основные понятия флексбокса
Если вы не хотите, чтобы элементы переносились, когда ширина становится меньше, вы можете использовать flex-wrap
которому вы можете дать nowrap атрибут flex-wrap:nowrap;
.box не flex, а тот, что держит ящики попробуй это:
.box {
display: flex;
flex-wrap: nowrap;
flex-direction: row;
}
этот код выровняет ваши поля
если вы хотите добавить размер префикса в каждое поле, вы можете попробовать:
.box > * {
flex: 0 0 25%;
width: 100%;
max-width: 25%;
}
с этим вы можете установить класс коробки для переноса, и у вас есть 4 столбца в строке.
Вы вложили все .box элементы на несколько уровней внутрь .boxes, поэтому они расположены стопкой. Сделайте все .box элементы прямыми потомками .boxes и все заработает.
Механизм flexbox работает только на один уровень в глубину: родительский элемент контейнера flexbox (.boxes) содержит сгибаемые дочерние элементы (.box). Любой элемент внутри .box не затрагивается или, лучше сказать, не обрабатывается механизмом flexbox. Именно поэтому основная структура в вашем случае должна быть:
<div class = "boxes">
<div class = "box"></div>
<div class = "box"></div>
<div class = "box"></div>
<div class = "box"></div>
</div>
Я также добавил flex-flow: row wrap, чтобы .box элементы переносились на следующую строку, когда это необходимо.
.b1container {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
background-color: #ffdeab;
border-radius: 10px;
transition: 0.5s;
cursor: pointer;
}
.b1container:hover {
width: 250px;
height: 250px;
}
.s2boxImg {
width: 100px;
height: 100px;
border-radius: 5px;
border: 3px dotted #553c2b;
transition: 0.5s;
}
.s2boxImg:hover {
width: 250px;
height: 250px;
border: 3px dotted #f36dcb;
transition: 0.5s;
}
.boxes {
display: flex;
flex-flow: row wrap; /* ADDED to make content wrap */
justify-content: space-evenly;
justify-content: center;
margin-top: 30px;
}<div class = "section2">
<h1 class = "s2h1">This is Random Info</h1>
<div class = "boxes">
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg">
</div>
<h5 class = "b1Info">Placeholder Text</h5>
</div>
</div>
</div>Обновил ответ. У меня есть редактор HTML/CSS, настроенный на автоматическое добавление 4 пробелов на уровень вложенности кода (а не символ «табуляция», как вы часто видите в IDE). Я бы сказал, используйте правильный редактор кода с поддержкой HTML/CSS/JS/SASS и т. д. Многие разработчики используют бесплатный VSCode. Особо позаботьтесь о читабельности вашего кода, так как это очень поможет вам, когда вы быстро просматриваете код, чтобы найти ошибки или внести изменения. Используйте пробелы и комментарии, когда они необходимы, или, как я часто делаю, когда вы пишете (мини) учебник. Занимаюсь этим более 40 лет и до сих пор понимаю весь мой код на любом языке.
Когда вы разработчик-одиночка, как я, найдите (или скопируйте) стиль кодирования, который лучше всего соответствует вашим потребностям, и придерживайтесь его. Наиболее удобно читать или изменять старый код, не выясняя, что вы делали, когда впервые его создавали. Погрузитесь в популярные фреймворки, у них есть «стиль», который вы можете перенять. ИТ призван облегчить жизнь, почему бы не начать с вашего кода/дизайна/текста/графики/мыслей?
Спасибо за советы. В настоящее время я использую VSCode. Я посмотрю, смогу ли я добавить это в настройки моего редактора, чтобы автоматически добавлять 4 пробела на уровень вложенности кода, или любые расширения, которые также делают это. Я готов погрузиться в популярные фреймворки, я делаю этот проект (простой лендинг) для того, чтобы понять основы HTML/CSS и т.д.
И последнее: всегда находите инструменты, которые соответствуют вашим потребностям, никогда не подстраивайте свои потребности под инструмент.
Я думаю, что ваш стиль CSS правильный. Однако HTML структурирован неправильно. Логично, что div.boxes включает в себя кучу div.box. И у каждого div.box есть содержимое коробки; как в вашем случае div.b1container и тег h5. Однако вы вложили div.box внутрь div.box вместо div.boxes.
Вот рисунок того, как это должно быть структурировано:
Вот исправленный HTML-файл:
<div class = "section2">
<h1 class = "s2h1">This is Random Info</h1>
<div class = "boxes">
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg" />
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg" />
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg" />
</div>
<h5 class = "b1Info">PlaceHolder Text</h5>
</div>
<div class = "box">
<div class = "b1container">
<img src = "" alt = "Placeholder" class = "s2boxImg" />
</div>
<h5 class = "b1Info">Placeholder Text</h5>
</div>
</div>
</div>
Хорошенькая схема! Какой инструмент вы использовали для его создания?
Это было очень информативно! Я полагаю, что это произошло, когда я копировал и вставлял свой div.box вместо того, чтобы печатать его. Кроме того, ваш пример показывает, насколько важно правильно структурировать HTML, что обеспечивает лучшую читабельность, и объясняет, почему я не смог обнаружить эту ошибку с первого взгляда.
означает ли это, что способ структурирования HTML вызывал проблему сложенных друг в друга блоков (запрашивая разъяснения)? То есть я неправильно вложил свой div(.box)? Кроме того, есть ли способ написать более чистый и читаемый код, как у вас? У меня есть расширение красивее, но мне интересно, есть ли у вас какие-либо советы по «лучшим практикам» для дальнейшего использования?