2013-06-27 3 views
13

В проекте я работаю я определил много правил, как это:Что делает трюк CSS + + html?

* + html { 
    /.../ 
} 

Я знаю, что * и + делать, но я не понимаю, какой смысл иметь эту конструкцию?

Я также заметил это:

* html { 
    /.../ 
} 

я не мог найти место, где применяются эти.

AFAIK html уникален для каждой страницы, так почему бы не просто использовать селектор html? Это какая-то магия?

+8

[Это конечно!] (Http://www.youtube.com/watch?v=NLxN0wpFoP8) * Темная магия Microsoft * –

ответ

14

Это хаки CSS для Internet Explorer.

Больше информации здесь: http://dimox.net/personal-css-hacks-for-ie6-ie7-ie8/

+1

Дополнительная информация в поддержку этого ответа: тестовый пример для сравнения некоторых из этих хаков: http: // www.bongard.net/tools/css-hack-testfile/ – Arkana

+0

@ Andy '* html' - это взлом IE 6, который рассказал об IE 7? – feeela

12

Согласно W3C Selectors definition, то "E + F" определяется как:

Соответствует любому элементу F непосредственно предшествует родственного элемента Е.

Вы упомянули код:

* + html

Это должно соответствовать тегу html сразу после любого другого элемента. Но элемент html - это первый элемент (корневой элемент) html-страницы. Таким образом, перед тегом html нет элемента (т. Е. HTML-тега), это правило не соответствует ни одному элементу.

По крайней мере, для любого браузера, который правильно реализует стандарт. «Проблема» заключается в том, что IE7 не реализует ее правильно и применяет правила.

Другими словами, это CSS-хак для IE7.

Другим способом было бы использовать условные комментарии: «Является ли это какая-то магия»

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

НТН

+2

Аминь к условным комментариям. * Чуть менее темная магия Microsoft * –

+0

+1 Спасибо за этот полезный ответ; см. также [HTML5 Boilerplate] (http://html5boilerplate.com/) для получения дополнительных примеров использования условных комментариев в качестве переключателя браузера: https://github.com/h5bp/html5-boilerplate/blob/master/index.html – feeela