hasLayout
Для отображения элементов и учёта их взаимодействия между собой, разработчики IE внедрили в этот браузер уникальное свойство hasLayout, значением которого выступает true или false. «Установить hasLayout» означает задать ему значение true, а «убрать hasLayout» говорит о том, что это свойство не задано или у него значение false.
Напрямую задать это свойство через стили невозможно, потому что оно разрабатывалось для внутренних целей, фактически в CSS его нет. Но можно это сделать косвенно, причём у некоторых элементов оно уже стоит по умолчанию, а у других нет.
Элементы, у которых всегда установлено свойство hasLayout:
- изображения (тег <img>);
- таблицы (<table>), их строки (<tr>) и ячейки (<td>, <th>);
- линии (<hr>);
- структурные элементы (<html>, <body>);
- фреймы (<frameset>, <frame>, <iframe>);
- некоторые элементы форм (<button>, <fieldset>, <input>, <legend>, <select>, <textarea>);
- объекты (<embed>, <object>) и апплеты (<applet>);
- тег <marquee>.
hasLayout устанавливается автоматически, если для элемента задано одно из следующих свойств и значений:
- display: inline-block;
- position: absolute;
- float: left | right;
- width: любое значение кроме auto;
- height: любое значение кроме auto;
- writing-mode: tb-rl
- zoom: 1.
В IE7 кроме перечисленных свойств hasLayout устанавливают следующие:
- position: fixed;
- overflow: hidden | scroll | auto;
- overflow-x: hidden | scroll | auto;
- overflow-y: hidden | scroll | auto;
- min-width: любое значение кроме auto;
- max-width: любое значение кроме auto;
- min-height: любое значение кроме auto;
- max-height: любое значение кроме auto.
Убрать hasLayout можно добавлением к элементу одного из следующих свойств и значений:
- position: static;
- float: none
- width: auto;
- height: auto;
- overflow: visible;
- writing-mode: lr-tb | rl-tb | bt-rl;
- zoom: normal.
Свойство hasLayout оказывает следующее воздействие на элементы веб-страницы.
- Вызывает проблемы с плавающими элементами.
- Отменяет схлопывание отступов.
- Приводит к различным проблемам при отображении списков.
- Увеличивает использования памяти из-за того, что браузеру приходится проделывать больше операций по вычислению размеров и положения элементов.
- Высота слоя независимо от установленного значения height подстраивается под контент.
Пример
HTML5CSS2.1IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Ассортиментная политика</title>
<style>
.shadow {
background: #fc0;
padding: 10px;
filter: progid:DXImageTransform.Microsoft.dropshadow
(OffX=5, OffY=5, Color='gray', Positive='true');
zoom: 1; /* Добавляем hasLayout */
}
</style>
</head>
<body>
<div class="shadow">
Ассортиментная политика предприятия подсознательно концентрирует
конвергентный конкурент, учитывая результат предыдущих медиа-кампаний.
</div>
</body>
</html>
В данном примере чтобы работало свойство filter в IE6 и в IE7, добавлено zoom которое устанавливает hasLayout.
Браузеры
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
6.0+ | 8.0+ |
Краткая информация
CSS 1 | CSS 2 | CSS 2.1 | CSS 3 |
---|---|---|---|