App đ https://ryanjyost.github.io/react-responsive-tutorial
Repo đ https://github.com/ryanjyost/react-responsive-tutorial
I love using inline styles in React. Almost as much as I dread dealing with media queries and traditional stylesheets to make my projects responsive.
I asked myself that question before starting to build my second personal site. For a handful of one-off situations, Iâd used JavaScript to calculate a transform, color, etc. with great effect. Why couldnât I take that strategy to the extreme and use JavaScript to handle all of my styling. (Ok, maybe not allâŠCSS is still the easiest way for hovered styling IMO and other common use cases.)
Mess around with your browser window size. All of the changes that take place at different screen sizes are driven entirely by JavaScript, with help from Reactâs fast re-rendering. If you find a bug, please let me know in the comments or via email, thanks!
While I found very few issues with this paradigm, Iâm definitely a little bit unsure/concerned about scalability, support on older browsers, performance, etc. Not yet convinced itâs a perfect alternative, and expect to find shortcomings/issues the deeper I go. But Iâm hopeful about using this paradigm going forward.
Create a new React app with create-react-app.
sudo npx create-react-app react-responsive-tutorial
Not sure when this started, but with create-react-app Iâve had to use sudo and chown the project directory after creation. So if you get any âEACCESSâ issues, donât be surprised.
If you have editing/EACCESS issues, chown the project directory (like the below snippet for a max/linux)
sudo chown -R $USER <path to>/react-responsive-tutorial
Enter the project and start it up.
cd react-responsive-tutorial
npm start
Letâs take a mobile-first design approach and set up the basic structure of our app thatâs optimized for small screen sizes.
Open up your App.js and paste the following code into it.
<a href="https://medium.com/media/1cd811ea919c26e02fd869cbe4ffacec/href">https://medium.com/media/1cd811ea919c26e02fd869cbe4ffacec/href</a>
Create a new folder in the src directory called components and add the three main layout components in there.
Topbar.js
<a href="https://medium.com/media/8d21af453ea229ebb6295fd0026d50d4/href">https://medium.com/media/8d21af453ea229ebb6295fd0026d50d4/href</a>
FooterMenu.js
<a href="https://medium.com/media/bf95ba7096ed408536766c1068ed2ff9/href">https://medium.com/media/bf95ba7096ed408536766c1068ed2ff9/href</a>
Content.js
<a href="https://medium.com/media/e491e16b8ac3bf2cb1c4b794f95a31fd/href">https://medium.com/media/e491e16b8ac3bf2cb1c4b794f95a31fd/href</a>
Yeah, not ideal. So, when the screen is wide enough (at 500px, for example), letâs show the text of the menu items in the <FooterMenu/>. But how do we know when the screen is 500px wide, without using media queries?
Hereâs some updated code to paste into App.js.
<a href="https://medium.com/media/7551bb7553ae2587cf73109cbd14445d/href">https://medium.com/media/7551bb7553ae2587cf73109cbd14445d/href</a>
Again in App.js, add a bool property to the styles object indicating whether the window is wide enough to show text in the <FooterMenu/> menu items.
<a href="https://medium.com/media/137880d947a2a9b3f98550bafa621e3f/href">https://medium.com/media/137880d947a2a9b3f98550bafa621e3f/href</a>
Now update FooterMenu.js to show the menu text when applicable (and add some margin to the icons, too).
<a href="https://medium.com/media/b846aaf09baf017fd4cd94380ab90312/href">https://medium.com/media/b846aaf09baf017fd4cd94380ab90312/href</a>
So, letâs update the styles and tweak the render function in App.js to accommodate and control the new Sidebar component. Hereâs the final App.js.
<a href="https://medium.com/media/3ce2b08af112738aa8eb8cce7f3468b8/href">https://medium.com/media/3ce2b08af112738aa8eb8cce7f3468b8/href</a>
Here are the notable changes in App.js aboveâŠ
Create a new component file called Sidebar.js, and paste the below code into it. Note all of the styling ternaries for handling the different styles at different screen sizes.
<a href="https://medium.com/media/cc7506d10ed47690afbec36bbf6a1a67/href">https://medium.com/media/cc7506d10ed47690afbec36bbf6a1a67/href</a>
The Sidebar is overlapping the main Content, so we have to make some final tweaks to Content.js to offset the content by however wide the Sidebar currently is, plus a little extra padding.
<a href="https://medium.com/media/7b3d3036afaf1971e22f8323a9d6d4d3/href">https://medium.com/media/7b3d3036afaf1971e22f8323a9d6d4d3/href</a>
Play around with your browser window and see how responsive the app is.