Про змінних в css і абстракціях в веб-програмуванні

Змінні приходять в CSS. Вже сьогодні є конкретні реалізації, так що їх тепер не зупинити. У Firefox вони з'явилися у версії 29, а в Chrome їх можна використовувати без префіксів в версіях 29 і старше, якщо у вас в налаштуваннях включений прапор Enable experimental Web Platform features (в російській локалі «Включити експериментальні функції веб-платформи» - прим. Перекл .).

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

Передісторія

Нещодавно я робив виступ на Тему абстракцій в обчислювальних процесах. Якщо озирнутися в минуле, можна побачити кілька поворотних моментів, коли ми переводили абстракції на новий рівень. Від «одиниць і нулів» в машинному коді до асемблеру, потім компіляторам і їх абстракцій, завдяки яким ми отримали такі мови як C ++.

Час йде, і ми хочемо / очікуємо / потребуємо того, щоб веб-платформа робила більше. Нові можливості всегдадобавляются в браузери, але ніколи не видаляються оттуда². Ми захоплюємося цими можливостями і намагаємося повністю їх використовувати. Це робить створення веб-додатків більш складною справою. Але ми не любимо складності, тому що вони доставляють нам незручності в нашій роботі і знижують нашу ефективність.

Це триває вже досить давно, тому зараз ми робимо новий крок по сходах абстрагування. Абстракція - природний ворог складності, так що ми беремо її на озброєння, щоб спростити написання коду.

Найнеобхіднішої для нас абстракцією в Мережі було спрощення роботи з HTML. Було б неймовірно безглуздо працювати над веб-сайтом, кожна сторінка якого зберігалася б у вигляді повного HTML-документа, починаючи з і закінчуючи . який доводилося б редагувати безпосередньо. Тепер так ніхто не робить. Кінцеві HTML-документи складаються з шаблонів і фрагментів вмісту.

Останнім веб-мовою, який потребував абстракціях, є CSS. і вони прийшли в нього в формі препроцесорів. ВCSS занадто багато повторень, і він майже не дає інструментів для абстракцій. А препроцесори дають те, що було нам так необхідно, і цим серйозно допомагають нам.

Популярність

Чому ж така мова, як CSS. настільки популярний? Тому що він дуже простий. Селектори і пари ключ-значення. І все. Так, є маса всяких підводних каменів і тонкощів. Так, щоб стати справжнім фахівцем, знадобиться багато часу. Але в основі своїй ця мова дуже простий. Вам знадобиться десять секунд, щоб показати незнайомому з ним людині блок коду і пояснити, як це працює. Цього буде достатньо, щоб він все зрозумів.

Я переконаний в тому, що секрет успіху CSS в тому, що його синтаксис легко зрозуміти, вивчити і навчити йому інших. Так, його є, за що лаяти, але я думаю, що в початковий момент розробки CSS було прийнято вірні рішення.

ускладнення мови

Як і інші мови, з часом CSS розвивався. Як і вся веб-платформа, він отримував нові можливості. Джеремі Кіт вказав на те, що з появою @keyframes в CSS стався серйозний зрушення. Вперше з'явилася можливість писати CSS так, що він взагалі не матиме сенсу і може не працювати до тих пір, поки не з'явиться інший блок CSS.

Як говорить Джеремі:

Значить змінні CSS (або довільні властивості) не є першою тріщиною в стіні принципів, на яких грунтується CSS. Якщо користуватися іншої моєї метафорою, на слизьку доріжку він встав ще з появою @keyframes (а також, можливо, @ font-face).

Гарантій того, що фрагмент CSS обов'язково має хоч якийсь сенс, тепер немає.

CSS (сама мова) йде все далі по шляху перетворення в повністю програмований. Якщо змінні зручні, то ж стосується і циклів, хіба не так? Можна уявити собі майбутню версію CSS. в якій є стільки потужних можливостей мови програмування, що він уже не сприймається як той простий, легкий для сприйняття і розуміння мову, від якого він бере свій початок. А значить він позбавлений тієї простоти, завдяки якій до нього так легко було підступитися новачкові.

шар абстракції

Завдяки препроцесорів, таким як Sass. у нас і вівці цілі, і вовки ситі.

Не всі абстракції однаково корисні

Дозвольте мені в дусі перехресного блогінгу, знову відповісти Джеремі.

... не всяка абстракція хороша.

Він порівнює Sass і Haml і каже, що Sass - це добре, а Haml - погано. У цьому я з ним, здебільшого, згоден. Я трохи працював з Haml і ніколи не відчував особливих переваг від роботи з ним. Я щодня працюю з Sass. і від нього враження абсолютно протилежні. Тут є два моменти.

Кріс заявляє про те, що абстракції це, за визначенням, «добре».

Тут важливий контекст - «після закінчення певного часу». Коли настає момент, в який ми робимо черговий крок вгору по сходах абстрагування, завжди є кілька мов, які сперечаються між собою за те, хто займе місце в історії. Розробники намагаються обставити один одного (як ми бачимо зараз на ринку препроцесорів CSS), і з плином часу виявляється «переможець», якому належить основна «частка ринку», якщо цей термін тут застосуємо.

Переможець - це те саме «добре», так як свою перевагу він підтвердив на ділі. Ті, хто програв (ймовірно) були не настільки хорошими абстракціями.

Sass (або той, хто згодом стане переможцем) - це первинна абстракція для CSS.