Я пытаюсь переопределить CSS Muidrawer-paper; он применяется локально после запуска «npm start», но не применяется при запуске пакета сборки.
.css-12i7wg6-MuiPaper-root-MuiDrawer-paper {
position: absolute !important;
top: 50px !important;
outline: 0;
left: 10px !important;
max-width: 35px;
padding-right: 35px !important;
background: color-mix(in srgb, #D8D8D8, transparent 18%) !important;
}
Мое локальное приложение:
После запуска пакета сборки:
Почему мой CSS не применяется в пакете сборки?
CSS должен быть одинаковым как в локальном пакете, так и в пакете сборки при запуске приложения реагирования.
Заголовок.js
import * as React from 'react';
import { styled, useTheme } from '@mui/material/styles';
import Box from '@mui/material/Box';
import MuiDrawer from '@mui/material/Drawer';
import MuiAppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import List from '@mui/material/List';
import ListItem from '@mui/material/ListItem';
import ListItemButton from '@mui/material/ListItemButton';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import Tooltip from '@mui/material/Tooltip';
import HomeIcon from '@mui/icons-material/Home';
import LayersIcon from '@mui/icons-material/Layers';
import './Header.css';
//comment
const drawerWidth = 240;
const openedMixin = (theme) => ({
width: drawerWidth,
transition: theme.transitions.create('width', {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.enteringScreen,
}),
overflowX: 'hidden',
});
const closedMixin = (theme) => ({
transition: theme.transitions.create('width', {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen,
}),
overflowX: 'hidden',
width: `calc(${theme.spacing(7)} + 1px)`,
[theme.breakpoints.up('sm')]: {
width: `calc(${theme.spacing(8)} + 1px)`,
},
});
const DrawerHeader = styled('div')(({ theme }) => ({
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-end',
padding: theme.spacing(0, 1),
// necessary for content to be below app bar
...theme.mixins.toolbar,
}));
const AppBar = styled(MuiAppBar, {
shouldForwardProp: (prop) => prop !== 'open',
})(({ theme, open }) => ({
zIndex: theme.zIndex.drawer + 1,
transition: theme.transitions.create(['width', 'margin'], {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen,
}),
...(open && {
marginLeft: drawerWidth,
width: `calc(100% - ${drawerWidth}px)`,
transition: theme.transitions.create(['width', 'margin'], {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.enteringScreen,
}),
}),
}));
const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })(
({ theme, open }) => ({
width: drawerWidth,
flexShrink: 0,
whiteSpace: 'nowrap',
boxSizing: 'border-box',
...(open && {
...openedMixin(theme),
'& .MuiDrawer-paper': openedMixin(theme),
}),
...(!open && {
...closedMixin(theme),
'& .MuiDrawer-paper': closedMixin(theme),
}),
}),
);
export default function MiniDrawer() {
const theme = useTheme();
const [open, setOpen] = React.useState(false);
const handleDrawerOpen = (index) => {
console.info("index",index)
setOpen(true);
};
const handleDrawerClose = () => {
setOpen(false);
};
return (
<Box sx = {{ display: 'flex' }}>
<AppBar position = "fixed" color = "default" >
<Toolbar variant = "dense">
</Toolbar>
</AppBar>
<Drawer variant = "permanent" open = {open}
sx = {{
"& MuiPaper-root.css-12i7wg6-MuiPaper-root-MuiDrawer-paper": {
position: "absolute !important",
minHeight: "fit-content !important",
top: "50px !important",
outline: 0, left: "10px !important", width: "35px", padding:" 35px !important", background: "color-mix(in srgb, #D8D8D8, transparent 18%) !important"
}
}}
// style = {{position: "absolute !important",top: "50px !important", outline: 0, left: "10px !important", width: "35px", padding:" 35px !important", background: "color-mix(in srgb, #D8D8D8, transparent 18%) !important"}}
>
<List>
{[
"Home",
"Layers",
].map((text, index) => (
<ListItem key = {text} disablePadding sx = {{ display: "block" }}>
<ListItemButton
sx = {{
minHeight: 48,
justifyContent: open ? 'initial' : 'center',
px: 2.5,
}}
>
<ListItemIcon
sx = {{
minWidth: 0,
mr: open ? 3 : 'auto',
justifyContent: 'center',
}}
>
<Tooltip title = "Home">
{index === 0 ? <HomeIcon />:null}
</Tooltip>
<Tooltip title = "Layers">
{index === 1 ? <LayersIcon />:null}
</Tooltip>
</ListItemIcon>
<ListItemText primary = {text} sx = {{ opacity: open ? 1 : 0 }} />
</ListItemButton>
</ListItem>
))}
</List>
</Drawer>
</Box>
);
}
Заголовок.css
.css-12i7wg6-MuiPaper-root-MuiDrawer-paper{
position: absolute !important;
top: 50px !important;
outline: 0;
left: 10px !important;
max-width: 35px;
padding-right: 35px !important;
background:color-mix(in srgb, #D8D8D8, transparent 18%) !important;
}
Приложение.js:
import logo from './logo.svg';
import './App.css';
import Registration from './components/Registration';
import Header from './components/Header';
import Paper from '@mui/material/Paper';
function App() {
return (
<div className = "App">
<Header />
<Paper className = 'footer' sx = {{ position: 'fixed', bottom: 0, left: 0, right: 0,backgroundColor:'rgba(217, 217, 217, 0.6)' }} elevation = {3}>
</Paper>
</div>
);
}
export default App;
Приложение.css:
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
Когда вы создаете приложение React для производства, пользовательский интерфейс Material меняет все имена классов, а ваш код минимизируется. По этой причине ваши переопределенные стили CSS не применяются, поскольку после создания рабочей сборки такого класса не существует.
Правильный подход к применению настроек в MUI предполагает создание темы и применение ее к корневому компоненту или добавление встроенных классов. Хотя вы можете использовать любой подход, я приведу пример использования встроенных классов, поскольку его будет легче понять, прежде чем полностью углубляться в настройку MUI.
Чтобы изменить стиль компонента бумаги внутри ящика, вам необходимо передать свойство PaperProps элементу ящика. Вот пример того, что вы хотите сделать:
Часть вашего кода Header.js (измененная)
return (
<Box sx = {{ display: 'flex' }}>
<AppBar position = "fixed" color = "default" >
<Toolbar variant = "dense">
</Toolbar>
</AppBar>
<Drawer
variant = "permanent"
open = {open}
PaperProps = {{
sx: {
position: "absolute !important",
top: "50px !important",
outline: 0,
left: "10px !important",
maxWidth: "35px",
paddingRight: "35px !important",
background: "color-mix(in srgb, #D8D8D8, transparent 18 %) !important"
}
}}
>
<List>
{[
"Home",
"Layers",
].map((text, index) => (
<ListItem key = {text} disablePadding sx = {{ display: "block" }}>
<ListItemButton
sx = {{
minHeight: 48,
justifyContent: open ? 'initial' : 'center',
px: 2.5,
}}
>
<ListItemIcon
sx = {{
minWidth: 0,
mr: open ? 3 : 'auto',
justifyContent: 'center',
}}
>
<Tooltip title = "Home">
{index === 0 ? <HomeIcon /> : null}
</Tooltip>
<Tooltip title = "Layers">
{index === 1 ? <LayersIcon /> : null}
</Tooltip>
</ListItemIcon>
<ListItemText primary = {text} sx = {{ opacity: open ? 1 : 0 }} />
</ListItemButton>
</ListItem>
))}
</List>
</Drawer>
</Box>
);
Я предполагаю, что это не проблема кода. Если можете, можете ли вы проверить эти вещи и добавить их в вопрос: 1. если вы проверите папку
build/
, появятся ли там ваши CSS-файлы? Добавьте список файлов, которые там отображаются. 2. Если вы откроете инструменты разработчика, появятся ли App.css и Header.css в ваших источниках/стилях? Видите ли вы какие-либо различия в инструментах разработчика между локальными и сборочными инструментами? (в консоли, в исходниках и т.д.). 3. Можете ли вы показать нам структуру папок вашего проекта, содержимое вашего package.json (всех, если их несколько) и любые другие файлы конфигурации?