CSS level 1 Спецификация

7    Спазване на CSS1

Браузър, който използват CSS1 при визуализирането на документи спазва CSS1 спецификацията, ако:

  • се опитва да намери всички цитирани(споменати) стилови листа и да ги предаде според тази спецификация
  • подрежда декларациите, в зависимост от каскадния им ред
  • изпълнява CSS1 функционалността в рамките на презентационния посредник(вижте определението по-долу).

Браузър, който визуализира CSS1 стилови листа, спазва CSS1 спецификацията, ако:

  • той визуализира валидни CSS1 стилови листа

Браузър, който използва CSS1, за да визуализира документи и CSS1 стилови листа, спазва CSS1 спецификацията, ако той задоволява и двата типа изисквания за спазване на CSS1.

Не е нужно браузъра да използва цялата функционалност на CSS1: той може да действа според CSS1, чрез употреба на основната функционалност. Тя се състои от цялата CSS1 спецификация, с изключение на тези части, които изрично са изключени. В текста на тази спецификация, тези части са маркирани с "CSS1 същина:", последвано от обяснение на това, което не попада в рамките на основната функционалност. Свойствата, които са изключени от основната функционалност на CSS1, се наричат CSS1 разширени свойства.

Тази глава дефинира единствено спазването на CSS1. Ще бъдат направени и други нива(версии) на CSS, които може да изискват от браузъра употреба на различни свойства, за да бъдат счетени за спазени.

Някои примери за ограничения на презентационния посредник са: ограничени ресурси(шрифтове, цвят) и ограничена разделителна способност(резолюция)(такава, че полетата да бъдат неточни). В тези случаи, браузъра може да постави нови, подобни на предишните стойности в стиловите листа. Също така, различните примери за потребителски интерфейси, могат да имат свой-собствени ограничения: например, VR браузър, може да премащабира документа, в зависимост на неговото "разстояние" от потребителя.

Браузърите могат да предлагат на читателите и допълнителни възможности за презентация. Например, браузъра може да предостави възможности за читателите с зрителни увреждания или може да предостави възможност за изключване на мигането.

Трябва да се отбележи, че CSS1 не задава всички аспекти на форматирането. Например, браузърът притежава свободата на избор върху алгоритъма на поставяне на разстояние между буквите.

Тази спецификация, също така препоръчва, но не изисква от браузъра да:

  • да позволява на потребителя да задава лични стилови листа
  • да позволява отделни стилови листа да бъдат включвани и изключвани

Горните правила за спазване описват единствено функционалността, но не и потребителския интерфейс.

7.1    Forward-compatible parsing

Тази спецификация дефинира CSS, ниво(версия) 1. Очакват се по-високи нива(версии) на CSS, които ще притежават допълнителни възможности и ще бъдат дефинира в бъдеще. За да бъде гарантирано, че браузърите, поддържащи единствено CSS1, ще могат да четат стилови листа, съдържащи свойства от по-горни нива на CSS, тази глава дефинира какво прави браузъра, когато срещне определени конструкции, които не са валидни в CSS, ниво 1.

  • декларация, която съдържа непознато свойство бива игнорирана. Например, ако стиловия лист е следния:
      H1 { color: red; rotation: 70deg }
    

    браузъра ще го третира сякаш стиловия лист е бил:

    H1 { color: red; }
    
  • невалидните стойности или тези, в които има невалидни части се третират сякаш въобще не са били декларирани:
    IMG { float: left }       /* CSS1 */
    IMG { float: left top }   /* "top" не е стойност на свойството 'float' */
    IMG { background: "red" } /* ключовите думи в CSS1 не може да бъдат поставяни в кавички */
    IMG { border-width: 3 }   /* трябва да бъде зададена мярка за стойностите за дължина */
    

    В горния пример, CSS1 парсера ще зачете първото правило и ще игнорира останалите, сякаш стиловия лист е бил следния:

    IMG { float: left }
    IMG { }
    IMG { }
    IMG { }
    

    Браузърите, действащи в съответствие с бъдещите CSS спефицикации могат да приемат едно или повече от другите правила също така.

  • невалидна @-ключова дума се игнорира, заедно с всичко, което следва след нея, до и включително следващия символ точка и запетая(;) или двойка фигурни скоби({...}), в зависимост от това, кое от двете се среща най-напред в кода. Нека вземем например следващия стилов лист:
    @three-dee {
      @background-lighting {
        azimuth: 30deg;
        elevation: 190deg;
      }
      H1 { color: red }
    }
    H1 {color: blue}
    

    '@three-dee' е невалидна декларация според CSS1. Следователно, цялото at-правило(до и включително с третата дясна(задваряща) фигурна скоба) се игнорира. Браузърът, спазващ CSS1 ще пропусне декларацията, като ще намали съдържанието на стиловия лист до:

    H1 {color: blue}
    

