#javascript #css #reactjs #typescript #sass
#javascript #css #reactjs #typescript #sass
Вопрос:
Возьмите эту таблицу стилей SCSS:
@import "../vars";
img.userIcon {
amp;.regular {
max-width: 64px;
max-height: 64px;
}
amp;.small {
max-width: 32px;
max-height: 32px;
}
border-radius: 50%;
border: 2px solid $bg-light;
}
Как , черт возьми , мне заставить свою страницу распознавать .regular
или .small
?
Это мое UserIcon.tsx
, которое применяет этот стиль:
import styles from "../styles/components/UserIcon.module.scss";
type Props = {
src: string,
variant?: "regular" | "small"
}
export default function UserIcon({ src, variant = "regular" }: Props) {
return <img className={`${styles.userIcon} ${variant} mb-2`} src={src} />
}
Теперь это, очевидно, не сработает, потому что где-то по ходу дела все имена классов перепутаны и выглядят примерно так:
<img class="UserIcon_userIcon__1jFAP regular mb-2">
Что странно, потому что он никогда не делает этого с файлами boostrap scss, которые я импортировал.
Поэтому мне нужно знать либо:
- Как удалить переименование имени класса.
- Как реализовать
.regular
и.small
правильно, чтобы он использовал перепутанное имя.
Комментарии:
1. Это называется «CSS-модули», и они очень, очень хороши. Хотите верьте, хотите нет, но вам нужны эти «перепутанные» имена классов. Имена классов становятся глобально уникальными строками, что позволяет вам иметь одинаковые имена классов в разных файлах, которые не конфликтуют друг с другом. Недостатком является необходимость перевода всех имен классов через импортированный css-объект. Но оно того стоит.
Ответ №1:
передайте variant
в качестве ключевого аргумента вашему объекту styles:
return <img className={`${styles.userIcon} ${styles[variant]} mb-2`} src={src} />
Комментарии:
1. Это работает! Но есть ли какой-нибудь способ отключить переименование?
2. Я считаю, что одной из причин использования модуля CSS является создание уникальных имен классов, чтобы избежать столкновения имен. medium.com/@pioul/modular-css-with-react-61638ae9ea3e .
Ответ №2:
Можете ли вы попробовать что-то подобное.
@import "../vars";
img.userIcon {
border-radius: 50%;
border: 2px solid $bg-light;
}
img.regular {
max-width: 64px;
max-height: 64px;
}
img.small {
max-width: 32px;
max-height: 32px;
}
import styles from "../styles/components/UserIcon.module.scss";
type Props = {
src: string,
variant?: "regular" | "small"
}
export default function UserIcon({ src, variant = "regular" }: Props) {
return <img className={`${styles.userIcon} ${styles[variant]} mb-2`} src={src} />
}
Скажите мне, решило ли это вашу проблему
Комментарии:
1. Не решает мою проблему, потому что теперь он вообще не будет применять какой-либо стиль, даже радиус границы, как будто он вообще не может найти класс.
2. хм, это очень странно
3. Можете ли вы попробовать просто
<img className="userIcon" src={src} />
plaese4. Да, я это сделал. Что-то меняет имена моих классов. Вот как они выглядят при запуске страницы: i.imgur.com/S8MsEz4.png
5. Теперь мне нужно, что вы используете для настройки scss / sass