07.08.2008 12:42

  1. Vika

    0 ↑
    0 ↓
    Опера от кон-коментария

    <![if gte ie 7]>
    ........
    <![endif]>

    оставляет 2 правые угловые кавычки ">>".
    Это не есть хорошо.
    Мне нужно спрятать код от только ИЕ6 и ниже
  2. Вообще там немного другой формат условных комментариев.

    <!--[if lt IE 7]>
    <link rel="stylesheet" type="text/css" href="css/ie6.css"/>
    <![endif]-->
    

    А спрятать код от ие6 и ниже просто:

    #wrap > #header {min-height: 100px}
    

    Такую конструкцию поймет ие7 + safari/ff/opera, но не ие<=6

  3. Vika

    0 ↑
    0 ↓
    Извиняюсь, но мне нужно спрятать часть НТМЛ кода на странице только от ИЕ6, но для ИЕ7-8, FF, NN, и других код должен быть открытым.
    А ваш вариант только для семейства ИЕ, т.к. для других браузеров этот НТМЛ код будет закомментирован.

    Межпрочь, я комент и брала из самого логова
    См. разделы:
    "Downlevel-revealed Conditional Comments"
    "Detecting Firefox"

    Sampl:
    <![if !IE]>
    ...statements...
    <![endif]>

    Так как же спрятать в опере скобки в HTML коде страницы.
  4. Vika

    0 ↑
    0 ↓
    В принципе, я уже знаю, как спрятать часть кода. Все предельно просто.


    Но Опера все - равно не корректно реагирует на "<! ..>".
    И значит есть такой в Опере баг. Увы!

  5. LongMan

    0 ↑
    0 ↓

    И значит есть такой в Опере баг. Увы!

    Так значит, в опере есть баг, суть которого заключается в том, что она не предусматривает IE ugly hacks? Даже не знаю, «увы» ли это :-)

  6. Vika

    0 ↑
    0 ↓
    Но ведь "Conditional comment" - это не хак, а скорее фича браузера для обратной совместимости и для кросс-совместимости.

    Угловые скобки - это НТМЛ семантика. Причем здесь ИЕ?
    Опера единственный браузер из многих мною опробованных, который оставляет правые угловые скобки от любого тега типо "<!..>".

    Значит таки "Увы" остается.
  7. Vika

    0 ↑
    0 ↓
    Выяснила.
    Кому интересно, сообщаю, что можно использовать следующую конструкцию:

    <!—[if gte ie 7]><—>
    ........

    <!—><![endif]—>
    Контент виден всем браузерам, кроме ИЕ3...6
  8. А, если не секрет, зачем вам скрывать часть HTML-кода от ие<=6?

    Почему нельзя было просто сделать для него * html .please-no-ie6 {display: none}?

  9. Vika

    0 ↑
    0 ↓
    Да! Именно так можно и очень даже нормально. Это и есть то "предельно просто", о чем я говорила выше.
    Причина в другом
    1. редизайн и время

    2. Если очень упрощенно - Есть правила .mystyl1 div {..}; .mystyl1 div img{..} etc.
    <div class="mystyl1">
    <div>content <img .../> <img .../>
    </div></div>

    Поэтому, если скрывать стилем код от ИЕ6, то НТМЛ будет выглядеть так:

    <div class="mystyl1">
    <div class="please-no-ie6">
    <div>content
    </div></div></div>

    но это уже нарушит каскад. А пересыпать всю таблицу и искать баги потом из-за этого участка кода на странице нет времени

    Хотя пост об Опере :-)
  10. Вика

    0 ↑
    0 ↓
    Признаюсь, я не права.
    Можно и нужно
    <div class="mystyl1">
    <div class="mystyl2 please-no-ie6">content <img .../> <img .../>
    </div></div>
  11. Хотя пост об Опере :-)

    Кстати об Опере.

    Если я не ошибаюсь, то microsoft в той же спецификации комментарии делит на три типа:

    • просто комментарии, <!-- imma cool one comment -->
    • условные комментарии, <!--[if IE]>...<![endif]-->, которые все равно являются обыкновенными html-комментариями
    • downlevel-revealed, <![if expression]> HTML <![endif]>

    В самом первом посте вы начинали именно с третьего типа комментариев. А вот что про них пишут сами парни из microsoft:

    The downlevel-revealed conditional comment enables you to include content in browsers that do not recognize conditional comments. Although the conditional comment itself is ignored, the HTML content inside it is not. Internet Explorer 5 and later versions also parse and render the content if the conditional expression evaluates to true.

    А вот о том, как и почему они должны бы работать:

    When comparing this type of comment to the basic HTML Comment, notice that there are no hyphens ("--") immediately after the opening "<!" or immediately before the closing ">" of the comment block; therefore, the comment delimiters are treated as unrecognized HTML. Because the browser does not recognize the downlevel-revealed conditional comment, it does nothing with it.

    Такие "комментарии" не являются html-комментариями и не проходят валидацию. Как я понял основная надежда таких комментариев на то, что браузер встретив <!>, но не найдя так нужных для комментария -- обидится и не станет отображать этот "тег", но не его содержимое.

    Зато ie поступит немного по-другому, он ведь не очень обидчивый, и разберется с выражением внутри такого "комментария".

    Так что, наверное, это все-таки не баг, а фича Оперы :-)

  12. Баг Оперы, наверное, все таки в том, что встретив конструкцию <!..>, она показывает закрывающую >. Это если я правильно Вику понял.

  13. Ага. Я тут провел небольшое расследование.

    Firefox в dom такие вот штуки <![if gte ie 7]> считает комментарием. И он прав: это наследие sgml.

    A comment declaration starts with <!, followed by zero or more comments, followed by >. A comment starts and ends with "--", and does not contain any occurrence of "--".

    Вот только в html 5 с комментариями поступили немного по другому.

    Comments must start with the four character sequence...(<!--)

    А вот что у нас в changelog'е opera 9.0 beta 1, а если быть точнее, то с 8303:

    Removed support for SGML comments in HTML. Comment parsing is now based on the Web Applications 1.0 draft.

    Так что это все-таки не баг, а фича — поддержка комментариев по новым стандартам.

  14. С этими комментариями, кстати, есть интересная история...

    Одно время версии Mozilla (по настоянию Hixie) использовали в стандартном режиме именно честную по SGML интерпретацию комментариев. Однако это ломало раскладку во многих местах. Например здесь слово "комментарий" уже из комментария выпадало.

    <!--
    это -- комментарий
    -->
    

    Потом Hixie сказал: "я был неправ", и в Mozilla включили обработку комментариев "как на практике". Сейчас в HTML5 именно это и зашито.

    Но баг в Опере, мне кажется, в другом. Раз <!..> не воспринимается, как комментарий, то это должно считаться просто незнакомым тегом. И баг в том, что она рисует закрывающий > от него.

  15. Вика, а можно конкретный test-case и версию Оперы?

    У меня был следующий документ в standarts/quirks mode(переключал doctype-ом):

    <html>
    <head>
      <title>test</title>
    </head>
    <body>
    <p>
    <![if gte ie 7]>
    only ff/safari/ie7
    <![endif]>
    </p>
    <p>
        <! somewhere i belong >
    </p>
    </body>
    </html>
    

    Тестировал в opera 9.26, 9.51 win.

    Нигде никаких лишних угловых скобочек замечено не было. Точно также корректно оно работает в ff3, safari3, ie7.

  16. Вика

    0 ↑
    0 ↓
    Ух!
    Сколько интересного вы сообщили, а на работе Мэтры ничего такого не знают и не рассказывают ... :-(


    Опера:
    Версия 9.26
    Сборка 8835
    Платформа Win32
    Система Windows XP
    Java Sun Java Runtime Environment version 1.4

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <![if gte ie 7]> 
    <div class="bullAuge">
    <div><img ../><img ../></div>
    <div><img ../><img ../></div>
    .....
    </div>
    <![endif]>


    Cобсно можно было обернуть <div class="bullAuge"> еще одним блоком с display:none для ИЕ6. И так в будущем буду поступать.
    Но конструкцию

    <!—[if gte ie 7]><—>
    ........
    
    <!—><![endif]—>


    оставила на странице,как мемориал!!

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.