Conversation
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit f8ddb75:
|
size-limit report 📦
|
👀 Styleguide deployedSee the styleguide for this PR at https://vkcom.github.io/VKUI/pull/2255/ |
eugpoloz
left a comment
There was a problem hiding this comment.
Этот гайд планируется отдельным файлом? Он выглядит как штука, которой место в CONTRIBUTING.md. Как минимум в части соглашений и связности стилей.
А если нет, то гайдов чот много становится (тестирование, токены, вот этот), я бы их сложила уже в одну папку какую-нибудь. Для порядка!
| margin-right: 10px; | ||
| } | ||
|
|
||
| .Cell .Avatar { |
There was a problem hiding this comment.
Вот такого вида стили надо перекидывать в файл компонента, к которому они применяются (Avatar.css). Мы не знаем, в каком порядке стили подключаются, и не можем его гарантировать — следовательно, не можем контролировать каскад. Эта проблема уходит, если мы положим все стили про Avatar в Avatar.css.
.Icon — единственное исключение, потому что для .Icon у нас нет своего файла стилей (и вообще они тащатся из другой репы).
There was a problem hiding this comment.
А это реальный пример, кстати?...
Для Avatar мы выставляем 10px отступ, а для Icon 8px
Такая тема затрудняет, конечно, реализацию решений, которые я в рабочем чате предложил
There was a problem hiding this comment.
Да, у нас есть такие компоненты. Counter сам по себе и Counter внутри Button можно чекнуть, например.
There was a problem hiding this comment.
Глянул
Хм, а что если через реактовский контекст рулить такие вещи?
У меня сейчас есть такая идея для ButtonGroup
There was a problem hiding this comment.
Вот такого вида стили надо перекидывать в файл компонента, к которому они применяются (
Avatar.css). Мы не знаем, в каком порядке стили подключаются, и не можем его гарантировать — следовательно, не можем контролировать каскад. Эта проблема уходит, если мы положим все стили проAvatarвAvatar.css.
.Icon— единственное исключение, потому что для.Iconу нас нет своего файла стилей (и вообще они тащатся из другой репы).
Если на .Avatar в Avatar.css не будет собственного margin, то по сути неважно, где размещать эти стили.
CSS_GUIDE.md
Outdated
|
|
||
| Не обращаться к элементам другого блока | ||
|
|
||
| ## Куда мы движемся |
There was a problem hiding this comment.
Нужен ли здесь этот раздел? Кажется, что сейчас это просто гайд для разработчиков, а тут как будто описаны планы на будущее, которые мы стопудово будем забывать подправлять. 😏
There was a problem hiding this comment.
С учетом что мы пока не движемся туда, куда там написано, то этот раздел правда не нужен.
There was a problem hiding this comment.
Окей, согласен, унесу в другое место.
CSS_GUIDE.md
Outdated
| конечный пользователь грузил стили только используемых компонент | ||
| - Переезд на css-modules и отказ от БЭМ-нотации | ||
| - Отказ от обращений из одного блока к другому | ||
| - Хэширование классов |
There was a problem hiding this comment.
Можно еще выше накинуть как рекомендацию, мол, делайте названия классов понятными, но не слишком длинными, потому что пока мы живем без хэширования классов, они влияют на вес css бандла.)))
There was a problem hiding this comment.
Тут тоже нужно понять влияет ли это вообще на что-то. Гзип нормально должен справиться с обычными классами. Нужно понять, какие конкретно эффекты получим
There was a problem hiding this comment.
@NekR про размер, возможно, это экономия на спичках, тут нужны цифры до и после, а вот то, что это исключит манию завязаться на тот или иной класс, хорошо
Каждый раз, когда кто-то завязывается на класс с префиксом .vkui с целью манипуляций, увеличивает риск потенциальных багов
There was a problem hiding this comment.
Сейчас кастомизация таким образом специально сделана. Вряд ли оно поддаётся однозначному хорошо или плохо
There was a problem hiding this comment.
По поводу кастомизации нужно придти к тому, чтобы оперировать токенами
Напрямую изменять нежелательно
Усложнится миграция из одной версии на другую, т.к. вероятность изменения стилей выше, чем токена
There was a problem hiding this comment.
Это нормально что юзерам нужно будет подправлять компоненты, так как библиотека никогда не угонится за дизайном и точно не покроет все продуктовые кейсы. Соответственно, когда разработчик в продукте пытается кастомизировать, он не должен бороться с библиотекой, а уметь максимально гибко поправить всё что ему нужно. Если это будет "полностью на токенах", то нужен будет токен на всё, даже на те css-свойсва которые мы не используем.
VKUI про стандартную сборку компонентов по дефолту и про гибкую кастомизацию когда это нужно, что бы удовлетворить всем потребностям продуктов.
There was a problem hiding this comment.
Ты предложил собрать варианты кастомизации в доке, вижу у документа уже есть зачатки. Но там пока про токены только говорится. Надо добавить информации про кастомизацию без токенов 🤔
CSS_GUIDE.md
Outdated
|
|
||
| ```tsx | ||
| // Cell.tsx | ||
| <div className="Cell"> |
There was a problem hiding this comment.
| <div className="Cell"> | |
| <div vkuiClass="Cell"> |
CSS_GUIDE.md
Outdated
|
|
||
| ```tsx | ||
| // Button.tsx | ||
| <button vkuiclass="Button"> |
There was a problem hiding this comment.
| <button vkuiclass="Button"> | |
| <button vkuiClass="Button"> |
CSS_GUIDE.md
Outdated
| ```tsx | ||
| // Button.tsx | ||
| <button vkuiclass="Button"> | ||
| <Text vkuiclass="Button__text">{children}</Text> |
There was a problem hiding this comment.
| <Text vkuiclass="Button__text">{children}</Text> | |
| <Text vkuiClass="Button__text">{children}</Text> |
|
Нужно упомянуть что для разделения слов используем kebab case |
CSS_GUIDE.md
Outdated
| конечный пользователь грузил стили только используемых компонент | ||
| - Переезд на css-modules и отказ от БЭМ-нотации | ||
| - Отказ от обращений из одного блока к другому | ||
| - Хэширование классов |
There was a problem hiding this comment.
Переезд на css-modules и отказ от БЭМ-нотации уже включает в себя пункт Хэширование
CSS_GUIDE.md
Outdated
|
|
||
| - Предлагаем помимо `vkui.css` и `components.css` альтернативу, в которой стили компонента подключаются в `.js`, чтобы | ||
| конечный пользователь грузил стили только используемых компонент | ||
| - Переезд на css-modules и отказ от БЭМ-нотации |
There was a problem hiding this comment.
Подумала и поняла, что мне не нравится пункт про отказ от БЭМ-нотации. Мы, по идее, будем продолжать писать внятные классы (если не уйдем на некий css-in-js, видимо), хотелось бы текущую нотацию оставить.
There was a problem hiding this comment.
Зачем писать тяжеловесный .ModalCard__long-inner-element, если пропадает риск коллизиий? Можно просто оставить .long-inner-element и мы вроде ничего не потеряем и нигде не огребем.
There was a problem hiding this comment.
@ArthurStam формулировка "отказ от БЭМ-нотаций" звучит радикально
Так или иначе даже при подходе CSS Modules или CSS-in-JS, для DX, надо будет придерживаться соглашения по именования
Например, БЭМ нормально дружит в CSS Modules, просто исчезнет необходимость писать название компонента ручками
Я вот так делал
/* Корневой элемент */
.host { }
.host_color_accent { }
/* Потомки */
.someItem { } /* camelCase для составных имен */
.someItem_fullWidth { }
.someItem_disabled { }
.icon { }
.icon_size_small { }
.host_color_accent .icon { }import classes from './Example.module.pcss';
const hostColorClasses = {
accent: classes.host_color_accent,
};
const iconSizeClasses = {
small: classes.icons_size_small,
};
const Example = ({ className, color = 'accent', iconSize = 'small', disabled, ...restProps }) => {
return (
<div className={className(classes.host, hostColorClasses[color], className)} {...restProps}>
<div className={classNames(classes.someItem, disabled && classes.someItem_disabled)}></div>
<img src="" className={className(classes.icon, iconSizeClasses[iconSize])} />
</div>
);
};There was a problem hiding this comment.
Я не предлагал сеять хаос в именах классов. Речь шла только об отказе от необходимости дописывать всем селекторам имена блоков и элементов.
| - Элемент от блока отделяется двумя подчеркиваниями: `.Checkbox__in` | ||
| - Многословные элементы разделяются через kebab-case: `.Banner__before-title` | ||
| - Модификатор отделяется двумя дефисами: `.Input--plain` | ||
| - Многословные модификаторы разделяются через kebab-case или camelCase: `.Checkbox--sizeX-regular` |
There was a problem hiding this comment.
Может для составных имён всегда использовать camelCase, а kebab-case использовать для <key>-<value> модификаторов?
Вот так описать
| - Многословные модификаторы разделяются через kebab-case или camelCase: `.Checkbox--sizeX-regular` | |
| - Модификаторы отделяется двумя дефисами и бывают двух типов: | |
| - `<key>-<value>`, например, `Comp--sizeX-regular` | |
| - `boolean`, например, `Comp--disabled` |
No description provided.