How to get Material-UI Drawer to 'squeeze' other content when open
Similar to your "hacky" solution perhaps, but here's a jsFiddle: https://jsfiddle.net/88uq8751/3/
Same prinicipal. You nudge your content rightward the same distance as the drawer's width, and using the same transition/animation... This could be accomplished in a variety of ways using some form or combo of width, marginLeft, absolute position, maybe even transform:translate, but I used marginLeft below:
const { Drawer, RaisedButton, MuiThemeProvider, getMuiTheme } = MaterialUI;
class Example extends React.Component {
constructor(props) {
super(props);
this.state = { drawerOpen: false };
}
render() {
const contentStyle = { transition: 'margin-left 450ms cubic-bezier(0.23, 1, 0.32, 1)' };
if (this.state.drawerOpen) {
contentStyle.marginLeft = 256;
}
return (
<div>
<Drawer open={this.state.drawerOpen}>
<div style={{ textAlign: 'right' }}>
<RaisedButton onClick={() => this.setState({ drawerOpen: false }) }>X</RaisedButton>
</div>
{this.props.children}
</Drawer>
<div style={contentStyle}>
<RaisedButton onClick={() => this.setState({ drawerOpen: true }) }>Open</RaisedButton>
<p>
Lorem ipsum dolor sit amet, amet epicuri vel ea, noster causae oporteat has ut, ad est periculis concludaturque.Mundi docendi volutpat ut sea, an sea suas epicurei.Sea numquam definitionem ne.Te postea aliquip invidunt quo.Id prima commune complectitur pri, sed at vero posse contentiones, sea cu fugit etiam iusto.Ei mei prima appareat, est brute luptatum iudicabit id.Alii homero imperdiet usu id, dico meis alienum per ad, dolorem mentitum philosophia quo id.
</p><p>
Nec in dolor ancillae contentiones, at harum graecis his.An delectus scripserit pro.Ei dicta liber vis, sed no quidam legimus fabellas, no expetendis vituperata mei.Vim et ferri nominavi constituto.Wisi tamquam intellegebat duo in.Omittam adolescens abhorreant no sea.Cibo iusto verear ut mea, per at viris nominavi referrentur.
</p><p>
Sea officiis moderatius te.Graeci causae malorum ius in, cu has offendit tractatos interpretaris.Ea porro liberavisse mei, no mei propriae salutandi intellegat, te nibh singulis vim.Vim mucius feugait blandit ea.At est mollis vivendo.Eu has choro doctus verterem.Utroque suscipiantur ne eum, vix in alia intellegat.
</p><p>
Lorem ipsum dolor sit amet, amet epicuri vel ea, noster causae oporteat has ut, ad est periculis concludaturque.Mundi docendi volutpat ut sea, an sea suas epicurei.Sea numquam definitionem ne.Te postea aliquip invidunt quo.Id prima commune complectitur pri, sed at vero posse contentiones, sea cu fugit etiam iusto.Ei mei prima appareat, est brute luptatum iudicabit id.Alii homero imperdiet usu id, dico meis alienum per ad, dolorem mentitum philosophia quo id.
</p><p>
Nec in dolor ancillae contentiones, at harum graecis his.An delectus scripserit pro.Ei dicta liber vis, sed no quidam legimus fabellas, no expetendis vituperata mei.Vim et ferri nominavi constituto.Wisi tamquam intellegebat duo in.Omittam adolescens abhorreant no sea.Cibo iusto verear ut mea, per at viris nominavi referrentur.
</p><p>
Sea officiis moderatius te.Graeci causae malorum ius in, cu has offendit tractatos interpretaris.Ea porro liberavisse mei, no mei propriae salutandi intellegat, te nibh singulis vim.Vim mucius feugait blandit ea.At est mollis vivendo.Eu has choro doctus verterem.Utroque suscipiantur ne eum, vix in alia intellegat.
</p><p>
Lorem ipsum dolor sit amet, amet epicuri vel ea, noster causae oporteat has ut, ad est periculis concludaturque.Mundi docendi volutpat ut sea, an sea suas epicurei.Sea numquam definitionem ne.Te postea aliquip invidunt quo.Id prima commune complectitur pri, sed at vero posse contentiones, sea cu fugit etiam iusto.Ei mei prima appareat, est brute luptatum iudicabit id.Alii homero imperdiet usu id, dico meis alienum per ad, dolorem mentitum philosophia quo id.
</p><p>
Nec in dolor ancillae contentiones, at harum graecis his.An delectus scripserit pro.Ei dicta liber vis, sed no quidam legimus fabellas, no expetendis vituperata mei.Vim et ferri nominavi constituto.Wisi tamquam intellegebat duo in.Omittam adolescens abhorreant no sea.Cibo iusto verear ut mea, per at viris nominavi referrentur.
</p><p>
Sea officiis moderatius te.Graeci causae malorum ius in, cu has offendit tractatos interpretaris.Ea porro liberavisse mei, no mei propriae salutandi intellegat, te nibh singulis vim.Vim mucius feugait blandit ea.At est mollis vivendo.Eu has choro doctus verterem.Utroque suscipiantur ne eum, vix in alia intellegat.
</p>
</div>
</div>
);
}
}
const App = () => (
<MuiThemeProvider muiTheme={getMuiTheme() }>
<Example />
</MuiThemeProvider>
);
ReactDOM.render(
<App />,
document.getElementById('container')
);
Move content left and right to follow Drawer open / close (Material-UI)
You can create another div as direct child of 'main', and style it's margin-left conditionally.
first, create two new styles in style object:
shiftTextLeft: {
marginLeft: '0px'
},
shiftTextRight: {
marginLeft: drawerWidth,
}
And add the div in your component:
<main className={classes.content}>
<div className={this.state.isDrawerOpen ? classes.shiftTextRight : classes.shiftTextLeft}>
<div className={classes.toolbar} />
<Typography paragraph>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
etc...
</Typography>
<Typography paragraph>
Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla
... whatevs..
</Typography>
</div>
</main>
You can refer to this CodeSandbox example
Versions used:
- material-ui: 3.9.3
- material-ui-icons: 3.0.2
- react: 16.9.0
How to display the drawer list without overlapping using reactjs?
I've done some changes in your existing code.
https://codesandbox.io/s/competent-lovelace-7efpl
You can check the above link. Basically, you need to give sidebarWidth = margin-left
in the component beside sidebar.
This is important because sidebar has a fixed positioning. So if something is added beside it it will go behind the sidebar. Material UI grid is not required according to me.
Related Topics
Disable/Turn Off Inherited CSS3 Transitions
Why Does "Left: 50%, Transform: Translatex(-50%)" Horizontally Center an Element
How to Decode Base64-Encoded Font Information
Bootstrap Tables Overflowing with Long Unspaced Text
CSS Grid: Content to Use Free Space But Scroll When Bigger
Wrap a .Less CSS Definitions in a Namespace
Convert Letter-Tracking Value Set in Photoshop to Equivalent Letter-Spacing in CSS
Is There Any Guide on "When to Use Display:Block When :Inline and When :Inline-Block" and Why
Differencebetween Bootstrap.CSS and Bootstrap-Theme.Css
Google Chrome Showing Black Border on Focus State for Button User Agent Styles
Styling Qml Without Manually Marking Each Property to Be Styled
How to Visually Indicate Current Page in ASP.NET MVC
Bootstrap Fluid Layout - Fixed Width of Sidebar
Transition Color Fade on Hover
How to Create a Box When Mouse Over Text in Pure CSS
Edited Chrome Extension - Chrome Thinks It Is Malware
How to Override "::-Webkit-Scrollbar" CSS Rule and Make Scrollbar Visible Again