#html #css #bootstrap-4 #bootstrap-grid
#HTML #css #bootstrap-4 #bootstrap-сетка
Вопрос:
Я очень новичок в Bootstrap и работал над некоторыми учебными пособиями. В настоящее время я пытаюсь перестроить домашнюю страницу Google и столкнулся с некоторыми трудностями с отзывчивостью грид-системы.
Я создал очень простой макет верхней панели на главной странице Google, и он более или менее выглядит нормально, поскольку он полноэкранный; однако, когда я изменяю размер окна, текст с правой стороны растекается по ширине окна.
<body>
<div class="container-fluid" id="topbar">
<div class="row">
<div class="col-1 justify-content-start aboutlink">
About
</div>
<div class="col-1 justify-content-start">
Store
</div>
<div class="col-8">
</div>
<div class="col-1 justify-content-end gmaillink">
Gmail
</div>
<div class="col-1 justify-content-end">
Images
</div>
</div>
</div>
Вот изображение проблемы:
Классы «aboutlink» и «gmaillink» просто выравнивают текст по правому краю, а идентификатор верхней панели имеет поле в 15 пикселей и задает размер шрифта.
Я прочитал документацию по адаптивным точкам останова и сеточной системе, но, похоже, не могу решить эту проблему. Был бы признателен, если бы кто-нибудь мог поделиться некоторыми советами?
Спасибо.
Ответ №1:
Что происходит не так?
Если мы добавим границу к столбцам и разрешим переносить слово, если оно не подходит, мы сможем лучше видеть, что происходит.
Взгляните на этот пример, и вы увидите, что на небольших экранах слова не вписываются в col-1
divs, а поскольку слова по умолчанию не переносятся, это приводит к тому, что столбец увеличивается больше, чем должен быть, чтобы соответствовать размеру текста:
.col-1 {
overflow-wrap: break-word; border: 1px solid lightgray;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<div class="container-fluid" id="topbar">
<div class="row">
<div class="col-1 aboutlink">
About
</div>
<div class="col-1">
Store
</div>
<div class="col-8">
</div>
<div class="col-1 gmaillink">
Gmail
</div>
<div class="col-1">
Images
</div>
</div>
</div>
1. Точки останова и классы заполнения
Классы сетки начальной загрузки позволяют устанавливать точки останова для столбцов. Так, например, эти классы означают: выделите столбцу 6/12 пространства на экранах до точки останова md (768 пикселей) и 8/12 пространства от 768 пикселей и выше:
<div class="col-6 col-md-8">
В Bootstrap также есть классы интервалов, которые можно использовать для изменения заполнения столбцов. px-*
Классы устанавливают отступы для левого и правого отступов. По умолчанию используется px-3
значение, поэтому мы можем использовать px-1
, чтобы уменьшить отступы, чтобы столбцы того же размера могли вместить больше содержимого.
Пример использования col-sm-*
и px-*
:
.row div {border:1px solid lightgray;}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<div class="container-fluid" id="topbar">
<div class="row">
<div class="col-2 col-sm-1 aboutlink px-1">
About
</div>
<div class="col-2 col-sm-1 px-1">
Store
</div>
<div class="col-4 col-sm-8">
</div>
<div class="col-2 col-sm-1 gmaillink px-1">
Gmail
</div>
<div class="col-2 col-sm-1 px-1">
Images
</div>
</div>
</div>
2. Классы начальной загрузки
Лучшим вариантом в этом случае (поскольку вам не нужна определенная структура) может быть использование col-auto
классов начальной загрузки, которые будут использовать только пространство, необходимое для размещения содержимого — это может решить проблему необходимости устанавливать cols в определенной пропорции ширины, например, 1/12 или 2/12.
В приведенном ниже примере мы устанавливаем ширину первых 2 и последних 2 столбцов col-auto
, чтобы они изменялись в соответствии с размером текста внутри них, а затем присваиваем среднему столбцу col
класс, чтобы занять оставшееся доступное пространство:
.col-auto{ border:1px solid lightgray;}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<div class="container-fluid" id="topbar">
<div class="row">
<div class="col-auto aboutlink px-1">
Abouttttt
</div>
<div class="col-auto px-1">
Store
</div>
<div class="col">
</div>
<div class="col-auto gmaillink px-1">
Gmail
</div>
<div class="col-auto px-1">
Images
</div>
</div>
</div>
К вашему СВЕДЕНИЮ: justify-content-*
классы предназначены для макетов flexbox и не работают с классами grid, поэтому я удалил их из примеров.
Комментарии:
1. Большое вам спасибо за этот чрезвычайно подробный ответ, я действительно ценю время, которое вы потратили на объяснение всего для меня. Все это имеет большой смысл. Не подумал добавить границу к столбцам, определенно нужно поработать над пониманием того, как лучше устранять эти проблемы — еще раз спасибо, что помогли мне на моем пути! Я буду придерживаться автоклассов, продвигаясь вперед, где это возможно. 🙂
2. @Tjm92 Рад помочь! Выбор правильного класса col зависит от того, что вы хотите — в большинстве случаев классы точек останова, например
col-4 col-md-3
, идеальны, особенно если вы пытаетесь создать определенную сеточную структуру, например, галерею изображений или равные текстовые блоки. например. Потребуется время, чтобы ознакомиться со всеми вариантами и изучить, которые наиболее подходят в разных ситуациях. Иногда все может сводиться к пробам и ошибкам 🙂3. @Tjm92 Кроме того, чтобы все усложнить, у вас также есть CSS-сетки и flexbox! На них тоже стоит обратить внимание, они более гибкие, чем сетки начальной загрузки, но это также означает, что у них больше возможностей, что может немного затруднить изучение гаек и болтов того, как это работает. Может быть, придерживаться Bootstrap, так как это немного более интуитивно понятно для начала, а затем перейти к flexbox, когда вам нужен гибкий, менее сетчатый макет.
4. Спасибо за дополнительные советы, обязательно поиграю с ними в течение следующих нескольких недель — надеюсь, все это скоро станет второй натурой. Я прочитал в нескольких сообщениях, что я должен стараться держаться подальше от загрузочных сеток и вместо этого тратить время на изучение других моделей веб-макета. Но я сделаю так, как вы сказали, и рассмотрю Flexbox в качестве следующего шага. Еще раз спасибо, очень признателен!!!
5. @Tjm92 CSS-сетки, вероятно, заменяют загрузочные сетки, но классы начальной загрузки IMO немного легче изучать, когда вы начинаете, потому что их легче визуализировать и определять… хотя это только мое мнение 🙂