Заметки веб-работника
25 октября 2006

Internet Explorer 7, что изменилось в поведении браузера?

Наконец свершилось то, чего веб-общественность ожидала долгих 5 лет. 18 октября 2006 года состоялся официальный релиз седьмой версии Internet Explorer. Свежий браузер от Microsoft обладает целым рядом новых особенностей, среди которых стоит упомянуть расширенные средства безопасности, переработанный интерфейс с поддержкой табов, антифишинговый фильтр, возможность читать RSS-потоки, улучшенный режим предпросмотра печати страниц и невысокую скорость работы.

Но веб-работников, конечно, в первую очередь волнует, что же изменилось в поведении браузера, и как теперь обстоят дела с поддержкой веб-стандартов. За интересующей информацией не лишним будет обратиться к блогу разработчиков IE. Что я собственно и сделал. Ниже предлагаю краткое изложение по теме.

Особенности CSS в IE7

На пути к веб-стандартам новый Internet Explorer сделал более 200 шагов, именно столько поведенческих изменений и новых возможностей приобрел браузер. Однако сразу же необходимо отметить, что для совместимости со старыми версиями все эти нововведения (кроме поддержки полупрозрачных PNG) будут доступны только в режиме Strict Mode. А значит те веб-работники, кто не «злоупотреблял» стандартизацией, а в частности, объявлениями типа документа (<!DOCTYPE...>) могут спать спокойно – в новом проводнике их сайты точно не развалятся, чего нельзя с уверенностью сказать о сайтах, гордо помеченных иконками вроде Valid XHTML 1.0!. Однако, перейдем к сути.

Списки исправленных ошибок

Исправлено большинство недоразумений, упомянутых на сайте PositionIsEverything.net:

Среди исправленных багов важно упомянуть также следующие:

  • Переполнение (overflow) теперь работает корректно!
  • Ошибки парсера: * html, _property и /**/, исправлены.
  • Элемент Select теперь дружит с CSS.
  • Auto-size для абсолютно позиционированных элементов с width:auto (полезно для 3-х колоночной верстки).
  • Ошибки, относящиеся к относительному позиционированию, исправлены.
  • Ошибки, относящиеся к абсолютному позиционированию, исправлены.
  • Ошибки в расчете % для ширины/высоты у абсолютно позиционированных элементов исправлены.
  • <?xml>-пролог больше не переводит браузер в режим Quirks Mode.
  • Теперь элемент html действительно независим от элемента body (имеет собственную ширину, высоту и т.д.).
  • border:1px dotted больше не отображается как dashed.
  • margin-bottom баг: неприятности при наведении больше не ожидаются.
  • Проблемы, связанные с отрицательными отступами, решены.
  • Проблемы, связанные с относительным позиционированием и отрицательными отступами, решены.
  • Атрибут CLSID тега <object> больше не ограничен 128 символами.
  • Ошибки парсера с :first-letter, описанные здесь, исправлены.
  • Комбинации c селекторами теперь работают должным образом.
  • :first-line и :first-letter теперь работают и в случае отсутствия пробела перед открывающейся фигурной скобкой {.
  • Псевдоклассы теперь работают как ожидается.
  • :link теперь работает и для тега <a>, ссылающегося на закладку.
  • Проблемы, связанные с !important, решены.
  • Страница piefecta-rigid.htm с сайта PositionIsEverything.net теперь отображается корректно.
  • Решена проблема с пустым пространством в пунктах списка.
  • При вычислении размера и местоположения для абсолютно позиционированных элементов теперь всегда берется правильный контейнер. В частности решена проблема, описанная здесь.
  • Вложенные блочные элементы теперь признают все предписания в случае переполнения (hidden, scroll и т.д.).
  • Теги <a>, помещенные внутрь li-элементов, больше не добавляют лишний нижний отступ при наведении.
  • При обновлении страницы пропорции изображения больше не теряются.
  • Индент-парсинг приведен в соответствие с CSS 2.1.
  • Исправлены ошибки в парсинге комбинаций class-селекторов, а также комбинаций class-селекторов с id-селекторами.
  • ...

Список существующих реализаций, расширенных в соответствии со спецификациями W3C

  • Динамический псевдокласс :hover теперь применим ко всем элементам, а не только к тегу <a>.
  • background-attachment: fixed теперь применим ко всем элементам – таким образом пример Эрика Мейера работает.
  • Улучшена нейтрализация ошибок элемента <object>.

Список новых возможностей

  • Добавлена поддержка min/max-width/height (также для изображений, чего не было в IE7b2).
  • Добавлена поддержка прозрачных (transparent) границ.
  • Добавлена поддержка fixed-позиционирования.
  • Добавлена поддержка мульти-класс селекторов (.class1.class2).
  • Добавлена поддержка псевдокласса :first-child.
  • Добавлены следующие селекторы и правила CSS 2.1:
    • Селекторы дочерних элементов: E > F
    • Смежные селекторы-родственники: E + F
    • Селекторы атрибутов:

    • [attr]
    • [attr="value"]
    • [attr~="value"]
    • [attr|="value"]
  • Добавлены следующие селекторы и правила CSS 3:
    • Общие селекторы-родственники: E ~ F
    • Селекторы атрибутов:

    • [attr^="value"]
    • [attr$="value"]
    • [attr*="value"]
  • Поддержка альфа-канала в PNG-изображениях (не имеет отношение к CSS, но, тем не менее, важная новость для веб-работников).

Из наблюдений по горячим следам

В заключении хотел бы поделиться некоторыми оперативными наблюдениями.

Во-первых, как я уже говорил, все нововведения в CSS для IE7 будут доступны только в режиме Strict Mode. А это значит, для того чтобы ими воспользоваться, необходимо html-страницы снабдить «Doctype-переключателем» – объявлением типа документа, к примеру, <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">. Если же по какой-то причине мы хотим, чтобы эта декларация была видна только IE7 (например, для того чтобы сохранить преимущества Quirks Mode для проводников от Microsoft предыдущих версий), то, похоже, самый простой способ сделать это – воспользоваться условным комментарием. Конструкция вида:

<!--[if IE 7]>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<![endif]-->
спрячет декларацию от остальных браузеров.

Во-вторых, не могу не отметить довольно странный подход, а точнее даже небрежность разработчиков IE в вопросе исправления ошибок парсинга. Ошибок, которые играют не последнюю роль в проблеме совместимости, так как порождают целые методики и отдельные приемы, широко применяемые в кроссбраузерной верстке.

В частности, удивительно, что была исправлена ошибка _property: value, но почему-то осталось нетронутым и продолжает работать в обоих режимах не менее популярное *property: value. Как в прочем успешно функционирует и целое семейство идентичность хаков:

   @property: value;
   !property: value;
   +property: value;
   …

Не пришлось бы в будущем, по примеру Mozilla, использовать еще и третий Almost Strict режим.



_______

Вы можете оставить свой отзыв по данной статье:

  Имя
  E-mail (не публикуется)
  Веб-сайт

Комментарий (Теги форматирования не поддерживаются)