По-подробно:

CSS стилов лист, за която и да е версия(ниво) на CSS, се състои от списък с декларации. Съществуват два вида декларации: at-правила и групи от правила. В декларациите може да присъстват и символи за празно място(интервали, табулации, нови редове).

CSS стиловите листа често се вмъкват в HTML документите и един от най-уместните начини те да бъдат скрити от по-старите браузъри е, като те бъдат поставени в HTML коментари. Знаците за коментар в HTML "<!--" и "-->" може да се срещат преди, след и между декларациите. Около тях може да присъстват символи за празно място.

At-правилата започват с at-ключова дума, която представлява идентификатор, пред началото на който е поставен символа '@'(например: '@import', '@page'). Идентификаторът се състои от букви, числа, тирета и escaped символи(дефинирани по-долу).

At-правилото се състои от всичко до и включително следващия символ точка и запетая(;) или следващия блок(дефиниран накратко), в зависимост от това кое от двете се среща на по-предно място в кода. Браузър, спазващ CSS1, който срещне at-правило, което започва с at-ключова дума, различна от '@import' игнорира цялото правило и продължава предаването(парсирането) без него. Той също би игнорирал всяко at-правило, което започва с '@import', ако то не се среща в най-горната част на стиловия лист, т.е. ако е разположено след някакви правила, каквито и да са те(дори и игнорирани). Ето и пример.

Да предположим, че CSS1 парсера се сблъсква с този стилов лист:

@import "subs.css";
H1 { color: blue }
@import "list.css";

Според CSS1 втората декларация '@import' е невалидна. CSS1 парсера пропуска цялото at-правило, като съкратява стиловия лист и от него остава следното:

@import "subs.css";
H1 {color: blue}

Един блок започва с лява фигурна скоба({) и завършва със съответната дясна фигурна скоба(}). Между тях може се срещат всякакви символи, с изключение на това, че кръглите скоби(()), квадратните скоби([]) и кръглите скоби({}) трябва съответно да са групирани по двойки. Единичните(') и двойните(") кавички трябва също да са групирани по двойки и символите между тях се парсират като символен низ(стринг) (вижте т.н. tokenizer в приложение B за дефиниция на думата "стринг"). Ето и един примерен блок; трябва да се вземе в предвид, че дясната фигурна скоба между кавичките, не е от двойката, отговаряща на началната фигурна скоба на блока и, че втория единичен символен за кавички(') е затварящ символ и за това не попада в двойката на отварящия символ за кавички:

{ causta: "}" + ({7} * '\'') }

