Який сенс CSS згортати поля?


80

Модель коробки CSS2 говорить нам, що сусідні вертикальні поля руйнуються .

Я вважаю це досить прикрим, оскільки є джерелом багатьох дизайнерських помилок. Я сподіваюся, розуміючи мету згортання полів, я зрозумію, коли їх використовувати і як їх уникнути, коли вони не потрібні.

Яка мета цієї функції?


3
колапс прилеглих вертикальних полів
сам

Відповіді:


101

Загальне значення "поля" полягає не в тому, щоб перенести "перемістити це на 10 пікс.", А навпаки, "поряд з цим елементом повинно бути 10 пікс. Вільного місця".

Я завжди вважав, що це найпростіше зрозуміти за допомогою абзаців.

Якби ви просто давали абзаци margin-top: 10pxі не мали полів для будь-яких інших елементів, ряд абзаців був би розставлений красиво. Але, звичайно, у вас виникнуть проблеми, розмістивши під абзацом інший елемент. Ці двоє торкнулися б.

Якщо поля не згортаються, ви соромтеся додати margin-bottom: 10px до свого попереднього коду, оскільки тоді будь-яка пара абзаців буде віддалена на 20 пікселів, а абзаци будуть відокремлюватися від інших елементів лише на 10 пікс.

Тож вертикальні поля падають. Додаючи верхнє та нижнє поля розміром 10 пікселів, ви говорите: "Мені байдуже, які правила полів мають інші елементи. Я вимагаю щонайменше 10 пікселів відступів над і під кожним моїм абзацом."


1
+1. Така ж логіка застосовується і поза CSS. Наприклад, у Microsoft Word, якщо після заголовка є поле 12px та 6px перед абзацом, якщо абзац слідує за заголовком, простір буде 12px, а не 18px.
Арсені Мурзенко

1
правильно - вони руйнуються - ХІБ вони не однакові на рівні купола. Наприклад, спробуйте просто
згорнути

1
Ви маєте на увазі "ХІБ що вони не знаходяться в рядку таблиці". Рядки таблиці не є елементами рівня блоку; вони мають деякі унікальні правила. Для отримання більш повного пояснення див. Stackoverflow.com/questions/136727/… .
VoteyDisciple

2
як щодо того, щоб додати і margin-topдля цього елемента?
Minh Nghĩa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.