вторник, 22 июля 2008 г.

Advanced Conditional Comments in IE

Я тут задумал кое о чем вам рассказать, но в процессе экспериментов натолкнулся на несколько интересных и не очень известных мелочей, о коих, собственно, расcкажу в первую очередь. Заодно мне памятка будет. Этот пост посвящен первой такой мелочи — условным комментариям в Internet Explorer.

Каждый может открыть MSDN и прочитать об условных комменттариях. Если коротко, то там их приведено аж целых два типа:

downlevel-hidden<!--[if expression]> HTML <![endif]-->
downlevel-revealed<![if expression]> HTML <![endif]>
Первый валиден, пригоден только для IE, т.к. остальные браузеры воспринимают эту строку как комментарий. Второй невалиден и, поэтому не очень интересен.

И вот возникает у верстальщика желание сделать так, чтобы кусок html был виден всем, кроме IE. И чтоб валидно. Дочитать указанную страницу до конца многие не осиливают (а там есть решение) и начинают искать. Погуглив, многие натыкаются на конструкцию вида <!--[if !IE]>--> HTML <!--<![endif]--> описанную много где. Ну и гордо её применяют. Типа и валидатор сыт, и верстальщик цел. А потом, как-нибудь появляется необходимость заверстать кусочек так, чтоб видели все, кроме младших версий IE. И если сочинить условие <!--[if gte IE 7]>--> HTML <!--<![endif]-->, то моментально выясняется, что кусочек --> отлично отображается как текст. Так вот, правильный комментарий без посторонних эффектов это (смотрите внимательно, разница в два символа) —

<!--[if gte IE 7]><!--> HTML <!--<![endif]-->

Этот HTML увидят все версии IE >= 7, все немайкрософтовые браузеры, и валидатор W3C тоже увидит.

На закуску. Кстати, майкрософт забыл описать ещё одно условие — [if VML]. Это означает поддержку VML в IE. Подразумевалось, что IE5 поставлялся без VML и потом докачивал, при необходимости, подержку VML с сайта майкрософта.