Я создаю числовое текстовое поле с пользовательским интерфейсом материала, и оно не использует мою тему для цветов кнопок прокрутки.
Вот пример кода из документации Material UI и его скриншот на их сайте:
<TextField
id = "outlined-number"
label = "Number"
type = "number"
InputLabelProps = {{
shrink: true,
}}
/>
Вот скриншот из моего приложения React, когда я копирую и вставляю их пример:
Мой воспроизводимый пример кода состоит из двух файлов: App.js и ThemeUtil.js.
Приложение.js:
import React from 'react';
import darkTheme, {lightTheme, ThemeContext} from "./ThemeUtil";
import {Box, CssBaseline, TextField, ThemeProvider} from "@mui/material";
function App() {
const initialTheme = localStorage.getItem('theme') === 'light' ? lightTheme : darkTheme;
const [theme, setTheme] = React.useState(initialTheme);
const toggleTheme = () => {
setTheme(prevTheme => {
const newTheme = prevTheme === darkTheme ? lightTheme : darkTheme
localStorage.setItem('theme', newTheme === darkTheme ? 'dark' : 'light');
return newTheme;
});
}
return (
<ThemeContext.Provider value = {{theme, toggleTheme}}>
<ThemeProvider theme = {theme}>
<CssBaseline/>
<Box className = {"TestAppContainer"} sx = {{display: "flex", justifyContent: "center", alignItems: "center", width: "100vw", height: "100vh"}}>
<TextField
label = "Number"
type = "number"
InputLabelProps = {{
shrink: true,
}}
/>
</Box>
</ThemeProvider>
</ThemeContext.Provider>
);
}
export default App;
ThemeUtil.js:
import React from "react";
import {createTheme} from '@mui/material/styles';
const darkTheme = createTheme({
palette: {
mode: "dark",
},
typography: {
fontSize: 16,
},
});
const lightTheme = createTheme({
palette: {
mode: "light",
},
typography: {
fontSize: 16,
},
});
const ThemeContext = React.createContext({
theme: darkTheme, toggleTheme: () => {
}
});
export default darkTheme;
export {lightTheme, ThemeContext};
Как сделать кнопки прокрутки темными, как в примере на сайте Material UI? Можно ли изменить тему, чтобы установить для них указанный цвет?
Вам необходимо установить стиль color-scheme
на dark
в теге body
.
ПРИМЕЧАНИЕ. Откройте
DevTools
веб-сайтаMaterial UI
и вElement
окнах вы можете найти этуcolor-scheme
таблицу стилей в теге html.
function App() {
const darkTheme = MaterialUI.createTheme({
palette: {
mode: "dark",
},
});
const lightTheme = MaterialUI.createTheme({
palette: {
mode: "light",
},
});
const [dark, setDark] = React.useState(true);
return (
<MaterialUI.ThemeProvider theme = {dark ? darkTheme : lightTheme}>
<MaterialUI.CssBaseline />
<MaterialUI.Grid
container
justifyContent = "space-between"
alignItems = "center"
sx = {{
p: 2,
}}
>
<MaterialUI.TextField
id = "outlined-number"
label = "Number"
type = "number"
/>
<MaterialUI.Button
variant = "contained"
onClick = {() => {
setDark(!dark);
document.body.style.colorScheme = dark ? "light" : "dark";
}}
>
{dark ? "Light" : "Dark"}
</MaterialUI.Button>
</MaterialUI.Grid>
</MaterialUI.ThemeProvider>
);
}
ReactDOM.render(<App />, document.getElementById("root"));
<body style = "color-scheme:dark">
<div id = "root"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js"></script>
<script src = "https://unpkg.com/@mui/[email protected]/umd/material-ui.production.min.js"></script>
</body>