понимание унаследованного CSS currentColor
мне было любопытно, о currentColor и как он ведет себя, когда это унаследовала и / или используется в других свойствах. Другим аспектом является пропуск значения цвета в свойстве border -, например, которое должно по умолчанию иметь цвет текста.
.outer {
color: #f90;
border: 5px solid;
box-shadow: 0 0 15px;
text-shadow: 2px 2px 3px;
}
<div class="outer">
Outer Div
</div>
ничего необычного в приведенном выше фрагменте.
Тени и граница того же цвета, что и текст.
теперь наследуют цвет:
.outer {
color: #f90;
border: 5px solid;
box-shadow: 0 0 15px;
text-shadow: 2px 2px 3px;
}
.inner {
color: lime;
display: inline-block;
border: inherit;
box-shadow: inherit;
}
<div class="outer">
Outer Div
<div class="inner">
Inner Div no CurrentColor
</div>
</div>
Resutls:
в IE11 & Chrome 43 только цвет текста-лайм.
В Firefox 38 С другой стороны, тени тоже зеленые. (обратите внимание не на границу)
при активной настройке всего на currentColor браузеры показывают тот же результат, отображая только текст в lime и все остальное в orange. (Как вы можете видеть в последнем фрагменте на снизу)
/**
* playing with currentColor
*/
body {background: darkgray;} /* friendly wink */
.outer {
width: 85%;
color: #f90;
border: 5px solid;
box-shadow: 0 0 15px;
text-shadow: 2px 2px 3px;
padding: 15px; margin: 15px;
}
.outer.currentColor {
border: 5px solid;
box-shadow: 0 0 15px currentColor;
text-shadow: 2px 2px 3px currentColor;
}
.inner {
color: lime;
display: inline-block;
border: inherit;
box-shadow: inherit;
}
.inner.resetting {
border-color: currentColor;
/* text-shadow-color: currentColor; /* does not exist */
/* box-shadow-color: currentColor; /* does not exist */
}
<div class="outer">
Outer Div
<div class="inner">
Inner Div no CurrentColor
</div>
</div>
<div class="outer currentColor">
Outer Div
<div class="inner">
Inner Div with CurrentColor
</div>
<div class="inner resetting">
Inner Div with CurrentColor
</div>
</div>
вопросы:
- почему существует разница с границей в Firefox при опущении currentColor
- почему наследование не использовать значение цвета на том же элементе?
- есть ли способ использовать те же свойства и переключать цвет? (для цвета границы есть, как вы можете видеть в Примере, сбросив это)
вот также ссылка dabblet, если вы хотите поиграть с ним:
http://dabblet.com/gist/587ea745c7cda7a906ee
2 ответов
Итак, несколько вещей здесь:
-
рабочая группа CSS согласилась изменить значение currentColor между уровнем цвета CSS 3 и уровнем цвета CSS 4. В (определением от текст-тень просто указывает на box-shadow).
- почему есть разница с границей в Firefox при опущении currentColor
спецификации CSS для наследования на text-shadow говорят, что он должен наследовать .inner
currentColor
если он сам находится в inherit
, но box-shadow не указан и выглядит так, как браузеры несовместимы с реализацией. Возможная ошибка.
- почему наследование не использует значение цвета в той же элемент?
похоже, он наследует вычисляемые значение, а не введенное. Пример:
.outer {
color:red;
box-shadow: 2px 2px 2px; /* color omitted */
}
.inner {
box-shadow: inherit;
/* translates to:
box-shadow: 2px 2px 2px red; */
}
как я уже сказал, это некорректная реализация.
- есть ли способ использовать те же свойства и переключать цвет? (для цвета границы есть, как вы можете видеть в Примере, сбросив его)
как насчет явного дублирования не наследуют? Это дайте вам лучший результат, не приводя к SASS / LESS, imo.
.outer {
color: #f90;
}
.outer, .inner {
border: 5px solid;
box-shadow: 0 0 15px;
text-shadow: 2px 2px 3px;
}
.inner {
color: lime;
display: inline-block;
}
<div class="outer">
Outer Div
<div class="inner">
Inner Div no CurrentColor
</div>
</div>