Една група от правила се състои от селектор, който представлява стринг, последван от блок с декларации. Стрингът-селектор се състои от всичко до(но не включително) първия символ фигурна скоба({). Ако групата от символи започва с стринг-селектор, който не е валиден CSS1, групата се пропуска.

Да вземем следния пример, при който CSS1 парсера се сблъсква със следния стилов лист:

H1 { color: blue }
P[align], UL { color: red; font-size: large }
P EM { font-weight: bold }

Вторият ред съдържа стринг-селектор, който не е валиден спрямо CSS1. Браузъра, спазващ CSS1 ще пропусне групата от правила, съкратявайки стиловия лист на следното:

H1 { color: blue }
P EM { font-weight: bold }

Един блок от декларации започва с лява фигурна скоба({) и завършва със съответната дясна фигурна скоба(}). Между тях се намира поредица от нула или повече декларации, разделени със символ точка и запетая(;).

Една декларация се състои от свойство, символ за двуеточие(:) и стойност. Около всеки от тези може да бъдат поставени символи за празно място. Както беше дефинирано по-рано свойството представлява идентификатор. В стойността може да се среща всеки символ, но кръглите скоби(()), квадратните скоби([]), фигурните скоби({}), единичния символ за кавички(') и двойните кавички(") трябва да бъдат групирани съответно по двойки. Кръглите, квадратните и фигурните скоби трябва да бъдат поставени(ако се налага) едни в други. Символите, намиращи се в кавички се парсират(предават) като стрингове.

За да се гарантира, че новите свойства и новите стойности за съществуващите свойства могат да бъдат добавени в бъдеще, браузъра трябва да пропусне декларация с невалидно име на свойството или невалидна стойност. Всяко CSS1 свойство има свой синтактични и семантични особености относно стойностите, които може да приема.

Например, да предположим, че CSS1 парсера се сблъсква със следния стилов лист:

H1 { color: red; font-style: 12pt }
P { color: blue;  font-vendor: any;  font-variant: small-caps }
EM EM { font-style: normal }

На втората декларация на първия ред е зададена невалидна стойност - '12pt'. Втората декларация на втория ред съдържа недефинирано свойство - 'font-vendor'. CSS1 парсерът ще пропусне тези декларации и ще съкрати стиловия лист, така че да остане следното:

H1 { color: red; }
P { color: blue;  font-variant: small-caps }
EM EM { font-style: normal }

Коментарите(вижте глава 1.7) могат да се срещат навсякъде, където може да се срещне символ за празно място и също се считат за символи за празно място. CSS1 дефинира допълнителни места, където може да се срещнат символи за празно място(като във вътрешни стойности) и употребата на коментари там също се разрешава.

Винаги са в сила следващите правила:

  • всички CSS стилови листа не различават малки и големи букви(т.е. са case-insensitive), с изключение на тези в частите, които не се контролират от CSS. В CSS1, например, имената на шрифтовите семейства и URL адресите може да правят разлика между малки и големи букви(да са case-sensitive). Също така т.н. case-sensitivity за атрибутите class и id се контролира от HTML[2].
  • в CSS1, селекторите(имената на елементите, класовете и ID-тата) могат да съдържат само символите a-z, 0-9 и Unicode символите от 161 до 255, включително и този за тире(-); те не могат да започват със символ за тире или цифра, те също така могат да съдържат затварящи символи и всякакви Unicode символи, представени като числов код(вижте следващия параграф).
  • символа за обратна наклонена черта(\), последван от максимум четири шестнадесетични цифри(0..9, A..F), замества Unicode символа със съответния номер.
  • всеки символ, с изключение на шестнадесетичните числа, може да бъде затварян, за да бъде премахнато неговото специално значение, чрез поставане на символа обратна наклонена черта(\) пред него. Например: "\"" е символен низ(стринг), съдържащ символ за двойни кавички(").
  • двата предишни параграфа дефинират затварянето на символи чрез символа обратна наклонена черта(\). Този тип затваряне винаги се счита за част от идентификатор, с изключение на вътрешните стрингове(например "\7B" не е пунктуация, въпреки, че "{" е, и употребата на "\32" в началото на името на клас се разрешава, въпреки, че употребата на цифрата "2" не се разрешева).

Забележка: Атрибутът class в HTML позволява употребата на повече символи в дадено име на клас, от колкото са позволени за селектори по-горе. В CSS1, тези символи трябва да бъдат затваряни или написани чрез Unicode числа: "B&W?" може да бъде написано като "B\&W\?" или "B\26W\3F", "κουρος" (от гр. "kouros") трябва да бъде написано по следния начин: "\3BA\3BF\3C5\3C1\3BF\3C2". Очаква се, че в по-късните версии на CSS, директно ще могат да бъдат въвеждани повече символи.

В приложение B е описана граматиката на CSS1.