hasLayout


Internet Explorer Chrome Opera Safari Firefox Android iOS
 6.0+ 8.0+

Краткая информация

CSS 1 CSS 2 CSS 2.1 CSS 3

Описание

Для отображения элементов и учёта их взаимодействия между собой, разработчики 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.

Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.