Понимание интервала между буквами CSS: допустимо ли заменять значение normal по умолчанию на 0?

#html #css #letter-spacing

#HTML #css #интервал между буквами

Вопрос:

Согласно этой странице, свойство CSS letter-spacing имеет значение по умолчанию normal.

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

Наиболее важный момент, на который следует обратить внимание при использовании интервала между буквами, заключается в том, что указанное значение не изменяет значение по умолчанию, оно добавляется к интервалу по умолчанию, применяемому браузером (на основе показателей шрифта). Межбуквенный интервал также поддерживает отрицательные значения, которые улучшат внешний вид текста, а не ослабят его.

Согласно этому определению, 0 должно быть эквивалентно значению по умолчанию для normal, поскольку 0 X = X.

1) Допустимо ли использовать 0 в качестве замены значения по умолчанию для normal? (Это для реализации слайдера.)

2) Почему значение по умолчанию не является 0? Зачем вводить другое значение (т.Е. normal)?

Этот тест в CodePen также предполагает, что значение 0 действительно эквивалентно значению по умолчанию normal.

 .loose {
  letter-spacing: 2px;
}

.tight {
  letter-spacing: -1px;
}

.zero {
  letter-spacing: 0;
}

.normal {
  letter-spacing: normal;
}  
 <p>This type has no additional letter-spacing applied.</p>

<p class="loose">This type is letter-spaced loosely at <code>2px</code>.</p>

<p class="tight">This type is letter-spaced tightly at <code>-1px</code></p>

<p class="zero">This type is letter-spaced at <code>0</code></p>

<p class="normal">This type is letter-spaced at <code>normal</code></p>  

Комментарии:

1. Почему голоса за закрытие?

2. w3.org/TR/css-text-3/#letter-spacing-property : normal Дополнительный интервал не применяется. Вычисляется до нуля. — Это просто значение ключевого слова

3. @Pete итак, вы говорите, что normal и 0 эквивалентны, верно?

4. Я предполагаю, что это так, поскольку это последняя опубликованная версия css text module 3 и в ней не упоминается пользовательский агент — drafts.csswg.org/css-values/#keywords

Ответ №1:

Нет, оба они не точно эквивалентны. Если вы проверите текущую спецификацию

Нормальный

Интервал — это обычный интервал для текущего шрифта. Это значение позволяет агенту пользователя изменять интервал между символами для выравнивания текста.

Затем

<length>

Это значение указывает на межсимвольный пробел в дополнение к пробелу по умолчанию между символами. Значения могут быть отрицательными, но могут существовать ограничения, зависящие от конкретной реализации. Пользовательские агенты не могут дополнительно увеличивать или уменьшать межсимвольный интервал для выравнивания текста.

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


Определение в проекте следующего уровня, похоже, немного изменилось, и оба теперь одинаковы.

По устаревшим причинам вычисленный интервал между буквами, равный нулю, дает разрешенное значение (возвращаемое значение getComputedStyle()) normal ..

Вы также можете прочитать здесь: https://github.com/w3c/csswg-drafts/issues/1484

CSS2 раньше обрабатывал normal иначе, чем 0, поэтому требовались другие вычисления. Теперь, когда спецификация обрабатывает их одинаково…


Я не знаю, все ли браузеры уже реализуют этот уровень, но вы, скорее всего, можете считать их одинаковыми

Комментарии:

1. итак, в CSS2 оно отличается только для text-align: justify

2. @gsnedders да, это может отличаться от justify (необязательно). К сожалению, я не могу это доказать, я пытаюсь найти, могу ли я получить рабочий пример, чтобы показать это различие.

Ответ №2:

Согласно документам Mozzila: https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing#Values

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

Похоже, что 0 установить его по умолчанию более сложно. Значение Normal может быть изменено агентом пользователя.