CSS Модули - исключить класс из преобразования

Я использую модули CSS, и, безусловно, все работало замечательно.

Мы начали использовать внешнюю библиотеку пользовательского интерфейса вместе с нашей собственной, поэтому я пишу такие компоненты:

<div className={styles['my-component']}>
   <ExternalUIComponent />
</div>

Предполагая, что ExternalUIComponent имеет свой собственный класс, который в конечном файле CSS выглядит следующим образом external-ui-componentКак я могу настроить этот компонент стиля от моего css файл? Приведенный ниже пример не работает:

.my-component {
   font-size: 1em;
}

.my-component .external-ui-component {
   padding: 16px;
   // Some other styling adjustments here
}

4 ответа

Решение

Пожалуйста, не используйте встроенные стили, как кто-то другой предложил. Держитесь подальше от встроенных стилей, насколько это возможно, потому что они могут вызвать ненужные повторные рендеры.

Вы должны использовать global вместо.

.my-component {
    :global {
        .external-ui-component {
           padding: 16px;
           // Some other styling adjustments here
        }
    }
}

https://github.com/css-modules/css-modules

Кроме того, я рекомендую использовать имена стилей в случае верблюда, что является предпочтительным способом для css-модулей. Таким образом, ваше имя класса будет: .myComponent { ... }

И вы можете использовать его в своем коде как

<div className={ styles.myComponent } >

Если вы хотите добавить больше стилей, вы можете использовать array.join(' ') синтаксис.

<div className={ [ styles.myComponent, styles.anotherStyle ].join(' ') } >

Это чище!

Вот более короткая форма в чистом CSS (т.е. препроцессор не требуется):

      .my-component :global .external-ui-component {
   // ...
}

Вот более короткая форма:

      .my-component :global .external-ui-component {
   // ...
}

Вы пробовали встроенные стили для этого компонента?

https://reactjs.org/docs/dom-elements.html#style

const divStyle = {
  color: 'blue',
  backgroundImage: 'url(' + imgUrl + ')',
};

function HelloWorldComponent() {
  return <div style={divStyle}>Hello World!</div>;
}
Другие вопросы по тегам