CSS margin — зовнішні відступи елемента


автор: Svitlana

Загальний опис

автор: NagarD

Нотатка

У блокових елементів розташованих поруч один з одним по вертикалі (margin-top та margin-bottom) спостерігається ефект об'єднання, коли відступи не сумуються, а об'єднуються між собою. Саме об'єднання діє на два і більше блоку (один може бути вкладений всередину іншого) з відступами зверху чи знизу, при цьому примикають відступи комбінуються в один. Для відступів зліва і справа об'єднання ніколи не застосовується. Незважаючи на те, що об'єднуючі поля можуть здаватися, на перший погляд, нелогічними, вони насправді корисні:

  1. Вони не дозволяють порожнім елементам додавати додатковий, зазвичай небажаний, вертикальний проміжок.
  2. Вони дозволяють більш простіше керувати відступами на сторінці. Наприклад, заголовки та параграфи зазвичай мають вертикальні поля. Якщо поля не згортатимуться, то відступ між заголовкам та параграфом будуть набагато більшими ніж у параграфів, в такому випадку веб-майстру потрібно буде коригувати їх, щоб досягти однакових вертикальних інтервалів.
  3. Для вкладених елементів, дозволяє компенсувати поле для внутрішнього елемента та його батька. На малюнку видно, що поля об'єдналися в одне, розміром 10 px (Найбільше поле, що у внутрішнього елемента). А не сумувалися в 15px. Як видно, в такому випадку дочірній елемент підштовхнув свого батька на 5px вниз.

Схлопування не спрацьовує:

  • для елементів, у яких на стороні схлопування задано властивість padding.
  • для елементів, у яких на стороні схлопування задана межа;
  • на елементах з абсолютним позиціонуванням, тобто таких, у яких position встановлено як absolute;
  • на плаваючих елементах (для них властивість float задано як left або right);
  • для строкових елементів;
  • для <html>.
автор: Svitlana
Нотатка

Якщо елемент не має батька, відступ буде розраховуватись до краю вікна браузера. Пам'ятай, що у вікна браузера теж встановлені відступи. Щоб їх позбутися, слід встановлювати значення margin для елемента <body> рівним нулю.

автор: Svitlana
Нотатка

Властивість margin може приймати від'ємні значення. Також за допомогою ключового значення auto ми можемо центрувати елементи відносно батьківського блоку:

автор: Svitlana

Синтаксис

margin: length|%|auto|initial|inherit;

Властивість margin може отримувати 5 значень:

length

Визначає відступ в px, pt, cm та інших одницях , що прийняті в CSS. Значення без задання дорівнює 0.

автор: Svitlana

%

Відступ у відсотках відносно батьківського елемента.

автор: Svitlana

auto

Браузер самостійно обчислить відступ.

автор: Svitlana

initial

Встановлює властивість у значення без задання

автор: Svitlana

inherit

Вказує на спадковість властивості від свого батьківського елемента.

автор: Svitlana

Значення без задання: 0
Наслідує: Ні
Анімується: Так
JavaScript синтаксис: object.style.margin="100px 50px"

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 3.5 12 3
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1

Приклади

+ запропонувати свій приклад у пісочниці

HTML

<div class="box">Блок фіксованої ширини: 16px згори й знизу, а ліворуч і праворуч — порівну</div>

CSS

.box {
	margin: 16px auto;
	width: 320px;
	padding: 8px;
	background-color: #eef3f7;
	border: 1px solid #b6c6d3;
}
автор: Svitlana

Динамічний приклад

HTML

<div class="inputs">
  <input checked id="0 auto" name="margin" type="radio"/>
  <label for="0 auto">margin: 0 auto</label>
  <br>
  <input id="30px" name="margin" type="radio"/>
  <label for="30px">margin: 30px</label>
  <br>
  <input id="30px 0" name="margin" type="radio"/>
  <label for="30px 0">margin: 30px 0</label>
  <br>
  <input id="30px 10px" name="margin" type="radio"/>
  <label for="30px 10px">margin: 30px 10px</label>
  <br>
  <input id="10px 30px" name="margin" type="radio"/>
  <label for="10px 30px">margin: 10px 30px</label>
  <br>
  <input id="10px 30px 40px" name="margin" type="radio"/>
  <label for="10px 30px 40px">margin: 10px 30px 40px</label>
  <br>
  <input id="5px 10px 40px 10px" name="margin" type="radio"/>
  <label for="5px 10px 40px 10px">margin: 5px 10px 40px 10px</label>
  <br>
</div> 
<div class="parent">
   <div class="child">
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh 
    euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim 
    ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl 
    ut aliquip ex ea commodo consequat. 
   </div>
</div>

CSS

body { 
   margin: 0; /* забыраємо відступи */
}
.parent {
   width: 500px;
   margin: auto;
   background: #fd0; /* колір фону */
   padding: 10px; /* Поля навколо тексту */
}
.child {
   border: 3px solid #666; /* Параметри рамки */
   padding: 10px; /* Поля навколо тексту */
   margin: 10px; /* відступи навкруги */
}
.inputs {
  margin:8px auto 8px;
	width:500px;
}

JS

document.querySelectorAll('.inputs input').forEach((el) => el.addEventListener('change', function () {
  var input_id = this.id; // Вибірка ідентифікатора
  // var label = document.querySelector('label[for="'+input_id+'"]'); // Вибірка лейбла

  document.querySelectorAll('.child').forEach((n) => n.style.setProperty('margin', input_id));
  // document.querySelectorAll('.child').forEach((n) => n.textContent = label?.textContent ?? '');
}));
автор: Svitlana

Демонстрація роботи властивості

HTML

<div class="info">
	<p>За допомогою властивості <code>margin</code> ми можемо встановити відступи для елементу.</p>
	<p>Нижче розташований блок зі статичною шириною <em>250px</em>. За допомогою відступів (<em>0 auto</em>) ми можемо розташувати його ідеально по центру сторінки.</p>
</div>

<div class="wrapper">
	<div class="block">Я відцентрований! :)</div>
</div>

CSS

* {
	box-sizing: border-box;
}

body {
	font-family: monospace;
	font-size: 17px;
}

.info {
	padding: 16px;
}

code {
	font-weight: 700;
	color: #444;
	border-bottom: 2px solid #666;
}

.block {
	margin: 0 auto;
	background-color: gold;
	width: 250px;
	text-align: center;
	line-height: 150px;
}
автор: Svitlana

Схлопування відступів: у звичайному потоці 30px + 30px дають 30px, а в flex — повні 60px.

HTML

<p>Звичайний потік — відступи схлопнулись:</p>
<div class="wrap flow">
    <div class="box a">margin-bottom: 30px</div>
    <div class="box b">margin-top: 30px</div>
</div>

<p>Той самий код у flex-контейнері — відступи склались:</p>
<div class="wrap flexed">
    <div class="box a">margin-bottom: 30px</div>
    <div class="box b">margin-top: 30px</div>
</div>

CSS

.wrap {
    width: 280px;
    border: 1px solid #666;
}

.flexed {
    display: flex;
    flex-direction: column;
}

.box {
    background: #dbeafe;
    padding: 8px;
}

.a {
    margin-bottom: 30px;
}

.b {
    margin-top: 30px;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід