Most of the tutorials I'm reading on using Media Queries are demonstrating the use of min-width
, but I'm rarely seeing people using max-width
.
Is this some sort of design trend, or pattern, why people are using min-width
over max-width
?
For example, I'm designing a site starting from mobile, working up to the desktop. I am using Foundation 4, but using media queries to remove various elements on the page and re-position the source order.
One thing I am facing is a custom navigation for any device who's width is 360px or less. I want them to have a vertical navigation, rather than an inline horizontal. So my idea was to use max-width
to target these devices.
Should I be using min-width
instead if I am designing mobile first? I.e. all the default styles are for mobile, and thus using min-width
to progressively enhance the layout?
In short, min-width is a mobile 1st approach, max-width is a desktop 1st approach.
Min-width is the minimum width at which a style will START to be applied. (Have to be ordered from smallest to largest to work properly, regular styles first). Put another way: If device width is greater than or equal to..., then apply some specific styles. With min-width, styles START and continue forever as long as min-width is met, and no max-width is specified.
Max-width is the maximum width at which a style will continue to be applied. After that, the style will STOP being applied. (Have to be ordered from largest to smallest to work properly, regular styles first). Put another way: If device width is less than or equal to..., then apply specific styles. Styles STOP as soon as width greater than max-width is hit.
Finally, It depends on how you want to implement. There is no ONE RIGHT solution as some may claim. In my opinion min-width works great when starting from scratch, but max-width often makes more sense to me when retrofitting an existing web site.
2 Part Answer
Part 1: To answer "why people are using min-width over max-width?":
It has to do with design flow. Typically, with min-width patterns, you're designing mobile-first. With max-width patterns, you're design desktop-first.
Going mobile-first with min-width, the default style is the mobile style. Queries after that then target progressively larger screens.
Conversely, using max-width, is desktop-first then adds queries to make styles mobile-friendly
Part 2: For your particular custom navigation for any device who's width is 360px or less:
You could include that as a separate max-width query, IF thats the only exception to the rule. OR use that style as your baseline, then change it for wider screens.
If you do an exception (which isn't really following mobile-first design methods), it'd be something like:
I had a unresponsive website first, designed for desktops. Then added responsiveness by adding max-width media queries.
My site now has layouts for 320px, 480px, 768px, 960px, and 1024px etc. wide devices, and so I have added media queries that look like
max-width: 479px
,max-width: 767px
,max-width: 959px
etc. This works fine - the site behaves as it should.However, I've recently found that the Chrome Developer Tools "Device Mode" has a Media Queries Tool that is really, really useful to me. It allows me to click to display the website at each media query level that Chrome finds on my page. This is a great help to me when designing the responsive layouts.
The Media Queries Tool uses the numbers it finds in the media queries, i.e. 479, 767, 959, 1023 etc. But this means that, for example, if I want to see what how my layout for a 480px-wide device looks, I have to click the max-width 767px level media query, which to me is quite unintuitive.
This has made me rethink my current desktop-first CSS, and I will be rewriting my CSS using a mobile-first approach.
I think the mobile-first CSS using
min-width
will be much more readable, because you will see a media query formin-width: 480px
and know that will be the CSS for a 480px-wide device.Because you're developing a website starting with a mobile design and increasing complexity with resolution, I would advise going with
min-width
because that follows the same work pattern.Technically,
min-width
is "mobile first" in the sense that you generally begin developing for mobile and add more complexity as the resolution increases.However, the term gained popularity more so over its alternative meaning which has generally come to imply more about an increase of focus on mobile efforts and prioritization (mostly fueled by clients or management that don't understand the technical inference). That is likely why you end up seeing a lot of
min-width
examples online (trendy bloggers writing about trendy topics).When I work with complex desktop designs, I personally find it easier to write
max-width
queries to "simplify the equation" so-to-speak. But usingmax-width
queries does not prevent you from focusing on mobile and can still completely be a part of a "mobile first" strategy.In either case, the most important thing is consistency. Use one and stick to it for that project. A project can become very confusing if it uses both.
As a final note, using less queries when possible is ideal. This can be achieved through good responsive design.
The majority of sites I've been working on are designed for desktop first and in these cases using
max-width
queries makes sense. Generally if you are starting small screen first usemin-width
and then build on top with media queries targeting larger resolutions.You can of course mix both min and max queries to get specific resolutions
Maybe have a look at using
min-device-width
for the specific issue you're having with the navigationIt really depends on how your stylesheet works. For example:
The above two media queries would make the
body
font bold if the screen is greater than or equal to 100px, but also make the color#555
if it's greater than or equal to 200px;Another example:
Unlike the first example, this makes the
body
font bold and color#555
only if the screen width is between 0 and 100px. If it's between 0px and 200px it will be color#555
.The beauty of media queries is that you can combine these statements:
In this example you are only targeting devices with a width between 100px and 200px - nothing more, nothing less.
In short, if you want your styles to leak out of media queries you'd use either
min-width
ormax-width
, but if you're wanting to affect a very specific criteria you can just combine the two.