Эта линия 'background-position' неоднозначна? - PullRequest
2 голосов
/ 25 марта 2012

I только что прочитал , что вам не разрешено смешивать значения, например: background-position: top 50%;

Однако я не уверен, что следующие строки неоднозначны:

background-position: 0 50%; //can the 0 be confused as 0px?
background-position: 0 50px; //can the 0 be confused as 0%?

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

Как вы думаете, это может произойти и что заставляет вас так думать?

Ответы [ 3 ]

6 голосов
/ 25 марта 2012

0px и 0% идентичны. Это как в физике - нет единиц к нулю, нет смысла говорить 0cm или 0in, просто ничего

3 голосов
/ 20 мая 2012

Вам разрешено комбинировать ключевые слова с процентными значениями или значениями длины в CSS2.1 ... но вы не были в CSS2 (я имею в виду, CSS 2.0).Это должно быть источником путаницы.

Из W3C CSS2.0 в background-position

Значение: [[* |] {1,2} |[[вверх |центр |дно] ||[левый |центр |правильно]]] |наследовать
(...)
Значения имеют следующие значения:
- бла
- бла
- верхний левый и левый верхний (и 2 десятка комбинаций ключевых слов) бла

Если указан только один процент или значение длины, он устанавливает только горизонтальную позицию,вертикальное положение будет 50%.
Если заданы два значения, горизонтальное положение идет первым.
Допускаются комбинации значений длины и процента (например, «50% 2 см»).
Допускаются отрицательные позиции.
Ключевые слова нельзя комбинировать с процентными значениями или значениями длины (все возможные комбинации приведены выше).

Из W3C CSS2.1 в фоновом режиме

Значение: [[ | |левый |центр |справа] [ | |верх |центр |низ ]?] |[[левый |центр |правильно] ||[вверх |центр |внизу]] |наследовать
(...)
Если указано только одно значение, второе значение считается 'center'.
Если хотя бы одно значение не является ключевым словом, то первое значениепредставляет горизонтальное положение, а второе представляет вертикальное положение.
Отрицательные значения и допускаются.

Сравнение

Если вы сравните возможные значения в CSS2.0 и CSS2.1, совершенно очевидно, что вы можете комбинировать (в процентах и ​​длине) ИЛИ (ключевые слова) и теперь можете комбинироватьлюбой из трех типов значений с любым из трех типов (OT: и вам всегда разрешалось использовать только 1 значение, второе - 50% / центр).

Жирный текст и отсутствиелюбой другой признак в CSS2.1 также подразумевает, что, когда у вас есть 2 значения, вы можете иметь 0, 1 или 2 ключевых слова, так что вы можете встретить, как браузер, случай, когда есть ровно 1 ключевое слово.

Из того, что я помню, я никогда не сталкивался с какими-либо проблемами с IE6 +, только с валидатором W3C ( jigsaw ), когда он проверялся по CSS2 по умолчанию или что-то в этом роде.
Валидатор CSS кажется довольнымbody { background-position : 40cm left; }

CSS2.1 была рекомендацией W3C в течение почти года (7 июня 2011 года), поэтому это не должно вызывать новых недоразумений.

1 голос
/ 19 мая 2012

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

  • первое значение обозначает горизонтальное положение
  • второе значение обозначает вертикальное положение

Там, где это может быть неоднозначным:

Если указано только одно значение, второе значение считается «центром» . источник

Имейте в виду, это не учитывает, какой тип устройства используется.Если указано только одно значение, другое значение по умолчанию всегда center.

Обратите внимание, что в это jsFiddle единственное предоставленное значение (top) строго для вертикального позиционирования, что делает другое значение (горизонтальное положение) center по умолчанию.И наоборот, как видно из этого jsFiddle , только указание left (значение строго для горизонтального позиционирования) сделает вертикальное положение center по умолчанию.Если указано только одно процентное значение или одно пиксельное значение , оно по умолчанию применяется к горизонтальному положению.

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

...