Условное выражение HTML больше не существует, и настоящая проблема заключается в том, как его заменить. JavaScript — это один из способов, но он не всегда уместен. CSS, зависящий от производителя, кажется, становится еще одним способом. но это беспорядок и вряд ли улучшение.
Конечно, точная стандартизация всегда приветствуется, но всегда существует проблема взлома старого кода, отказавшись от прошлых неосмотрительных действий в пользу точности стандартов — то есть, если вы сделаете это прямо сейчас, вы вполне можете сломать прошлый код, который зависит от того, что он сделал немного неправильно. Когда что-то является дополнением к стандарту, часто возникает соблазн позволить вещам ускользнуть и остаться такими, какие они есть. Не так с Microsoft и IE10.
В недавнем сообщении в блоге было обнаружено, что некоторые широко используемые устаревшие конструкции вот-вот будут отброшены. Наиболее важным является удаление поддержки условных выражений, которые вступают в силу, если ваш HTML-код содержит что-либо вроде:
другой HTML, который будет отображаться только в том случае, если браузер использует HTML
Условные выражения используются на многих страницах, чтобы учесть странное поведение прошлых браузеров, особенно IE6. Весь смысл условного выражения заключается в том, что он принимает форму действительного комментария HTML, который IE принимает во внимание как команду, тогда как другие рассматривают его как комментарий. Согласитесь, это хорошая конструкция и безопасный способ включения дополнительных функций.
Но если комментарии действительно что-то делают, это путь к безумию, и Microsoft собирается устранить их в IE10. Начиная с IE10, вы должны использовать более современный подход к обнаружению функций, а не к идентификации браузера.
Аргумент гласит, что это небольшая потеря, поскольку условные выражения будут по-прежнему работать в старых браузерах и в IE10 в устаревшем режиме — только не в собственном режиме IE10. Поскольку условные выражения в основном используются для устранения проблем со старыми браузерами, все должно работать должным образом. Однако не используйте условные выражения на любой странице, которая использовала HTML5 в качестве кратчайшего пути, чтобы избежать обнаружения функций и среды.
Так что все нормально. Что ж, есть одна небольшая проблема. В HTML5 нет условного выражения, которым его можно было бы заменить. Это небезосновательно, поскольку HTML — это просто язык разметки, и к тому же язык семантической разметки. У него не должно быть действий, поэтому условные обозначения отсутствуют.
К сожалению, это означает, что вам придется прибегать к JavaScript или чему-то еще на стороне сервера. Дело в том, что без условного средства в HTML5 у вас нет другого выбора, кроме как превратить простую задачу, переданную синтаксическому анализатору браузера, в такую, где теперь вам нужно написать активный код. Вы перешли от 100% HTML-решения к HTML + JavaScript — а что, если JavaScript отключен?
Альтернативой HTML + JavaScript является использование условного CSS, но это, скорее всего, означает использование свойств, зависящих от поставщика. Малоизвестный факт, что стандарты CSS могут быть расширены с помощью настраиваемых свойств, и это все еще законно. Все настраиваемые свойства начинаются с — и если браузер не распознает свойство, он игнорирует его. Так например:
-moz-граница-радиус
— это свойство, которое обрабатывается только в том случае, если браузер принадлежит к семейству Mozilla (браузеры на основе Gecko), и игнорируется в противном случае.
Подождите, разве это не тот же механизм, который только что был отброшен IE10 и HTML5 в целом? Итак, то, что плохо для HTML5, хорошо для CSS.
Более того, действительно ли вы смотрели на количество настраиваемых свойств CSS? Это растущий беспорядок, который сводит на нет идею обнаружения функций. См. Поддерживаемое количество экспериментальных функций — это не только беспорядок, это хрупкий беспорядок, предназначенный для того, чтобы веб-страницы выглядели глупо в будущих браузерах.
Это неприятно пахнет.
Простое условное выражение HTML, в котором использовались бы условия браузера или функции, было бы большим упрощением. Почему в HTML5 нет такой функции?
Потому что теоретическая чистота важнее практической простоты.
Дело не столько в том, что IE10 нужно терять условные выражения, сколько в HTML5, чтобы найти их.
Если вы хотите получать информацию о новых статьях на I Programmer, вы можете подписаться на нас в Twitter или Facebook или подписаться на нашу еженедельную рассылку.