Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 # SCSS Media Query Style Proposal | |
2 | |
3 ## Background | |
4 | |
5 While working on Issue 5135, I wrote the responsive styles in this way: | |
6 | |
7 ``` | |
8 .h1 | |
9 { | |
10 margin: $xl 0 $lg 0; | |
11 font-size: $font-size-h1; | |
12 | |
13 @media (max-width: $tablet-breakpoint) | |
juliandoucette
2017/05/22 11:20:09
Note: CSS3 does support nested media queries. CSS2
ire
2017/05/23 00:03:49
Noted. I wasn't actually aware that CSS3 supported
juliandoucette
2017/05/24 11:44:18
Acknowledged.
| |
14 { | |
15 font-size: $font-size-h1 - 10px; | |
16 margin: $md 0 $lg 0; | |
17 } | |
18 } | |
19 ``` | |
20 | |
21 Julian asked me to make my case for this method, as opposed to the current metho d of one media query per file and having the responsive styles for each selector defined within. So, here it is. | |
22 | |
23 | |
24 ## Pros | |
25 | |
26 - It's, IMO, easier to read and understand. I think it's better to have all the styles for a class defined in one place, close together, rather than being scatt ered across different files or in different places of the same file. This also h elps to make sure you don't accidentally have duplicate styles, because you can see all the styles related to this one element in one place. | |
27 | |
28 - It's easier to debug. Following on from my previous point, it's easier to debu g styles related to a selector if they are all defined in one place. | |
29 | |
30 - It's consistent with the concept of "encapsulated modules". Instead of groupin g styles by breakpoints, we group styles by component. This makes is easier to s hare components across projects. | |
31 | |
32 - It outputs cleaner CSS (IMO anyway). Particularly if we follow a "mobile-first " method for defining our styles, i.e. using `min-width` based media queries ins tead of `max-width` (and define them in the correct order). Styles will be laid out in a nice logical order, from mobile styles to styles for progressively larg er screen sizes. | |
33 | |
34 | |
35 ## Cons & Workarounds | |
36 | |
37 - The major issue with this method is that, by default, it ends up outputting mo re CSS because each media query is duplicated. For example, see the `css/default .css` file/. However, this can be resolved with a postcss plugin I found, [css-m qpacker](https://github.com/hail2u/node-css-mqpacker). This plugin consolidates media queries so we don't get duplicates, see the `css/packed.css` file. Somethi ng to note with this is that declarations will be reordered a bit since they are packed together. In my experience, this shouldn't be a problem since styles are still roughly in the same order as defined. | |
juliandoucette
2017/05/22 11:20:09
Good find. It looks like this also works with sour
ire
2017/05/23 00:03:49
Thanks!
Thomas Greiner
2017/05/23 12:17:49
I can imagine that reordering CSS rules could caus
saroyanm
2017/05/23 14:55:24
You mean that compression fix duplication ?
Or th
ire
2017/05/23 17:20:11
Yes there could be issues here, but since we know
Thomas Greiner
2017/05/23 18:30:35
Since compression usually works quite well with re
juliandoucette
2017/05/24 11:44:18
I created a proof of concept where the order of me
ire
2017/05/24 13:06:27
I think we may be talking about different things.
ire
2017/05/24 13:06:27
Yes I totally agree that there are cases where ord
juliandoucette
2017/05/30 10:10:47
I would like to discuss mqpacker in a separate iss
| |
38 | |
39 - Another potential con with this method is potentially ending up with a larger variety of media queries. This shouldn't be much of a problem for us, as I see w e already use standard breakpoints abstracted into SCSS variables to keep things consistent. | |
juliandoucette
2017/05/22 11:20:09
Another point:
See https://helloanselm.com/2014/w
ire
2017/05/23 00:03:49
I haven't been able to find anything about this. M
juliandoucette
2017/05/24 11:44:17
Acknowledged.
| |
OLD | NEW |