Почему добавление поля к моему div вытесняет его содержимое (столбцы) со страницы?

Добавление поля к div сдвигает правый столбец от края экрана вправо.

Я пробовал добавлять поля к обоим и , изменять ширину и даже полностью удалять свойство ширины из CSS.

Без каких-либо полей 3 столбца идеально соответствуют ширине экрана с крошечным полем по умолчанию, показывающим цвет фона моей страницы. Добавление ЛЮБОЙ маржи все портит.

<HTML>
<main>
    <section>
    Some text 1
    </section>

    <section>
    Some text 2
    </section>

    <section>
    Some text 3
    </section>
</main>


CSS

<<<<<<<SOME MEDIA QUERIES TO MAKE IT ADAPTABLE FOR MOBILE>>>>>>>

@media (min-width: 620px) {
main {
    column-count: 2;
}
section {
    break-inside: avoid;
}
}

@media (min-width: 960px) {
    main {
        column-count: 3;
    }
}


<<<<<<<<<<<<NORMAL CSS>>>>>>>>>>>>>>

main {
    width: 100%;
    margin-right: 5%;  <<<<<PROBLEM AREA
    margin-left: 5%;
}

section {
    height: 25%;
    margin-bottom: 5%;
    padding: 20px;
    display: inline-block;
}

Я хотел бы 5% поля слева и справа от div без поля между div.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
2 024
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поля CSS добавляются к за пределами элемента. Если у вас есть <div> с шириной 100% и вы добавляете 5% поля с обеих сторон, этот элемент теперь имеет ширину 110%.

Если вы хотите добавить поля, вы должны учитывать их в ширине элемента. Если и ширина, и поля указаны в процентах, вы можете просто вычесть поле:

main {
  width: 90%;
  margin-left: 5%;
  margin-right: 5%;
}

Если для ширины и поля используются разные единицы измерения (например, ширина: 100%, поле: 24 пикселя), вы можете использовать css калькулятор:

main {
  width: calc(100% - 48px);
  margin-left: 24px;
  margin-right: 24px;
}

В приведенном ниже фрагменте единственная разница между первой строкой и второй — это поля. Обратите внимание, что сами коробки имеют одинаковый размер. Маржа добавляется нестандартно.

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}

.grid {
  background-color: white;
  background-image: linear-gradient(transparent 24px, #999 25px), linear-gradient(90deg, transparent 24px, #999 25px);
  background-size: 25px 25px, 25px 25px;
  background-position: 1px 1px;
  height: 100vh;
}

.container > div {
  display: inline-block;
  width: 100px;
  background: bisque;
  margin: 0 21px 22px 0;
  min-height: 50px;
}

.container.second > div {
  background: tomato;
  margin: 0 46px 15px 0;
}
<div class = "grid">
  <div class = "container first">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div>

  <div class = "container second">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div>
</div>

Объяснение различных частей:

Content - Содержимое поля, где появляются текст и изображения

Padding — очищает область вокруг контента. Прокладка прозрачная

Border — граница, охватывающая отступы и содержимое.

Margin - Очищает область за границей. Маржа прозрачная

Общая ширина элемента должна быть рассчитана следующим образом:

Общая ширина элемента = ширина + левый отступ + правый отступ + левая граница + правая граница + левое поле + правое поле

Общая высота элемента должна быть рассчитана следующим образом:

Общая высота элемента = высота + верхний отступ + нижний отступ + верхняя граница + нижняя граница + верхнее поле + нижнее поле

div {
  background-color: lightgrey;
  width: 300px;
  border: 15px solid green;
  padding: 50px;
  margin: 20px;
}
<div>This text is the content of the box. We have added a 50px padding, 20px margin and a 15px green border. 
Total width here becomes:

300px (width)
+ 100px (left + right padding)
+ 30px (left + right border)
+ 40px (left + right margin)
= 470px
</div>

Вы также можете объяснить разницу между box-sizing между border-box и content box. Размер рамочного блока гораздо более интуитивен, и его переключение часто может устранить проблемы с переполнением и точную настройку.

Ray Butterworth 28.05.2019 02:54

Другие вопросы по теме