"[! IE]" условные комментарии в Haml - PullRequest
30 голосов
/ 02 февраля 2012

В документе HAML у меня есть:

/[if IE]
  This is IE
/[if !IE]
  This is not IE

Первое условное вычисление правильно выполняется в IE (и, вероятно, в Firefox и Chrome, поскольку «Это IE» не отображается в этих браузерах).Тем не менее, второе условие не выглядит должным образом в Firefox или Chrome, так как «Это не IE» не отображается.

Я предполагаю, что я сделал что-то не так.Есть идеи?

Ответы [ 4 ]

92 голосов
/ 03 февраля 2012

При использовании условных комментариев в IE необходимо учитывать два разных типа.Во-первых, когда весь контент находится внутри HTML-комментария (от <!-- до -->), но IE будет читать его из-за условия:

<!--[if IE]>
  This is inside a HTML comment, so most browsers will ignore it, but IE will
  interpret it.
<![endif]-->

Другой тип - not один комментарий, но некоторый контент, который увидят браузеры, в окружении двух комментариев, которые заставят IE его игнорировать:

<!--[if !IE]> -->
  This is not a HTML comment, so browsers should see it, but IE will ignore it.
<!-- <![endif]-->

(Подсветка кода SO показывает разницу - в верхнем все серое, какэто все комментарии, но в этом текст темнее, поскольку это не комментарий).

Поддержка Haml для условных комментариев IE полезна только для создания первого вида, так какчасть синтаксиса для создания блочных комментариев.Если вы попытаетесь использовать его для второго типа (как у вас здесь), вы получите что-то вроде:

<!--[if !IE]>
  This is inside a HTML comment, so other browsers will ignore it.
  IE will also ignore it, as the conditional states !IE.
  So everything ignores it.
<![endif]-->

, что фактически является безусловным комментарием.

Для использования [if !IE]введите Haml, вам, вероятно, придется сделать это вручную:

%p Some other content
<!--[if !IE]> -->
%p
  Here's some content that shouldn't appear in IE.
<!-- <![endif]-->

Вы также можете использовать Haml surround helper , например:

%p Some other content
=surround '<!--[if !IE]> -->', '<!-- <![endif]-->' do
  %p
    Here's some content that shouldn't appear in IE.

(Если вы используете Rails, вам нужно будет использовать html_safe в строках, то есть surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do).

Если вы используете это много, это может стоитьсоздание вспомогательного метода, который переносит этот вызов на surround.

1 голос
/ 06 октября 2015

Ответ получен, но для тех, кто ищет версию TL; DR :

/[if IE]
  This will only be rendered in IE

/[if lte IE 8]
  This will only be rendered in IE 8 or less

= surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do
  This will only be rendered in NON-IE browsers.
1 голос
/ 07 апреля 2015

для списка условий:

!!!
:plain
  <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--><!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"><![endif]--><!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> <!--[if IE 9]><html class="no-js lt-ie10" lang="en"> <![endif]--> <!--[if gt IE 9]><!-->
%html.no-js{:lang => 'en'}
  / <![endif]

  %head
    %title Yinlang
0 голосов
/ 01 ноября 2014

Я работаю с приложением rails и обнаружил небольшую проблему, следуя предложению @matt в своем ответе. Я нашел следующие проблемы:

HAML

!!!
= surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do
  %html.no-js{:lang => 'en'}
  %head
  %body

Вот как работает браузервизуализировать HTML (без конечного тега в самом конце и добавить его при объявлении самой строки)

<!DOCTYPE html>
<!--[if !IE]> --><html class='no-js' lang='en'></html>
<head>..</head>
<body>..</body>

Итак, вот код, который отлично работает для меня.

!!!
:plain
  <!--[if !IE]><!-->
%html.no-js{:lang => 'en'}
  / <![endif]
...