Всем привет! Давно хотел и наконец написал небольшую книжку — бодрое пособие по своей профессиональной области: актуальным подходам к разметке интерфейсов, экранному дизайну и доступности. Она о моем оригинальном подходе к созданию GUI, препроцессорам CSS (для объективности, немного и об альтернативных подходах), и его эффективном практическом использовании с javascript и популярными реактивными компонентными фреймворками Vue и React. Материал представлен аккуратно последовательно, но безумно интенсивно и динамично — ничего лишнего или даже слишком подробного — для того чтобы увлеченный и подготовленный читатель не потерял интереса и «проглотил на одном дыхании». С другой стороны, текст, достаточно сложный ближе к концу, и на всем протяжении — густо насыщенный идеями, ссылками на технологии и подходы — поэтому, очевидно, будет «на вырост» начинающим. Но, в любом случае, как и если вы только начали интересоваться данной тематикой, так и если уже давно занимаетесь веб-дизайном, версткой и программированием фронтенда — вам может быть полезно на него взглянуть.
Мотивация
Я уже много лет занимаюсь, прежде всего, разметкой интерфейсов, их оформлением и поведением, экранами и GUI. Участвовал на позиции верстальщика в небольших командах, стартапах, а также реализовал некоторое количество проектов самостоятельно как фрилансер, дизайнер и верстальщик. За это время я накопил некоторый опыт по специфическим проблемам в данной области, которым мне очень хочется поделиться.
Начну с некоторого огульно обобщающего и, поэтому, несколько провокационного наблюдения, «вброса»: большинство, не только начинающих, но даже опытных программистов испытывают своеобразное предубеждение-стереотип о некой «несерьезности» верстки интерфейса как отрасли деятельности в веб-индустрии — «верстка это не программирование!». Очень многие считают что заниматься разметкой «некруто и скучно» для «серьезного» специалиста. И как следствие — уделяют предмету мало своего внимания и времени, имеют мало реального релевантного опыта. Проще говоря, большинство разработчиков не любит и не умеет верстать. И уже и как причина и как следствие — зачастую сами подходы, технологии и архитектура используемые для организации GUI даже на серьезных коммерческих проектах — отставляют желать лучшего, не отвечают реалиям современной веб-индустрии, устарели и недостаточно эффективны. Неудачные, якобы временные, слабые решения и дальнейшие бесконечные быстрые «фиксы», кривые «кряки» наслаиваются друг-на-друга, кодовая база неоправданно распухает и становится все менее связной и контролируемой. Шаблоны, или ныне — в эру компонентных фреймворков — компоненты, стили и логика для них часто и закономерно превращаются в невнятную и крайне излишнюю по сути «свалку», «густой лес», «джунгли» с очевидно неподъемной ценой рефакторинга и масштабирования. Очевидно, что такое состояние системы может легко приводить к серьезным затруднениям, снижению темпов или даже срыву сроков и, ирония как раз в том, что в реальной коммерческой ситуации, авторам подобной громоздкой и неуклюжей системы, все равно придется потратить еще больше времени на то, чтобы, по крайней мере, исправить все оплошности и несовершенства разметки, оформления и логики для них, но делать это придется в изначально плохо организованном коде, по замкнутому кругу — только увеличивая беспорядок и вероятность сбоев. С того момента как вы перестаете быть «джуном», ваша ответственность состоит не только в том чтобы закрыть все «баги» на трекере и навернуть как можно скорее «фичи», любой ценой. Надежная и легко поддерживаемая система — продукт который вы продаете бизнесу.
Реальный жизненный кейс: будучи начинающим специалистом я работал удаленно в одном приятном стартапе. Когда проект запустили, после презентации многие присутствовавшие на ней высказались о том, что кегль основного текста и полей ввода в интерфейсе — мелковат. Получив задачу в трекере, я потратил всего пару минут, поправив одну переменную своей системы — чтобы поднять кегль на всех нужных полях и контролах, и еще 15 минут чтобы удостовериться что ничего действительно не сломалось ни на одном шаблоне. Ваша система изначально должна быть написана так, и только так, чтобы ее было можно легко скорректировать и улучшить, поддерживать и расширять. По-настоящему лаконичный и выразительный качественный код — невероятно мощно экономит время и нервы даже если вы работаете с проектом в одиночку. Кроме того, уважаемые авторитеты в коммерческом программировании утверждают [см. Роберт Мартин — «Чистая архитектура»] что «то что сделано изначально плохо» — в реальности, не только «никогда не будет переписано», но и приводит к постоянному крутому росту стоимости дальнейшей доставки нового функционала, а в перспективе способно полностью блокировать прогресс по проекту!
Хорошее понимание возможностей и ограничений современных браузерных технологий очень желательно и полезно не только для веб-разработчиков, но и для гуманитариев-дизайнеров проектирующих GUI. Часто даже востребованный специалист, выдающий приятный стиль и не делающих серьезных ошибок по UХ, не может внятно ответить на простейшие технические вопросы о своем дизайне при сдаче макета на верстку, то есть — «не понимает что рисует».
В этом пособии я стараюсь в достаточно доступной форме дать некоторые полезные идеи о современном экранном дизайне и эффективных способах его реализации для браузера. Я буду приводить конкретные примеры кода, но не ради специфических моментов и подробностей реализации, а, прежде всего, иллюстрируя и подчеркивая общие мысли, идеи, практические подходы, годные для написания крупных сложных современных проектов. Этот текст — не еще один занудный скучный учебник, а, скорее, «методичка углубленного спецкурса». Материал будет подаваться максимально интенсивно и насыщенно, и новичок может не справиться сходу с примерами кода или даже содержанием некоторых разделов. Не паникуйте. Важнее всего в нашей отрасли — научиться развиваться самостоятельно в выбранном направлении. Этот текст скорее призван помочь вам понять «что гуглить дальше?».
Кому будет полезен текст?
Начинающим. Вы минимально освоились со спецификациями HTML и CSS, начали пробовать JavaScript, успешно сверстали свои первые страницы, макеты и «хотите большего», хотите получить некий «дружеский пинок под зад», который поможет вам осознать дальнейшие горизонты, выйти на новый уровень и начать получать больше удовольствия и удовлетворения, как и от самой этой деятельности, так и от ее результатов.
Не верстающим как бог. Вы давно занимаетесь веб-программированием, но верстаете «нехотя и по-старинке», при этом, осознаете свой пробел в знаниях и навыках, созрели для того чтобы отбросить оковы лени и невежества, переломить ситуацию — ведь на каждом проекте разработка GUI для вас это скучная трудная рутина и мука.
Дизайнерам. Вы веб-дизайнер, но хотите начать верстать.
Эта работа о программировании дизайна и дизайне программных продуктов для фронтенда. Стоит иметь ввиду, что она написана, скорее, веб-дизайнером для веб-программистов, чем веб-программистом для веб-дизайнеров, хотя это и неточно. Я решил разделить текст на две части:
Препроцессор
В первой части представлена мощная практическая метода, дающая яркие идеи и четкие рекомендации по организации разработки стилей и разметки. Материал выбран таким образом, чтобы последовательно, но с крутой интенсивностью ввести, возможно даже, только еще минимально овладевшего HTML и CSS читателя, в мир удивительных возможностей препроцессора. Хочется показать, как можно стремительно организовать рабочую кухню, необходимую и достаточную для того чтобы эффективно создавать качественную адаптивную разметку. В этой части почти ничего не говорится о самом javascript, для того, чтобы, если читатель не освоил еще в достаточной степени язык программирования, но уже начал верстать — все равно смог бы все понять и начать внедрять на практике.
Препроцессор, JavaScript и фреймворки
Вторая часть не такая злая. Она, например, показывает в увлекательной форме некоторые углубленные интересные кейсы современного экранного дизайна и вопросов связанных с доступностью веб-приложений. В ней речь идет о практическом применении подходов к препроцессору представленных в первой части, в связке с javascript для GUI, особенно в контексте компонентных фреймворков.
Левон Гамбарян.
Июнь 2020 года.
Препроцессор
Простейший пример плохого кода
Безобразного кода с каждым днем становится все больше, несмотря на то, что больнее всего страдают от этого сами авторы, горе-разработчики. И если определенную функциональность или рендер можно покрыть тестами, то ошибки оформления выявляются только «ручками».
Также, просто парадоксально, что все программисты слышали о простых основополагающих принципах качественного программирования KISS и SOLID, но подавляющее большинство напрочь забывает о них, когда речь заходит об организации оформления, представления веб-интерфейса.
В реальной ситуации — заказчик, покупатель вашего кода в любой момент может захотеть внести любые правки, и вы должны быть максимально к этому готовы.
Давайте посмотрим на самый простейший пример плохого кода на CSS:
/* Примитивнейший пример обычного плохого кода на CSS */
/* Где-нибудь в файлах стилей: */
.selector--1 {
width: 200px;
height: 200px;
border: 1px solid #ADADAD;
border-radius: 3px;
/* ... и дальше еще огромное количество самых разных правил */
}
.selector--2 {
width: 200px;
height: 400px;
border: 1px solid #ADADAD;
border-radius: 3px;
/* ... и дальше еще огромное количество самых разных правил */
}
Не делайте так больше почти никогда! ))) Почему? Код валидный, «в браузере все по макету», да и все именно так обычно и пишут. Но все и не «верстают как бог», правильно? В контексте любого проекта чуть большего чем совсем крохотный, подобный код «плохой и чреват проблемами в будущем». Он конкретен и невыразителен, излишен, его сложно модифицировать и переиспользовать.
А как надо?
На сегодняшний день стандартной практикой для разработки CSS-кода является использование Препроцессора, который отнюдь не превращает формальную спецификацию CSS в язык программирования, но дает синтаксису необходимую силу и мощь, актуальные возможности и эффективность. Если говорить совсем просто, то без него, очень многие требования современного веб-дизайна иначе было бы крайне затруднительно реализовать, особенно в масштабе крупных проектов.
Справедливости ради, нужно упомянуть, что последние годы, в связи с стремительным ростом популярности компонентных js-фреймворков и их подходов, все больше сторонников набирают также различные «CSS-in-JS»-реализации (например: Styled Components). Скоро, вероятно, можно будет спокойно использовать переменные в самом CSS (CSS Custom Properties). Тема холиварная, существуют контексты и ситуации когда подобный CSS-in-JS подход может оказаться более оправданным и изящным, без сомнения. И даже существует масса реалистичных кейсов когда проще всего будет действительно обойтись несколькими наборами правил на CSS, а любое его расширение будет излишним. Но в общем случае, в реальной коммерческой практике, имхо, для верстки сложных дизайнов и интерфейсов удобнее и эффективнее всего сейчас использовать любой препроцессор, и, шок — даже с компонентным фреймворком, дальше я планирую показать «как именно это лучше всего делать». Препроцессоры дают максимум возможностей и позволяют стремиться к максимальной выразительности и переиспользуемости. Вот во что превратился бы «плохой код» выше в SCSS-синтаксисе, наверное — самого популярного на сегодняшний день препроцессора — Sass:
// В @/src/scss/utils/_variables.scss:
$colors__border: #adadad;
$border-radius: 3px;
// В @/src/scss/utils/_placeholders.scss:
%border-block {
border: 1px solid $colors__border;
border-radius: $border-radius;
}
// В @/src/scss/utils/_mixins.scss:
@mixin size($width, $height) {
width: $width;
height: $height;
}
// В любом месте проекта:
.selector {
$selector--1__size: 200px;
$selector--2__width: 200px;
$selector--2__height: 400px;
&--1,
&--2 {
@extend %border-block;
/* ... включение других сущностей препроцессора
и специфическиих правил общих для селекторов */
}
&--1 {
@include size($selector--1__size, $selector--1__size);
/* ... включение других сущностей препроцессора
и специфических правил уникальных для селектора */
}
&--2 {
@include size($selector--2__width, $selector--2__height);
/* ... включение других сущностей препроцессора
и специфических правил уникальных для селектора */
}
}
Точно тоже самое легко сделать и на, кажется, недооцененном, но очень удачном Stylus — совершенно не важно какой именно расширенный синтаксис вы используете, главное как и зачем. Очень много раз мне приходилось видеть плохой чужой код написанный якобы для препроцессора, видимо, «потому что так сейчас модно», но, на самом деле, практически ничем не отличающийся от кода CSS. Не делайте так! Препроцессор дает нам крайне ценную возможность абстрагировать общие качества гайдлайна, стиль и основанные на нем частные стили, организовать их намного более выразительно и лаконично, легко модифицировать и переиспользовать при необходимости.
В данном, вырванном из контекста, но, при этом, вполне жизненном примере, кажется, что кода препроцессора — сильно больше. Он еще и раскидан по нескольким разным файлам, что, как будто, еще все усложняет. Зачем так напрягаться, а? Прежде всего, привычка начинать писать разметку с переменных и обобщений — очевидно грамотная. Перестаньте плодить изолированные глухие кряки с магическими числами, начните применять абстракцию! Делайте хорошо сразу, потому что вы почти никогда и ничего не переделаете «потом», на самом деле. «Когда наш стартап наконец взлетит», и как раз во многом из-за такого отношения он может и не взлететь, в результате. Чем детализированнее и сложнее ваш интерфейс, его дизайн, тем больше строк и времени вы будете «экономить» просто оптимизируя общие наборы правил, переиспользуя стили. Кроме того, поддерживать код и, тем более, вносить серьезные изменения будет на порядок проще.
Первый пример демонстрирует что на начальных этапах развития проекта хорошо продуманного кода препроцессора может быть даже визуально несколько больше, чем неорганизованного, внутренне плоского, скучного CSS. Но давайте разберем очень часто встречающийся кейс, в котором мы очевидно сразу сильно экономим много трафика и явно оптимизируем возможную поддержку. Такое очень часто встречается: нам нужно создать большое количество, предположим — 20 штук — модификаторов одного селектора — квадратной иконки размеров в 100 пикселей — и поставить в них нужные картинки в бекграунд. В Sass мы можем написать цикл с интерполяцией для создания селектора модификатора и указания пути до ресурса. И хотя такая синтаксическая возможность не является чем-то идейно решающе важным — на практике она экономит кучу времени и повышает качество жизни на работе:
// В @/src/scss/utils/_variables.scss:
// Paths
$images__path--root: "../../assets/images/";
// Sizes
$icons__size: 100px;
// Views
$icons: 20;
// В любом месте проекта (в папке В @/src/scss/project/):
.icon {
// корректируем путь до картинок
$image-path: $image_path--root + "icons/";
@include size($icons__size, $icons__size); // эта примесь уже создана выше
@for $i from 1 through $icons {
&.icon--#{$i} {
background: url("#{$image-path}icon--#{$i}.svg") center center no-repeat;
}
}
}
Пример предполагает что в вашем проекте следующая структура:
.
L- src
+- assets
¦ L- images
¦ L- icons
¦ +- icon--1.svg
¦ +- icon--2.svg
¦ L- ...
L- sscs
+- project
¦ L- ...
L- utils
+- _mixins.scss
L- _variables.scss
Теперь в шаблонах мы можем использовать:
<div class="icon icon--1"></div>
Если вы желаете чтобы картинки были с осмысленными именами — можете перебирать список:
.icon {
$image-path: $image_path--root + "icons/";
$images: "name1", "name2", "name3"; // Список имен
@include size($icons__size, $icons__size);
@each $image in $images {
&.icon--#{$image} {
background: url("#{$image-path}#{$image}.svg") center center no-repeat;
}
}
}
Ну и раз уж мы упомянули интерполяцию, необходимо вспомнить еще один простой кейс, который сейчас часто нужен и в котором вам она точно пригодится — «посчитать с переменной»:
.selector {
$width: 100px;
width: calc(100vw - #{$width});
}
Используйте на полную мощность и изучайте подробно свои ключевые инструменты. Применяйте свой интеллект и фантазию. В хорошем коде препроцессора наборы правил не повторяются и какдый селектор содержит только небольшое количество объявлений. Повторяющиеся и похожие наборы, большое количество самых разных объявлений в селекторах — признак плохо организованного кода. Пока бесконечный поиск и замена остаются вашим главным и единственным инструментом рефакторинга кода разметки — вы живете в каменном веке веб-технологий и еще даже не начинали верстать!)
Абстрагируй все!
Что такое дизайн, если совсем кратко? Дизайн — это «гайдлайн» — строгая система, набор стилевых правил и ограничений, перечень констант, аксиом и отношений в разметке и оформлении интерфейса, которым он неукоснительно должен соответствовать. Задача верстальщика в том чтобы правильно воспринять эту систему и максимально эффективно перевести ее с языка графических прототипов в работающий по заявленным требованиям код.
Поэтому маниакально абстрагируй все что только можно. Все что должно и может быть переиспользовано и любые конкретные значения, те, которые, когда-нибудь, но, в принципе, могут измениться. К примеру, на Stylus:
// В @/src/stylus/utils/variables.styl:
$colors = {
mint: #44c6a8,
// ... другие конкретные значения цветов
}
// Создаем "основной цвет", абстрагируясь от конкретного цвета
$colors['primary'] = $colors.mint
// ... другие "функциональные" цвета
Любое имеющее глобальное значение и потенциально переиспользуемое качество гайдлайна и дизайна должно быть отражено в файле переменных препроцессора. Теперь в любом месте где потребуется предоставить основной «брендовый» цвет:
.selector
color $colors.primary
Очевидно, что если весь остальной код будет аккуратно использовать правильную переменную — просто «по щелчку пальцев» возможно изменить этот основной цвет по всему интерфейсу! Все это логично и закономерно приводить нас к идее некой общей «стилевой базы», медиатора единого стиля оформления интерфейса. Такую глобальную абстракцию легко способен предоставить препроцессор, и ее, вероятно, будет удобно использовать даже для оформления «изолированных» компонентов.
Структура и стилевая база препроцессора
Дальше я покажу определенную логичную и простую структуру организации файлов препроцессора, которую использую на проектах сам. Но вы можете что-то делать совсем иначе и, в результате, прийти к совсем другой, удобной именно для ваших методов работы системе. Важно не следовать каким-то зазубренным до автоматизма теориям и якобы «лучшим практикам», а гибко и к месту применять возможности, и даже, вероятно — все время немного экспериментировать, стараясь расти и меняться к лучшему. Категорически важно только то, что ваши стили должны быть действительно всегда четко и понятно организованы.
На практике во многих командах «вытесняют» и игнорируют выгоду от более продвинутых и аккуратных подходов к разметке. Ведь это требует определенных затрат на коммуникацию. Например, очень часто файлы стилей даже на препроцессоре — тупо и незамысловато «складируются в кучу» и практически никак не связаны друг-с-другом. Признайтесь себе наконец честно: даже аккуратная подробная компонентность, хоть и позволяет решить проблему на самом примитивном физическом уровне, она вообще не решает ее глобально, на уровне абстракций. Наоборот — компонентность даже еще несколько затрудняет решение, так как строится именно на противоположных глобальности препроцессора, изолирующих подходах. Ваша куча это по прежнему невыразительная невнятная неповоротливая куча, просто теперь она еще и разделена на множество подобных и глобально излишних куч, поменьше.
Но давайте уже организуем препроцессор, если с SCSS:
.
L- src
L- sscs
+- core // обшие и компилируемые сущности препроцессора
¦ +- _animations.scss // keyframes
¦ +- _base.scss // минимальная нормализация основных HTML-элементов
¦ +- _grid.scss // сетки
¦ +- _typography.scss // типографика
¦ L- _utilities.scss // быстрые удобные классы-утилиты для включения прямо в разметку
+- libraries // папка с файлами стилизаций сторонних модулей
¦ L- _modal.scss - например какая-нибудь готовая модаль
+- project // стили конкретного проекта
¦ +- _elements.scss // отдельные простые элементы-компоненты
¦ +- _fixes.scss // этот файл всегда должен быть практически пустой, и предназначен только для редких общеизвестных "собственных проблем браузеров"
¦ +- _layout.scss - стили общей для всех страниц GUI-обертки над контентом интерфейса
¦ L- _widgets.scss - сложные составные комбинации простых элементов-компонентов
+- utils // обшие и некомпилируемые основные сущности препроцессора
¦ +- _functions.scss // на практике нужны крайне редко
¦ +- _mixins.scss // параметризируемые и способные принимать контент примеси-микстуры
¦ +- _placeholders.scss // повторяющиеся наборы правил - растворы
¦ L- _variables.scss // самый важный файл с переменными )
+- _main.scss // точка сборки всех стилей препроцессора
L- _stylebase.scss // стилевая база
То есть, на самом деле — порядок сборки всей кухни имеет значение, конечно же:
// В @/src/scss/_stylebase.scss:
// Stylebase
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
// Uncompiled kitchen
@import "./utils/_functions";
@import "./utils/_variables";
@import "./utils/_mixins";
@import "./utils/_placeholders";
// Core base normal style and common utils
@import "./core/_animations";
@import "./core/_typography";
@import "./core/_base";
@import "./core/_grid";
@import "./core/_utilities";
// В @/src/scss/_main.scss:
// Project styles
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
// Stylebase for components
@import "_stylebase";
// App styles
@import "./project/_fixes";
@import "./project/_elements";
@import "./project/_widgets";
@import "./project/_layout";
/* External libraries customization */
@import "./libraries/_modal";
Итак, «стилевой базой» мы будем называть некое основное ядро стилей, доступный всем остальным компонентам системы общий код препроцессора. Более детально, он состоит из условно двух разных видов файлов:
Растворяемые при компиляции инструменты-помощники, сущности позволяющие генерировать лаконичный, оптимальный, связный код:
- функции
- переменные
- параметризуемые примеси
- включения-плейсхолдеры
Компилируемые глобальные стили:
- анимации keyframes
- типографика
- базовая нормализация основных HTML-элементов
- сетки
- утилитарные классы-помощники для разметки
В папки @/src/scss/project
и @/src/scss/libraries
вы можете добавлять файлы по необходимости.
Удобно держать подобную минимальную «кухню» наготове в ваших стартовых проектах, чтобы с самого начала работы быстро настраивать стилизацию под конкретные требования и гайдлайн.
У меня вот, например, можно посмотреть — есть различные такие заготовки-«болванки» для быстрого старта на разных комбинациях актуальных технологий:
Читать книжку дальше можно пройдя по ссылке: Как верстать веб-интерфейсы быстро, качественно и интересно.
granvi
Из написанного я понял, что ответа на вопрос так и не найдено.
anonymous Автор
В любом случае, спасибо за то что читали и даже за критический камментарий. ) А вы считаете можно отыскать какой-то единственно правильный однозначный ответ на этот практически риторический вопрос, универсальное решение пригодное на все времена и случаи жизни? Произведение вроде не ставит такой унылой и порочной цели… Оно обобщает достаточно уже продолжительный опыт, представляет несколько достаточно спорных идей, но рассматривает и альтернативные и подходы — старается возбудить интерес, прежде всего и в конце концов, к тому что происходит по теме в отрасли… Не думаю, что в принципе возможно написать по что-нибудь по данной теме, что уже очень скоро не окажется неактуальным. И да — я сам собираюсь «еще искать дальше», не останавливаться на достигнутом, пробовать что-то новое и так далее… Разве не в этом смысл и кайф?
nin-jin
А почему вы считаете, что это невозможно?
Вы пробовали действительно другие подходы? Например, такие, где верстальщик вообще не пишет селекторы руками? Или такие, где typescript проверяет все значения, свойства, селекторы?
anonymous Автор
А вы прочитали мой текст по ссылке в конце статьи здесь на Хабре хотя бы почти до конца первой из двух частей? Там есть ссылки на примеры моих проектов, например, с TypeScript и/или Styled Components, вроде?..
Вы знаете, я вполне внутренне готов к тому, что меня здесь многие будут топить в фекалиях — да пожалуйста — если кому-то делать нечего… К сожалению, у меня вот прямо сейчас, честное слово, нет времени на холивары и прочее бессмысленное самоутверждение, и это не отмазка — нужно срочно выручать свою команду и вносить изменения в чужой проект с современными, но, при этом "несколько другими" подходами, организацией кода, чем я обычно использую… И это тоже по-своему интересно, точно интереснее, чем спорить о том, что неоднозначно, разнообразно и постоянно меняется...
А найти "окончательное решение", подробный точный рецепт — на все времена и все случаи жизни я правда считаю что совершенно невозможно, да и не нужно — фронтенд это невероятно быстро развивающаяся среда, проекты, задачи, системы бывают самые разные — об этом всем упомянуто в моем тексте, и об этом, я считаю, точно бессмысленно дискутировать. Кроме того, мы все разные, у нас разные склонности-привычки, характеры, жизненный опыт, обстоятельства, и так далее — и это замечательно… Если вы считаете иначе — напишите об этом тоже — я с удовольствием ознакомлюсь с вашим мнением.
nin-jin
Вы бы не строили из себя обиженку на ровном месте. Это довольно глупо выглядит. На вас пока никто не нападал, чтобы вы тут огрызались.
Ну то есть вы убеждены, что такого решения быть не может, поэтому его быть не может? Ок, у меня больше нет вопросов. С убеждениями дискутировать бессмысленно.
styled-components, если что, ничего из мною перечисленного не проверяет. К чему это вы о нём?
anonymous Автор
Я не огрызаюсь совсем, подробно вам ответил, хотя, правда, некогда совсем. И, видимо — зря. И я не стану сообщать вам о том, как выглядят советы незнакомым людям в интернете о том, как им нужно или не нужно себя вести, навешивание неприятных эпитетов на основе вашей субъективной рефлексии статьи и пары комментариев… Уверен — бесполезно и только раззадорит...) Общение, имхо — должно строиться на уважении к собеседнику, взаимном интересе и прочих приятных плюшках… А если всего этого нет — стоит стараться избегать.
Если вы считаете что, например, "на лыжах летом по асфальту бегать эффективно, и достаточно быстро, удобно", ну или вам "просто это нравится" — пожалуйста — бегайте-резвитесь, развлекайтесь. Можете даже попробовать проповедовать это, только не стоит навязывать — я вот предпочту хотя бы велосипед, смотря, опять же, какие цели и обстоятельства, необходимость… Риторика построенная на банальном передергивании и примитивных манипуляциях — тоже вас не красит в качестве достойного собеседника. Да — одна одежда нужна для зимы, другая для лета. Хотите щеголять в скафандре круглый год — может он у вас с терморегуляцией даже, но вряд ли в нем будет удобно, например — плавать или загорать.) Если у вас есть "универсальное решение" — покажите его, а не передергивайте на пустом месте.
Styled Components были упомянуты в общем контексте в ответ на заданный вами изначально вопрос: "Вы пробовали действительно другие подходы?" — тут вы тоже передергиваете откровенно и троллите, кажется. В контексте предложенного в моей работе основного подхода с "глобальным препроцессором для компонентности" — CSS-in-JS — как раз выглядит альтернативой. И с ней я тоже ответственно экспериментировал. Повторюсь, в моем тексте об этом есть, но вы, видимо, его не прочитали толком, но комментируете.
nin-jin
То есть вы попробовали пару вариантов и уже делаете выводы о том, что возможно, а что нет. Понятно.
Вам не говорили, что вы слишком много произносите слов и слишком мало вкладываете в них смысла?
anonymous Автор
Пока что я не услышал от вас ничего кроме дешевых эмоциональных спекуляций и жалких провокаций — ни одного внятного, четкого примера или контрпримера, ни одного "варианта", решения, технологии, которые я, предположим — специально, или же по не знанию — упустил, или даже — будь ваш интерес к этому посту доброкачественным — мне бы было действительно полезно познакомиться… Давайте вы хоть что-то выдавите по теме, хоть минимально правдоподобное и полезное мне, сообществу, вместо того чтобы засорять эфир своим воображаемым таинственным величием и загадочной неординарностью? Если вы прячете от нас какие-то ценные знания, сокровища, козыри — уже пора их демонстрировать, публика давно в нетерпении, фанфары охрипли-заржавели, барабаны лопнули?.. Я буду искренне рад если ошибаюсь о ваших мотивах, и вы, действительно, сейчас покажете мне и всем что-то потрясающее и необычное?
nin-jin
Ничего я не прячу: https://youtu.be/FMNLN5YIE_M?t=5556
anonymous Автор
Спасибо! Но не думаю что это годиться в качестве универсального решения для всех случаев, задач и прочее. Даже отдаленно не напоминает.
nin-jin
Значит вам не составит труда назвать такой случай, где не годится?
anonymous Автор
Конечно не составит. В коммерческом аутсорсе, например, верстальщикам приходится иногда верстать лэндинги с "шикарным" адаптивным и сложным дизайном, но практически без какой-либо функциональности, и при этом — очень-очень быстро — прямо нереально быстро. И при этом критично сделать так чтобы "через пару дней" все было идеально "внешне" и было именно в срок. Или часто встречаются игры-презентации, где некоторый нетривиальный кастомный функционал-поведение присутствует, но шаблоны все равно будут отдаваться с сервера, верстка нужна для интеграции на бэкенде. Не только TypeScript "будет мешать" — просто фреймворк и компонентность на таких проектах это совершенно неадекватно и вы просто прогорите и не впишетесь в дедлайн если будете усложнять и не будете более гибким. Это очевидные вещи для любого человека который хоть немного действительно "нюхал порох" в настоящей индустрии, побывал в пекле… И это далеко от многих "красивых теорий" и идеализма. Я то как раз пытаюсь дать внятный концепт как в таких жарких ситуациях делать хорошо и красиво, но не усложнять и не наворачивать лишнего.
Ну или более сомнительный пример, но такое тоже случается в реальной практике сплошь и рядом: гибкий "долгостой", возможно, с сомнительным будущим и не очень внятным настоящим, на котором нет дизайнера или они меняются, макет только для десктопа и только на одну страницу), от менеджмента часто приходят прототипы на новые фичи и шаблоны "на коленке"… В этом случае нам также нужна больше нужна максимальные гибкость и скорость, но "в гайде", а вот строгая типизация того, что практике практически точно — очень скоро отправиться "в корзину" — мне непонятно зачем?
Я уже понял что немного ошибся в вас, в том смысле что вы не какой-то "злой тролль", отнюдь, а, скажем так, действительно специалист со своим необычным подходом. В этом смысле — извините. Но вы, вероятно, за это практически фанатично топите, это выглядит болезненно. Ну — ок… Я вот думаю что "пусть цветы цветут", разные инструменты и решения хороши для разных задач и ситуаций.
nin-jin
anonymous Автор
Во-первых чисто рамочный вопрос — если ваша такая замечательная метода "вообще для всего годиться" — почему ее тогда практически никто кроме вас не использует?
Все дураки, вы один знаете как надо?Происки рептилоидов?Во-первых, чувствую я что вы все-таки
вообще нене часто верстаете очень быстро сильно кастомные лендинги, судя по ответу — на сильно кастомных лендингах как раз мало что повторяется, кроме вот самых рамочных концепций для адаптивности и типографики. Объясните доходчиво чем вам подход лучше и надежнее нескольких простейших примесей и утилит препроцессора — вот как я всем предлагаю? Как он позволяет простым образом "полностью контролировать типографику" — как это сделано у меня? Я допускаю что чего-то не знаю, не понимаю — сейчас очень много информации, бурно все развивается-меняется, это не стыдно и мне будет очень интересно услышать?Я вроде знаю где именно "typescript не мешает а помогает." — энтерпрайз, спокойные продукты-долгострои — и вот поэтому там именно его большинство и использует, и то не всегда. А на аутсорсе, и особенно супербыстрой верстке крафтовых лендингов — меня просто заклюют коллеги/работодатели если что-то то такое начну предлагать и внедрять, вместо того чтобы быстро нормально сесть и написать на HTML/препроцессоре/JS — без фреймворка. В чем выгода от ts и фреймворка? Проблема же не только во мне — пока что почему то практически никто не мотивирован перенимать ваши подходы? Мотивируйте нас? Пока — ничего и почти никому, видимо, не понятно.
Я сам себе дизайнер и много раз "делал все сразу в браузере, без макетов" если мой заказчик/работодатель соглашался на такой подход. Тут, чаще всего, речь не о "крафтовом custom дизайне", а о быстрых casual-прототипах — в случае сервиса-долгостроя или были, например, сайты-каталоги — в частной практике… Стоковый дизайн никогда не использовал, так же как и "готовые библиотеки для GUI", кроме Бутсрапа еще 3его когда-то — ковырял такое ответственно, встречались на проектах, но ничего кроме ужаса такой "подход к дизайну" не вызывает — в книге об этом есть в конце первой части. И речь не только о том как это выглядит, а о очень многих печальных аспектах таких подходов.
Cудя по всему, вы лучше всех знаете "какой фреймворк самый хороший", "как надо строгать CSS" — но почему-то я практически сутки ждал просто ссылку на технологию которую вы предлагаете как "универсальную" и дождался только какое-то видео — прощелкал, смотреть пока поробно некогда — дедлайн (я вообще предпочитаю спеки, видео — для миллениалов)… Можно подробный текст, с мотивацией, примерами, вот это все? Правда интересно и уже подустал ждать! ((( Вы тут выше обвиняли меня в голословности — но все ваши утверждения "что лучше" и "что для всего вообще годится" — просто утверждения, которые, видимо нужно принимать на веру, в силу "авторитета", чтоле? Пока ничего весомого и убедительного не увидел. Расскажите — почему лучше, чем эффективнее, почему универсально, как использовать? Не хотите здесь — напишите свою статью — дайте ссылку?
nin-jin
У людей нет времени изучать что-то новое ибо сроки горят, а бойлерплейта написать надо ещё много.
Ну, приведите пример такого лендинга, где мало чего повторяется.
Выгода как раз в том, что нормальный фреймворк позволяет сделать то же самое быстрее, чем голыми руками. У вас какое-то превратное представление о фреймворках.
https://nin-jin.github.io/slides/mol/
anonymous Автор
Ну вот сейчас мы наконец-таки в этом топике — ударимся в политэкономию...)) Да, именно так — капитализм и одна из его основных "плеток" — экономическое рабство, принуждает бесправное и обреченное на прозябание абсолютное большинство к постоянному рутинному и однообразному труду в интересах капиталов. И, чаще всего — качество условий этого труда, его стандарты — низкие, так как капитал стремиться оптимизировать издержки и выжимать как можно больше из имеющихся ресурсов в максимально сжатые сроки — "конкуренция свободного рынка" же (а точнее — только ее видимость, на самом то деле)… Айтишники сейчас находятся к достаточно привилегированном положении, так как мы можем рассчитывать на лучшие условия и компенсацию чем большинство, а при наличии опыта и/или специфических скилов — на действительно творческие интересные задачи и тд… И на самом деле любой специалист каждый день с этим сталкивается — что надо "баги фиксить / таски наворачивать" — "как можно быстрее" — рутина-текучка, а хотелось бы спокойно и основательно пробовать-изучать что-то передовое-интересное, творить прекрасное и прочие радости. Но на самом деле — это тоже вид лени — мы — часть общества и взаимодействие с ним "до результата который всех устраивает" — формирует настоящий профессиональный фундамент. Хорошая глубокая теория — это важно, но без реальной практики — она ничто — в коммерческом дизайне и программировании. А практики почти никогда не бывает "только на условиях исполнителя". Вы, похоже — чисто теоретик, такой проповедник-прогрессист — забавно, конечно...
Вот тут "не буду играть по вашим правилам" — вы мне "зубы не заговаривайте". Мне уже абсолютно очевидно что вы, видимо, не работали в боевом адовом аутсорсе и вообще не понимаете толком о чем речь. Любой "крафтовый кастомный лендинг" — это куча кастомной и не повторяющейся инфорграфики, деталей, необычных блоков и повторяется только "общий подходы к адаптивности" — "внутри" и, разве что "типографика — снаружи". На стоковых дизайнах, шаблонных и даже касуальных лендосах какие-то паттерны могут повторяться, да. Но не на "шикарных-крафтовых". Не говоря уже о играх-презентациях — там так каждый раз "полный полет фантазии дизайнеров", интересные пространства, сложное поведение и прочее — именно потому такие проекты действительно интересно делать. Чего-то не знать, не уметь, это не стыдно — всего сейчас не успеть — не попеределать, ни даже "изучить по верхам" — как быстро вы бы ни систематизировали — новое будет возникать еще быстрее в пост-истории. Но вы видимо с этим не хотите мириться и не согласны ))) — вы радикально замахиваетесь на фундаментальность, в том, в чем, кажется — фундаментальность в любом случае окажется жалкой бренной и выхолощенной пародией. Хотя это правда очень оригинально и фриково, крайне зачетно в современной убогой однотипной штампованной реальности из "выучившихся на быстрых курсах сразу на сеньера" и ничего кроме как "собирать-разбирать кубик-рубика (у вас — "бойлерплейт")" и "побеждать в хакатонах с такими же как они" на самом деле, в результате не умеющих, миллениалов — без единственной собственной мысли в голове, зато с понтами и самомнением до небес… А вам — уважуха, я такое очень ценю. Вы мне напоминаете математиков преподавателей из ЛМШ из детства, только еще радикальнее и фриковее — это сейчас изумительная редкость.
Я фреймворками сравнительно недавно занимаюсь — и, прежде всего, из чисто по практической, вполне мейнстримной необходимости и мотивации. В команде, работодатели от меня ждут, прежде всего Реакт и Вью — это востребованно и продается — другой вопрос "почему", это да. Я вот всю жизнь — с 14ти лет (уже 38) занимаюсь авангардным андеграундным творчеством — играю психоделический экспериментальный краутрок с очень старыми друзьями юности раз в неделю на репточке. То что мы делаем сейчас — достаточно продвинуто и сложно в каком-то музыкальном смысле — спонтанная импровизация, сложные размеры и полиритмия, полигармония-хроматизм, дрон — нетональная музыка, одновременная запись и сведение неизолированного живого звука — много всего, не важно… Сейчас — когда большинство слушает практически только один рэп, ну и еще попсу из двух-трех стандартных нот и аккордов с примитивным биточком — такое наше странное творчество вообще никому почти не нужно не интересно, не понятно (кроме нескольких фриков-меломанов), и я трачу средства на свое хобби, а не зарабатываю. Но мне это нравиться и простым образом нужно самому, дает энергетическую подпитку, психологический выход и так далее… Сравнение технологии и искусства, конечно, не совсем корректно, но когда речь заходит об идеях, теориях, философии — вполне, кажется, допустимо — как "сфер передового человеческого опыта". К чему я так пространно веду: субкультура, андеграунд, фундаментальные и радикальные фрики которые их создают, особенно во времена тотального капиталистического варварства и торжества-засилья массовой псевдокультуры миллениалов — это очень важно, очень! Да — очень важно что вы такой такой есть у нас в индустрии — "всегда против"! )) Еще раз — уважуха! Я совершенно искренне и серьезно, без всяких подколов и иронии!
Взглянул, позже ознакомлюсь подробнее — спасибо!.. Сейчас как раз самое время для "чего-то такого", так как я окончательно стал чувствовать себя "монстром" в Вуе и Реакте и заскучал, соответственно. Свитл, насколько я понимаю ничего принципиального нового в мою жизнь и практику не привнесет. Посмотрим...
Мемчик нарисовал чуть больше года назад — он о миллениале от которого тогда — как теперь понинаю — впервые слышал о вас — зацените:
babylon
Самоутверждение совсем не бессмысленное, лёгкое или быстрое занятие. Потому как если ни вы самоутвердитесь, то это сделает за вас кто-то другой, затопив вашу полянку своими фекалиями и парадигмами безо всякого к вам уважения. Мы живем в эпоху UFC в широком смысле. Рейтинг это бабло. А с ним приходит и уважение и советы, что делать чтобы достичь того же самого. Весь интернет построен на советах. СССР сгинул, а система советов жива и процветает.
Всегда думал, что дискуссия это инструмент для расшатывания и смены убеждений.