Трябва да разберете условните коментари на IE в шаблона на HTML5

Не можах да разбера едно място в условните коментари на IE в HTML5 шаблона. Става въпрос за тази част:

<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->

Следващите два случая са доста ясни,

  1. в случаите на IE6/7, условието "if gt IE 8" е FALSE, така че извежда <!-- -->;
  2. в случаи на не-IE, "[if gt IE8]" и "[endif]" не се разпознават, следователно "<!--[if gt IE 8]><!-->" и "<!--<![endif]-->" са стандартни HTML коментари. Така че извежда <html class="no-js">;

Това, което ме обърква, е случаят с IE9. В случай на IE9 условието "if gt IE 8" е TRUE, така че извежда тялото на условието на IE:

<!--> <html class="no-js"> <!--
  1. <!--> е празен коментар;
  2. <html class="no-js"> е обикновен HTML изход;

Но какво да кажем за края "<!--"? Как се процедира? Според мен този начален таг за коментар ще превърне всичко след него в коментари, докато не срещне краен таг „-->“. Не е ли това огромен проблем?

Но никога не съм виждал някой да разпитва за това. Значи пропускам нещо? Може ли някой да ми обясни това? Всяка помощ се оценява.


person dikko2000    schedule 29.08.2013    source източник
comment
<!--> не е празен HTML коментар. Празен коментар ще има четири знака минус.   -  person Mr Lister    schedule 29.08.2013
comment
Листър: тогава как мислите, че IE9 анализира ‹!--› ‹html class=no-js› ‹!-- ?   -  person dikko2000    schedule 29.08.2013
comment
Имп. Забележка: MS отказа поддръжката на условни коментари, започвайки от IE 10. Повече подробности тук   -  person RBT    schedule 01.05.2017


Отговори (2)


В случай на IE9 условието "if gt IE 8" е ВЯРНО

Наистина - това, което се случва, е, че коментарът се счита за такъв от други версии на IE:

<!--[if not my version]>
    Remove/ignore everything
<![endif]-->

Или просто:

""

За IE9 условните коментари се третират като всеки друг коментар:

<!--[if gt IE 8]><!-->
    <html class="no-js"> 
<!--<![endif]-->

Т.е. (разглобените) първи и последен ред сами по себе си са пълни коментари

<!--[if gt IE 8]><!-->
^ start of a comment
    ^.............^ content not relevant
                   ^ end of a comment - first occurrence of `-->`

Следователно браузърът (било то IE9+ или не-internet explorer) вижда само:

<html class="no-js">
person AD7six    schedule 08.10.2013

Не мога да посоча каквато и да е действителна препратка за това как ги анализират (CC винаги е бил оскъдно документиран) и не мога да си спомня кой е измислил този модел, но IE не се предава <!--> <html class="no-js"> <!-- предава се само <html class="no-js"> Той комбинира всеки пълен, валиден блок за коментари като начало и край на условните коментари.

Ето един пример, който показва, че не е преминал отворен коментар

http://htmlcssjavascript.com/samples/cc.html

<!--[if IE 8]>        <p>IE8</p> <![endif]-->
<!--[if gt IE 8]><!--> <p>IE9+</p> <!--<![endif]-->
Not an open comment
-->

Това извежда....

"IE9+

Не е отворен коментар -->"

в IE9. Ако остави коментар отворен, разбира се, битът „Не е отворен коментар“ ще изчезне.

person roblarsen    schedule 30.08.2013
comment
Съжалявам, че си играх с него, след като го тествах. Ще се върна към оригиналния пример. - person roblarsen; 30.08.2013
comment
Всъщност, като се замислих, измислих различен начин да илюстрирам какво се случва. - person roblarsen; 30.08.2013