Як CSS обробляє помилки - CSS-LIVE
Як CSS обробляє помилки
CSS спочатку було створено дуже поблажливим до помилок. Коли браузер натикається на щось незрозуміле в CSS-файлі, він відчуває мінімальне "здивування", а потім продовжує, як ні в чому не бувало.
І тому є важлива причина. Ми знаємо, щоCSS буде розширюватися з часом, до нього додаватимуться нові властивості, нові значення та інші новинки. "Нові" речі виглядають точно як "невалідні" для старих браузерів, так що, якщо вам потрібно, щоб мова акуратно обробляв новинки, вам доведеться оснастити його "розумною" обробкою помилок.
Якщо браузер намагається розібрати стильове правило і натикається на щось дивне, він відкидає все правило, потім промотує вперед, поки не знайде закінчений блок<>.
Якщо браузер намагається розібрати@-правило і зустрічає щось дивне, він робить і те, й інше - відкидає все@-правило, потім промотує вперед, поки не знайде або цілий блок<>, або точку з комою, що не лежить у блоці<>,[] або() (оскільки @-правила зустрічаються як у вигляді блоків, типу@media, так і в однорядковому вигляді, типу@import ).
Ця поведінка, що захищає від помилок, ігнорує фрагмент таблиці стилів, досить маленький для того, щоб не дозволити одній помилці (або новій функції) зруйнувати в мотлох відображення всієї сторінки, але досить великий для того, щоб поведінка була передбачуваною і дружньою.
Чи могло бути інакше?
Наприклад, припустимо, що ми змінили поведінку, що вона почала ігнорувати менший фрагмент таблиці стилів — якщо помилка всередині функції, вона ігнорує лише цю функцію. Тоді код на кшталт цього:
Поведінка, яка є у нас зараз, все ж таки незавжди буває ідеальним - наприклад, воно означає, що у випадку правила з кількома селекторами через кому, один з яких не розпізнається, відкидається все правило. Через це дуже важко користуватися експериментальними селекторами або селекторами з вендорським префіксом, оскільки доводиться розтягувати селектори за кількома правилами замість одного і повторювати вміст правила кілька разів. Мабуть, краще було б виправити це просто відкидати один селектор. На жаль, безліч сторінок вже залежить від цієї поведінки (або випадково, або навмисно використовуючи безглуздий селектор з вендорським префіксом, щоб правило працювало тільки в одному браузері), тому навряд чи ми зможемо це змінити.