作者:Ahmad shaded Переводчик: Front-end Xiaozhi 来源:sitepoint
Ставь лайк и смотри, поиск в WeChat【Переезд в мир】Обратите внимание на этого человека, который не имеет большого фабричного прошлого, но имеет восходящий и позитивный настрой. эта статья
GitHub
GitHub.com/QQ449245884…Он был включен, статьи были классифицированы, и многие мои документы и учебные материалы были систематизированы.
В макете для каждой функциональной структуры DOM мы обычно используемwrapper
Элементы класса оборачивают его, чтобы упростить чтение кода или веб-контента. Для этого мы обычно используемwrapper
илиcontainer
. Использование в CSSwrapper
Способов может быть несколько, некоторые из них могут вызвать некоторые проблемы.
В этой статье мы познакомимся с CSSwrapper
макеты, как они работают, как их использовать и когда их не использовать. Обратите внимание, что в этой статье может быть упомянуто, чтоwrapper
а такжеcontainer
Оба термина имеют одинаковое значение.
Введение в обертку
когда мы говоримwrapperилиcontainer, что на самом деле означает, что набор элементовУпаковкаилиВключатьвнутри другого элемента. мы можем<body>
элемент добавляетwrapper
class, чтобы у нас не было лишнего элемента, например:
body {
max-width: 1170px;
margin-left: auto;
margin-right: auto;
padding-left: 16px;
padding-right: 16px;
}
Однако будетwrapper
добавить в<body>
элемент непрактичный.wrapper
Элементы мешают детям выходить за свои пределы. Рассмотрим следующую схему:
У нас здесьaside
а такжеmain
элементы, они размещаютсяwrapper
в элементе. Конечно,.wrapper
Элементы имеют ширину.
<div class="wrapper">
<aside>...</aside>
<main>...</main>
</div>
если нетwrapper
, дочерние элементы будут прилипать к краям экрана. Это может сильно раздражать пользователей, особенно на больших экранах.
Изображение выше показывает, когда не используетсяwrapper
Как разворачивается элемент при обёртывании, пользователь не должен сталкиваться с таким поведением. Объясним причину этого.
Зачем нужна обертка на странице?
путем добавления дополнительного слояwrapper
макет, имеет много преимуществ:
-
Сделайте контент более читабельным. без дополнительного слоя
wrapper
, такое содержимое, как текст и изображения, может растягиваться на всю ширину экрана. Для маленьких экранов вроде нормально. Однако для больших экранов это очень раздражает. -
Группировка элементов дизайна позволяет увеличить расстояние между ними.
-
В отсутствие
wrapper
В случае , разделить элементы дизайна на столбцы непросто.
Реализовано в CSSwrapper
До сих пор мы узналиwrapper
Базовые знания и преимущества, давайте конкретно рассмотрим, как использовать их в CSS.
установить ширину
выполнитьwrapper
Первым делом нужно подтвердить его ширину. И то, как ширина зависит от дизайна пользовательского интерфейса. Как правило, наиболее часто используемые значения ширины:1000px-1300px
. Например, популярный фреймворк Bootstrap использует1170px
ширина.
.wrapper {
width: 1170px;
}
Однако не рекомендуется использоватьwidth
свойство, потому что, когда размер экрана меньше, чем1170
Пиксели, происходит горизонтальная прокрутка. Могуmax-width
Для решения этой проблемы.
.wrapper {
width: 1170px;
max-width: 100%;
}
Мы также можем сделать это проще и просто использоватьmax-width
.
.wrapper {
max-width: 1170px;
}
Теперь, когда у нас есть ширина, мы можем центрировать ее.
центральная обертка
чтобыwrapper
Центрирование, используйте значение левого и правого полейauto
,Следующим образом:
.wrapper {
max-width: 1170px;
margin: 0 auto;
}
Согласно спецификации CSS, следующееmargin: 0 auto;
как это работает
Если «поле слева» и «поле справа» имеют значение «авто», они используются с одинаковыми значениями. Это отцентрирует элемент по горизонтали относительно края содержащего блока.
Здесь я используюmargin:0 auto
, который в основном преобразует верхнюю и нижнююmargin
обнулить и сделать его левую и правую части какauto
. Существуют некоторые последствия использования этой функции, которые описаны далее в этой статье. В настоящее время рекомендуются упрощенные поля:
.wrapper {
max-width: 1170px;
margin-left: auto;
margin-right: auto;
}
Добавьте отступы слева и справа
Важно учитывать добавление слева и справаpadding
. Когда размер области просмотра меньше, чемwrapper
максимальной ширины, это приведет кwrapper
Края приклеиваются к области просмотра.
.wrapper {
max-width: 1170px;
margin-left: auto;
margin-right: auto;
padding-left: 16px;
padding-right: 16px;
}
добавлениемpadding
, мы можем гарантировать, что получим16px
смещение, даже если размер области просмотра меньше максимальной ширины.padding
В качестве стратегии защиты не позволяйтеwrapper
Придерживайтесь края окна просмотра.
используя процентwrapper
Я получил ответы об использовании процентной ширины (например, max-width: 90%) для оберток вместо padding-left и padding-right.
Я часто могу использовать процентную ширину непосредственно в «оболочке», напримерmax-width: 90%
. Вместо того, чтобы использоватьpadding-left
а такжеpadding-right
.
На больших экранах ширина90%
слишком велик, мы можем использовать медиа-запрос, чтобы покрыть его.
.wrapper {
max-width: 90%;
margin-left: auto;
margin-right: auto;
}
/* A media query for a large screen */
@media (min-width: 1170px) {
.wrapper {
max-width: 1170px;
}
}
С процентной шириной мы добавляем дополнительный шаг. Мы можем легко избежать этого шага, используя фиксированное значение ширины. По этой схеме можноwidth: 90%
а такжеmax-width:1170px
свойства объединяются.
.wrapper {
width: 90%;
max-width: 1170px;
margin-left: auto;
margin-right: auto;
}
Это забавный подход, но я предпочитаю добавлять его самpadding
, вместо того, чтобы полагаться на ширину в процентах.
Оберткаdisplay
Типы
из-заwrapper
да<div>
, поэтому по умолчанию это элемент блочного уровня. Проблема в том, когдаwrapper
Содержимое внутри помещается вgrid
средняя школа, что мне делать? мы напрямуюwrapper
добавитьdisplay: grid
?
Я не рекомендую делать это, поскольку это противоречит концепции разделения задач.wrapper
Используется для обертывания его содержимого, не более того. При необходимости используйтеgrid
макет, добавьте еще один слой<div>
посвященныйgrid
Макет станет проще, понятнее и проще в обслуживании.
<div class="wrapper">
<!-- Content -->
</div>
Это не рекомендуется, потому чтоwrapper
Элементы могут использоваться на другой странице, что может непреднамеренно нарушить макет.
.wrapper {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 16px;
}
Лучшее решение выглядит следующим образом:
<div class="wrapper">
<div class="featured-news">
<!-- Elements that needs to be placed in a grid -->
</div>
</div>
.featured-news {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 16px;
}
добавить отступ между обертками
Выше мы сказали, что не рекомендуется использовать сокращенную версию для центрированияwrapper
элемент:
.wrapper {
margin: 0 auto;
}
Пока это работает, когда на странице несколькоwrapper
Когда и нужно добавить интервал между ними, это может сбить с толку. Из-за потребностей макета нам нужноwrapper
Добавьте еще один класс, напримерwrapper-variation
,Такmargin
Он может работать неправильно.
.wrapper-variation {
margin-top: 50px;
}
.wrapper {
max-width: 1170px;
margin-left: auto;
margin-right: auto;
padding-left: 16px;
padding-right: 16px;
}
.wrapper-variation
элементальmargin
нельзя использовать, потому что он былmargin: 0 auto
покрытие.为避免此类混淆,建议在这种情况下使用非简写格式 。
Давайте теперь добавим маржу. В каждом проекте я подготовил набор используемых дляmargin
а такжеpadding
служебные классы, используйте их при необходимости, рассмотрите следующую схему.
<div class="wrapper mb-5"></div>
<section>
<div class="wrapper"></div>
</section>
<div class="wrapper"></div>
.mb-5 {
margin-bottom: 3rem !important;
}
так,wrapper
CSS оставляем как есть, а интервал добавляется с помощью дополнительных классов CSS. Теперь вы можете спросить, почему вы можете добавить несколько на страницуwrapper
? В приведенном выше HTML дваwrapper
Eсть<section>
элемент.
использовать здесь!important
Это нормально, потому что суть служебного класса强制属性
, добавлением!important
, мы можем убедиться, что сделать это.
Обертка на весь экран
В некоторых случаях, если раздел имеет ширину фонового окна просмотра 100%,并且其中包含
wrapper`, такое может случиться. Подобно тому, что было введено в предыдущем примере.
<section>
<div class="wrapper"></div>
</section>
<section>
<div class="wrapper"></div>
</section>
<section>
Ширина100%
. Мы можем добавить к нему фоновый цвет или изображение. В этом,wrapper
Не позволяет содержимому занимать всю ширину области просмотра.
Нужно ли к основному контенту добавлять обертку?
Это зависит от ситуации. Давайте рассмотрим дизайн двух наиболее часто используемых диапазонов контента.
Первый центрируется по своему содержимому и ограничивается определенной шириной.
Второй расширен до края содержимого основного содержимого.
Чтобы лучше понять эти два режима, давайте рассмотрим, как построить каждый из них.
Содержимое по центру
вы можете использоватьwrapper
Держите контент по центру.
<section class="hero">
<h2>How to make bread at home</h2>
<p>....</p>
<p><a href="/sign-up">Sign up</a></p>
</section>
В приведенном выше HTML вы можете использоватьtext-align
Содержимое центра
.hero { text-align: center; }
Если вы не измените размер окна браузера, вы можете игнорировать эту проблему.
Содержимое подходит плотно
Поскольку левая и правая стороны неpadding
, поэтому содержимое будет прилипать к краям. Это неудобно для пользователя, потому что затрудняет просмотр контента.
длина строки на большом экране
На больших экранах текст абзаца может быть трудночитаемым из-за большой длины строки. В зависимости от элементов типографского стиля, применяемых в Интернете, рекомендуемое количество символов в строке составляет45
прибыть75
. Любой символ за пределами этого диапазона затруднит чтение.
Чтобы избежать вышеуказанной проблемы, вы можете использоватьwrapper
чтобы длина текста не становилась слишком длинной, а также для увеличения интервала на мобильных устройствах.
<section class="hero">
<div class="hero__wrapper">
<h2>How to make bread at home</h2>
<p>...</p>
<p><a href="/sign-up">Sign up</a></p>
</div>
</section>
используется здесьhero__wrapper
класс, потому чтоwrapper
может просто игла对hero
Частично настроенный, поэтому он может иметь ширину меньше, чем общийwrapper
элемент.
.hero__wrapper {
max-width: 720px;
margin-left: auto;
margin-right: auto;
padding-left: 16px;
padding-right: 16px;
}
Чтобы центрировать контент, в каждом конкретном случае можно использовать определенные свойства. Для этого примера используйтеtext-align:center
достаточно, чтобы центрировать содержимое.
правильноwrapper
Используйте переменные CSS
только один размерwrapper
редкий.wrapper
Ширина может быть маленькой или большой, в зависимости от содержимого. Используя переменные CSS, мы можем создать более современныйwrapper
, он имеет большую гибкость. Рассмотрим следующее:
<div class="wrapper"></div>
.wrapper {
max-width: var(--wrapper-width, 1170px);
margin-left: auto;
margin-right: auto;
padding-left: 16px;
padding-right: 16px;
}
var
Есть два значения, первое значение является переменной--wrapper-width
, второе значение1170px
, если не установлено--wrapper-width
переменная, вы будете использовать1170px
.
Конечно, мы можем напрямую--wrapper-width
Назначение, чтобы мы могли динамически устанавливать желаемое значение.
<div class="wrapper" style="--wrapper-width: 720px"></div>
Если вы не используете переменные CSS, вы также можете решить эту проблему, добавив дополнительный класс:
<div class="wrapper wrapper--small"></div>
.wrapper--small {
--wrapper-width: 720px;
/* this will override the default wrapper width. */
}
использоватьdisplay: contents
Во-первых, краткое введение в это свойство. Каждый элемент в CSS представляет собой коробку, содержащуюcontent
,padding
,margin
а такжеborder
.display: contents
правила стиля делаютdiv
Элемент не создает никакой ограничивающей рамки, поэтому элементmargin
,border
а такжеpadding
Части не будут отображаться. Однако унаследованные свойства, такие как цвет и шрифт, могут влиять на дочерние элементы, как обычно.
<header class="site-header">
<div class="wrapper site-header__wrapper">
<!-- Header content -->
</div>
</header>
.site-header__wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
В приведенном выше примере вы можете захотеть, чтобы заголовок расширялся на всю ширину страницы, а не ограничивалсяwrapper
ограничение по ширине.
.site-header__wrapper {
display: contents;
}
.site-header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
так,.wrapper
Элемент будет скрыт (похож). Теперь, когдаdisplay:flex
применительно к.site-heade
р элемент,.wrapper
Потомки станут为.site-header
ребенок .
Плавный фон, фиксированный контент
Lea Verouв ее《CSS Secrets》
В книге описан интересный прием, который можно использовать для плавного фона (занимающего всю ширину области просмотра) с внутреннимwrapper
часть. Давайте рассмотрим распространенные практики.
<section>
<div class="wrapper"></div>
</section>
section {
background-color: #ccc;
}
.wrapper {
max-width: 1170px;
margin-left: auto;
margin-right: auto;
padding-left: 16px;
padding-right: 16px;
}
margin-left: auto
а такжеmargin-right: auto
Это работает так: вычисляется половина ширины области просмотра за вычетом ширины содержимого. использоватьpadding
также можно сделать.
section {
padding: 1rem calc(50% - 585px);
}
С этим еще есть проблема, на мобильных устройствах контент будет прилипать к краю устройства, одно из решений заключается в следующем:
section {
padding: 1rem;
}
@media (min-width: 1170px) {
section {
padding: 1rem calc(50% - 585px);
}
}
оригинал:Я заштриховал.com/article/Загорать…
Ошибки, которые могут существовать после развертывания кода, не могут быть известны в режиме реального времени.Чтобы решить эти ошибки впоследствии, много времени тратится на отладку журнала.Кстати, я рекомендую всем полезный инструмент мониторинга ошибок.Fundebug.
Статья постоянно обновляется каждую неделю, вы можете искать в WeChat **【Moving the World】Сначала прочитай, ответь[Благополучие] **Вас ждет много фронтенд-видео, эта статья GitHubGitHub.com/QQ449245884…Он был записан, добро пожаловать в Star.