Оператор var foo;
объявляет переменную foo
и устанавливает ее значение неопределенным , если оно уже не имеет значения . Ваш foo
имеет значение, поскольку var foo;
на самом деле ничего не делает.
Если вы удалите foo function
и замените его простой переменной, вы увидите то же поведение.
Браузер не определяет стиль для всех элементов, просто определенные. Упрощенная таблица стилей внутреннего браузера могла бы быть похожей на это:
a { color: blue; border-bottom: 1px solid blue }
p { margin-bottom: 1em; }
blockquote { margin: 0 5em 1em 5em; }
Возьмите следующий отрывок HTML как пример:
<ul>
<li>
<span>Blah blah blah.</span>
</li>
<li>
<a href="about:">Foo</a>
</li>
</ul>
Когда браузер переходит к рендерингу <span>
элемент, это смотрит, просматривает все таблицы стилей (браузер, автор и пользователь) для правил, которые соответствуют, и выясняет, какой является самым важным. Для этого примера таблица стилей автора содержит единственное правило:
ul { color: Green; }
Внутренняя таблица стилей Вашего браузера не указывает a color
значение для span
, таким образом, это идет по дереву документов, пока это не находит что-то, что действительно имеет a color
определенное правило, в этом случае ul
.
С другой стороны, когда браузер представляет <a>
элемент, это ничего не находит в таблицах стилей пользователя или автора, указывающих a color
, таким образом, это использует правило, найденное в таблице стилей браузера.
Конечный результат: Зеленый текст, синяя ссылка.
Информация о премии: при использовании Firefox можно просмотреть (один из) его внутренние файлы CSS путем вставки resource://gre/res/html.css
в строку поиска. (Кажется, что прямая гиперссылка путает механизм скидки с цены SO),
Вы правы. Существует три источника таблиц стилей. Сначала приезжайте стили браузера, затем пользователь (читатель) стили и наконец стили автора; стили автора обычно превосходят стили пользователя. Что-либо определенное в таблице стилей по умолчанию браузера будет переопределено, если стиль будет определен позже в расположении каскадом (в таблице стилей пользователя или автора), который влияет на него. Если существует что-то, чтобы быть наследованным из-за стиля, записанного автором затем, он переопределяет стили по умолчанию, так как он был определен позже в расположении каскадом.
Пойдите сюда для больше на расположении каскадом.
Встроенные стили игнорирования, которые отвергают все, если несколько классов/селекторов применимы к элементу страницы, тот, определенный в последний раз, побеждают (так как стили браузера определяются сначала, они обычно перезаписываются). Протест прибывает, когда существует класс/селектор, который выполняет развертку через все уровни иерархии.
Вот лист в качестве примера:
<style type="text/css">
#content
{
width: auto;
}
#content DIV.special
{
width: 200px;
background: #999999;
border: 2px dotted #000000;
}
#content DIV
{
width: 300px;
border: 1px solid #CCCCCC;
}
</style>
Учитывая следующий HTML:
<div id="content">
<div class="special">
should render 200px wide with a gray background and a dotted border
</div>
<div>
should render 300px wide with a 1pt border
</div>
</div>
Затем если Вы добавляете этот стиль к нижней части листа:
DIV
{
background: #CC9999;
}
Вы повернете все светло-фиолетовый (так как это - последний DIV со значением цвета) за исключением отделения с .special классом (потому что это более конкретно).
Надежда, которая помогает.
Наследование стилей элементов от их родителей может появиться два пути. Во-первых, в то время как браузеры могут определить свойства стиля для каждого элемента, они обычно не делают так исчерпывающе. Так, например, "p" элемент обычно имеет верхнее поле по умолчанию (среди других), но не определяет стиль шрифта так, чтобы, в отсутствие правил автора или пользователя, был наследован от его родителя. Во-вторых, каждый может в некоторых местах в CSS использовать явное значение, "наследовались", чтобы дать рендереру команду принимать то свойство стиля от своего родителя. Это раньше было необходимо в местах в IE (ячейки таблицы, я думаю), и продолжает быть так при переопределении более ранних правил в каскаде.
Поскольку я понимаю вопрос, Вы задаетесь вопросом о том, когда нестилизованный элемент возьмет стиль, определенный в таблице стилей браузера по сравнению с тем, когда это возьмет стиль своего родителя. Это - на самом деле вопрос о специфике, не наследование. Возьмите этот чрезмерно очевидный и упрощенный пример:
Лист браузера
a { color: blue }
Лист автора страницы
div { color: green }
HTML
<div><a href="#">This is a link</a></div>
Как Вы ожидали бы, ссылка будет синей, не зеленой, потому что правило браузера более конкретно. Это не имеет никакого отношения к наследованию, потому что ссылка никогда не имеет шанс наследоваться. Приоритет для потоков стиля элемента:
Главная причина, что стили браузера не препятствуют тому, чтобы родительские стили были наследованы, состоит в том, что стили браузера обычно очень редки и определяют вещи как цвет, размер шрифта, и т.д. максимально высоко дерево DOM для создания их легкими переопределить. Если бы у Вас был браузер, который определил, скажем, цвет для элементов промежутка, то Вы могли бы хорошо столкнуться с проблемами, пытающимися заставить универсальный цвет отделения наследоваться.