DEV Community

Ghost
Ghost

Posted on • Originally published at tyhopp.com on

3

Media query templates in styled components

Of late, the ‘CSS in JS’ approach to organizing stylesheets in a project has become ever more popular in the React ecosystem. I think there are two main reasons for this:

  • In a world where everything is a component, coupling styles with view code makes each component more manageable and sharable between projects.
  • The ability to use variables , especially by interpolating them with Javascript template literals, allows for an even greater amount of flexibility than what you get using a CSS preprocessor like SASS or LESS.

That being said, most people seem to favor one of two approaches to implementing CSS in JS: styled-components, and emotion. Both are similar in many respects, but most of my experience has been with the larger of the two projects, styled components.

In this post, I’ll touch on what I think is one of the neatest parts of how styled components can be used: media templates! Here's what the styled components docs have to say about it:

Since media queries are long and are often repeated throughout an application, it can be useful to create a template for them. Due to the functional nature of JavaScript, you can easily define your own tagged template literal to wrap styles in media queries.

Let me show you how I’m using this approach in my site:

I tuck the above code away in the utils directory, and then whenever I need to use a media query in any component throughout the project I can import and use it like so:

And that's it! There are many more exciting aspects of how to extend styled components, but of all of them, this solution to media queries is by far the most elegant and unique in my view. Hope you enjoy using this as much as I do, and happy querying!

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)