Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Добавить поддержку CSS Modules #2607

Closed
1 task done
Tracked by #2349
inomdzhon opened this issue May 25, 2022 · 2 comments · Fixed by #2294
Closed
1 task done
Tracked by #2349

[Feature] Добавить поддержку CSS Modules #2607

inomdzhon opened this issue May 25, 2022 · 2 comments · Fixed by #2294
Assignees
Milestone

Comments

@inomdzhon
Copy link
Contributor

inomdzhon commented May 25, 2022

Для

  • отказа от vkuiClass
  • возможности автоматизации проставления префиксов vkui

переходим на CSS Modules

Пример

// src/components/Example/Example.module.css
.Example {}

// src/components/Example/Example.tsx
import { classNamesString } from "../../lib/classNames";
import styles from './Example.module.css';

const Example = ({ className, ...restProps }) => <div className={classNamesString(styles.Example, className)} {...restProps} />;

// src/styles/components.css
@import '../components/Example/Example.module.css';

  • удалить упоминание vkuiClass в документациях
@inomdzhon
Copy link
Contributor Author

closed this as completed in #2294

@SevereCloud SevereCloud moved this to 👀 In Review in VKUI Aug 1, 2022
@SevereCloud SevereCloud added this to VKUI Aug 1, 2022
@SevereCloud SevereCloud moved this from 👀 In Review to ✅ Done in VKUI Aug 1, 2022
@inomdzhon
Copy link
Contributor Author

inomdzhon commented Sep 19, 2022

См. #3345

Старый ресёч на тему оптимизации CSS Modules

Про оптимизацию CSS Modules

⚠️ Для примеров я уже сразу сокращаю имена классов до 3-символов Comp -> Cmp вместо хэширования, как хотим сделать в будущем. Подробнее здесь https://github.com/inomdzhon/test-vkui-css-hash.

Я подумол, потом пошёл пообщался в телеге с SPB Frontend Chat, затем ещё посидел подумол и вот к чему пришёл:

Оптимизация типа

-import styles from "./Comp.module.css"
-const Comp = () => <div className={styles.Comp} />

+require("./Comp.module.css");
+const Comp = () => <div className="vkuiCmp" />

тщетна и имеет свой минус

  1. Сначала про минус. Мы теряем возможность писать Comp--size-${size}. Придётся делать мапы вида { s: styles["Comp--size-s"], ... }.

  2. Ввиду п.1 будет экономия на спичках, т.к. будут создаваться те же мапы, что CSS Modules выплёвывает, но только вручную. Вот в этом преобразованном коде как сейчас:

    require("./Comp.module.css");
    
    const styles = { Comp: "vkuiCmp", "Comp--size-s": "vkuiCmp--sze-s" };
    
    const Comp = ({ s }) => <div className={classNames(styles.Comp, styles[`Comp--size-${s}`]} />

    алгоритм сжатия Deflate создаст ссылки на styles, CompComp--size- и они не будут занимать место

    А так будет

    require("./Comp.module.css");
    
    const sizeClassName = { s: "vkuiCmp--sze-s" };
    
    const Comp = ({ s }) => <div className={classNames("vkuiCmp", sizeClassName[s]} />

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
1 participant