Я знаю, что мы можем редактировать тему материал UI, но я думал о том, чтобы сделать ее динамической, где мы можем установить переменные SASS, и она автоматически обновит тему пользовательского интерфейса материала.
Я использую sass для разработки своей страницы, и вот пример переменных, которые я использую:
$primary-color: #1E79C7;
$secondary-color: #E5681A;
В настоящее время я делаю следующее для кнопки пользовательского интерфейса материала, потому что хочу, чтобы мой дизайн был как можно больше в одном месте.
.app-button-blue {
background-color: $primary-color !important;
margin: 5px;
}
.app-button-gray {
background: transparent !important;
box-shadow: none !important;
}
.app-button-white {
background: transparent !important;
box-shadow: none !important;
border: $primary-color solid 1px !important;
}
Есть ли у меня способ использовать эти переменные SASS для перезаписи темы пользовательского интерфейса материала - например, установить первичный и вторичный цвета?
@LukePeavey, я обновил свой вопрос. Надеюсь, это поможет вам понять мой вопрос! Спасибо :)
круто, плохо взгляну еще раз





Пользовательский интерфейс материала использует решение стиля на основе javascript (JSS) вместо препроцессора CSS, такого как SCSS (см. стилевое решение).
Это означает, что невозможно настроить тему пользовательского интерфейса материала с помощью переменных SCSS. Также невозможно получить доступ к теме в ваших стилях CSS / SCSS.
Если вы хотите использовать SCSS для стилизации / тематики, вы можете вместо этого рассмотреть Материальные веб-компоненты.
можно ли использовать материальные веб-компоненты в Reactjs?
@SamYC ReactJs не заботится о том, как вы будете передавать стили компонентам. Вы можете использовать css, scss, jss или другие технологии для создания стиля HTML, созданного с помощью reactjs.
Material-UI использует стили на основе JS, но ими тоже можно легко манипулировать. material-ui.com/customization/components проверьте образцы кода там. Для него есть makeStyles. Внутренний код makeStyles похож на scss. Можно даже использовать '&: hover' и тому подобное.
Возможно, это не совсем то, чего вы хотели достичь, но в следующей статье объясняется, как можно экспортировать переменные SASS. https://til.hashrocket.com/posts/sxbrscjuqu-share-scss-variables-with-javascript Впоследствии вы можете импортировать их в JS и использовать их для настройки своей темы.
Пример по этой проблеме GitHub подсказывает, как это можно сделать.
import React from 'react';
import { withStyles } from '@material-ui/core';
const cssVariables = (theme) => ({
'@global': {
':root': {
'--color-primary': theme.palette.primary.main,
'--color-secondary': theme.palette.secondary.main,
}
}
});
const RootComponent = () => {
return <div>Whatever...</div>
}
export default withStyles(cssVariables, RootComponent);
Имея в виду, что RootComponent инициализируется внутри ThemeProvider.
Можно заполнить тему MaterialUI из переменных Sass / Scss, используя Webpack wizadry
$primary: #1E79C7;
$secondary: #E5681A;
:export {
primary: $primary;
secondary: $secondary;
}
import { createMuiTheme } from '@material-ui/core/styles'
import palette from './palette.scss'
export const theme = createMuiTheme({
palette: {
primary: {
main: palette.primary,
},
secondary: {
main: palette.secondary,
},
}
})
import React from 'react'
import { ThemeProvider } from '@material-ui/core/styles'
import { theme } from './theme'
export const App = () => {
return (
<ThemeProvider theme = {theme}>
// App
</ThemeProvider>
)
}
Это означает, что вы можете использовать Sass для стилизации и раскрашивания компонентов пользовательского интерфейса, не являющегося материальным, и пользовательского интерфейса материала из одного источника правды.
Чтобы стилизовать другие компоненты, просто используйте импорт Sass
@import './palette.scss'
.app-button-blue {
background-color: $primary; // removed !important cos there's usually a better way
margin: 5px;
}
Не могли бы вы пояснить, что вы имеете в виду, делая тему динамичной.