Использование vw
, em
& amp; сотрудничество. работает наверняка, но imo всегда нуждается в прикосновении человека для тонкой настройки.
Вот сценарий, который я только что написал на основе @ tnt-rox ' answer , который пытается автоматизировать этот touch:
$('#controller').click(function(){
$('h2').each(function(){
var
$el = $(this),
max = $el.get(0),
el = null
;
max =
max
? max.offsetWidth
: 320
;
$el.css({
'font-size': '1em',
'display': 'inline',
});
el = $el.get(0);
el.get_float = function(){
var
fs = 0
;
if (this.style && this.style.fontSize) {
fs = parseFloat(this.style.fontSize.replace( /([\d\.]+)em/g, '$1' ));
}
return fs;
};
el.bigger = function(){
this.style.fontSize = (this.get_float() +0.1) +'em';
};
while ( el.offsetWidth < max ) {
el.bigger();
}
// finishing touch.
$el.css({
'font-size': ((el.get_float() -0.1) +'em'),
'line-height': 'normal',
'display': '',
});
}); // end of ( each )
}); // end of ( font scaling test )
div {
width: 50%;
background-color: tomato;
font-family: 'Arial';
}
h2 {
white-space: nowrap;
}
h2:nth-child(2) {
font-style: italic;
}
Lorem ipsum dolor
Test String
Sweet Concatenation
Font Scaling
В основном уменьшает размер шрифта до 1em
, а затем начинает увеличиваться на 0,1 до он достигает максимальной ширины.
Текущий Селекторный рабочий уровень 4-го уровня отлично справляется с описанием Специфика в CSS:
Специфичность сравнивается путем сравнения трех компонентов по порядку: специфичность с большим значением A является более конкретным; если два значения A привязаны, то специфика с большим значением B более конкретна; если оба значения B также связаны, то специфика с большим значением c более специфична; если все значения привязаны, эти два значения равны.
Это означает, что значения A, B и C полностью независимы друг от друга.
15 классов не дает вашему селектору показатель специфичности 150, он дает значение B 15. Одно значение A достаточно для того, чтобы одолеть это.
В качестве метафоры представьте себе семью из 1 родителя, 1 родителя и 1 ребенка. Это можно представить в виде 1,1,1 . Если у родителя 15 детей, это не делает их еще одним родителем ( 1,2,0 ). Это означает, что у родителя намного больше ответственности, чем у одного ребенка ( 1,1,15 ). ;)
В той же документации также говорится:
Из-за ограничений хранилища реализации могут иметь ограничения на размер A , B или c . Если это так, значения, превышающие предел, должны быть зажаты до этого предела, а не переполнения.
Это было добавлено для решения проблемы, представленной в ответе Фауста , в результате чего реализация CSS в 2012 году позволила перечислить значения специфичности друг другу.
Еще в 2012 году большинство браузеров реализовало ограничение в 255, но это ограничение было разрешено переполнением. 255 классов имели A, B, c показатель специфичности 0,255,0 , но 256 классов переполнены и имели оценку A, B, c из 1,0,0 . Внезапно наше значение B стало нашим значением A . Документация Уровни 4-го уровня полностью облучает эту проблему, заявляя, что предел никогда не может быть переполнен. С этой реализацией оба 255 и 256 классов имели бы ту же A, B, c оценку 0,255,0 .
Проблема, поставленная в ответе Фауста, с тех пор была исправлена в большинстве современных браузеров.
В настоящее время я использую книгу CSS Mastery: Advanced Web Standards Solutions .
В главе 1, стр. 16 говорится:
Чтобы вычислить как конкретное правило, каждому типу селектора присваивается числовое значение. Специфика правила затем вычисляется путем суммирования значения каждого из его селекторов. К сожалению, специфика не вычисляется в базе 10, а в высоком, неуказанном, базовом числе. Это делается для того, чтобы очень специфичный селектор, такой как селектор идентификаторов, никогда не был переопределен множеством менее специфических селекторов, таких как селектор типов.
(выделение мое) и
Специфика селектора разбивается на четыре составляющих уровня: a, b, c и d.
- , если стиль является встроенным, тогда a = 1
- b = общее количество селекторов id
- c = число классов, псевдокласса и селекторов атрибутов
- d = число типов селекторов и селекторов псевдоэлементов
Далее говорится, что вы можете часто делать вычисления в базе 10, но только в том случае, если все столбцы имеют значения меньше 10.
В ваших примерах идентификаторы не стоят 100 баллов; каждый из них стоит
[0, 1, 0, 0]
очков. Следовательно, один id превосходит 15 классов, потому что[0, 1, 0, 0]
больше, чем[0, 0, 15, 0]
в системе с высоким номером.
Я не верю, что объяснение блога верно. Спецификация здесь:
http://www.w3.org/TR/CSS2/cascade.html#specificity
«Точки» из селектор классов не может быть более важным, чем селектор «id». Это просто не работает.
Я увлекаюсь сравнением ранжирования спецификаций с таблицей медалей Олимпийских игр (первый метод золота основан на количестве золотых медалей, затем серебряных, а затем и бронзовых).
Он также работает с вашим вопросом (огромное количество селекторов в одной группе специфичности). Специфичность рассматривалась каждой группой отдельно. В реальном мире я редко видел случай с более чем дюжиной селекторов).
Здесь также имеется неплохой калькулятор специфичности здесь . Вы можете поместить свой пример (#a и .a .b .c .d .e .f .g .h .i .j .k .l .m .n .o) и увидеть результаты.
Пример таблицы медалей Олимпийских игр в Рио-2016 выглядит как
Я бы сказал, что:
Element < Class < ID
Я думаю, что они складываются только в зависимости от того, что вы получаете, если оно кратно тому же. Таким образом, класс всегда будет переопределять элемент и идентификатор всегда над классом, но если он относится к одному из четырех элементов, где 3 - синим, а 1 - красным, он будет синим.
Например:
.a .b .c .d .e .f .g .h .i .j .k .l
{
color: red;
}
.m .n .o
{
color blue;
}
Должно получиться красным.
См. Пример http://jsfiddle.net/RWFWq/
", если Vings скажем, красный и 3 говорят, что синий колодец Има пойдет красным "
Хороший вопрос.
Я не могу точно сказать - все статьи, которые мне удалось найти, избегают примера нескольких классов, например. здесь - но я предполагаю, что когда дело доходит до сравнения спецификации между селектором классов и идентификатором , класс вычисляется только с значением 15
, независимо от того,
Это соответствует моему опыту в том, как себя ведет себя.
Однако должен быть некоторой укладкой классов, потому что
.a .b .c .d .e .f .g .h .i .j .k .l .m .n .o
более специфичен, чем
.o
, единственное, что у меня есть, это то, что специфика стековых классов вычисляется только друг против друга, но не против идентификаторов.
Update : Я на полпути получаю это сейчас. Это не система баллов, а информация о классах весом 15 баллов неверна. Это система нумерации на 4 части, очень хорошо объясненная здесь здесь .
Исходной точкой является 4 цифры:
style id class element
0, 0, 0, 0
Согласно пояснению W3C по специфичности , значения специфичности для вышеупомянутых правил:
#a 0,1,0,0 = 100
classes 0,0,15,0 = ... see the comments
Это система нумерации с очень большой (неопределенной?) базой.
Я понимаю, что, поскольку база очень большая, число в столбце 4 не может бить число > 0 в столбце 3, то же самое для столбца 2, столбец 1 .... Правильно ли это?
Мне было бы интересно, сможет ли кто-нибудь с лучшим пониманием в Math, чем я, объяснить систему нумерации и как преобразовать его в десятичный, когда отдельные элементы больше 9.