Оценивать выражение css только в IE <7 без использования условных комментариев? - PullRequest
2 голосов
/ 29 октября 2008

Я уже знаю: "Не используйте выражения CSS!" Мой вопрос не в том, должен ли я использовать выражение или есть альтернатива; у меня простой вопрос: Могу ли я получить выражение css для оценки только в версиях IE до версии 7 без использования условных комментариев?

Иногда я использую хак с подчеркиванием, чтобы скрыть правило от IE7, но IE7, похоже, все равно оценивает выражения. Например, _width:700px; игнорируется IE7, но _width:expression('700px'); все еще оценивается.

Я знаю, что кто-то попытается сказать мне, чтобы я использовал условный комментарий для включения правила, но я ищу способ сделать это, не помещая одно правило стиля в отдельный файл.

Примечание для тех из вас, кто все еще не хочет отпускать это: я решил использовать выражение css, но я не сделал это так легко. Я понимаю последствия и использую выражение, которое оценивается только один раз. Перестань беспокоиться о моих плохих решениях и просто ответь уже на вопрос ...; -)

Ответы [ 5 ]

3 голосов
/ 29 октября 2008

Я всегда использую звездочку "взломать" специально для IE6, но для этого требуется, чтобы ваш браузер был в режиме , соответствующем стандартам (см. Ниже).

/* IE6 only */   
* html .myClass {
    width: 500px;
}

Мне это нравится, потому что он не основан на разборе несоответствий в браузерах и проверяется в соответствии с W3C .

Что касается режима соответствия стандартам, вы всегда должны добавлять действительный DOCTYPE на свои страницы, так как это приводит к уменьшению количества ошибок CSS и особенностей браузера. Чтобы узнать о режиме совместимости и стандартах, ознакомьтесь с этой статьей .

Вы можете использовать этот пример ниже, чтобы поиграться с выражениями в каждом браузере. Я протестировал его в FF, IE6 и IE7, и он работал как положено. Я только хотел бы, чтобы SO имел подсветку синтаксиса для распознавания CSS-выражений и пометки их как красных, чтобы вы могли напомнить, что они злые. Могу я спросить, почему вы решили использовать CSS-выражения? Многие люди пытаются использовать их для достижения минимальной ширины в IE6, но это не правильное решение. Если вы пытаетесь решить эту проблему, я написал ответ в отдельном вопросе , демонстрирующий правильное решение CSS для минимальной ширины в IE6.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <style type="text/css">

        .ie6 {
            display: none;
        }

        * html .ie6 {
            display: expression("block");
        }

        * html .ie7 {
            display: expression("none");
        }

    </style>
</head>
<body>
<div class="ie6">
    This is IE6
</div>
<div class="ie7">
    This is Firefox or IE7+
</div>
</body>
</html>
2 голосов
/ 09 сентября 2011

Вам не нужно использовать условные комментарии для добавления нового файла. Вы можете легко добавить условный комментарий, чтобы добавить класс к тегу body, следующим образом:

<!--[if lte IE 7]>
<body class="ie7">
<![endif]-->
<!--[if gt IE 7]>-->
<body>
<!--<![endif]-->

Тогда в вашем CSS вы можете просто определить другой стиль для IE7 для любого понравившегося вам элемента:

#content {
    width:720px;
}

.ie7 #content {
    width:700px;
}

Вы по-прежнему загружаете ту же таблицу стилей, но можете стилизовать элементы на основе их браузера.

Вы могли бы даже расширить это, чтобы иметь разные стили для браузеров IE6, 7 и не IE.

1 голос
/ 29 октября 2008

Раньше я использовал! Важный, чтобы браузеры, отличные от других, использовали другой стиль, но затем IE7 начал поддерживать его. Я обнаружил, что IE7 будет применять стиль, помеченный! Ie-only (или что-то не очень важное), и другие браузеры будут игнорировать стиль, поскольку они этого не распознают.

Если вам нужны три разных стиля, это может сработать, но не очень, если вы хотите придерживаться стандартов. (обычно я не пробую смесь! Важных и! Только для того, чтобы иметь! Только для того.)

#myDiv {
  height: 3.0em !important; /* non-ie */
  height: 2.6em !ie-only; /* ie7 */
  height: 2.4em; /* ie < 7 */
}
1 голос
/ 29 октября 2008

Вы можете попробовать Селектор Рафаэля Лимы . Он использует Javascript, но вы можете делать такие вещи, как:

.ie6 .myClass {}
.ie7 .myClass {}
.ie .myClass{}
0 голосов
/ 29 октября 2008

Этот ответ может быть тем, что вы ищете: Встроенный CSS IE взломать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...