csscomb.js
csscomb.js copied to clipboard
Sass: Option to add new line before pseudo elements
Is it possible to add a new life before pseudo elements like &:before, &:after, &:focus etc?
Edit: I'm using the dev build
Before:
.folder-button{
color: #000;
background-color: #fff;
&:hover{
color: #fff;
background-color: #000;
}
}
After:
.folder-button{
color: #000;
background-color: #fff;
&:hover{
color: #fff;
background-color: #000;
}
}
Result I want:
.folder-button{
color: #000;
background-color: #fff;
&:hover{
color: #fff;
background-color: #000;
}
}
My config:
"always-semicolon": true,
"block-indent": 4,
"color-case": "lower",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": false,
"remove-empty-rulesets": true,
"space-after-colon": " ",
"space-after-combinator": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-closing-brace": "\n",
"space-before-colon": "",
"space-before-combinator": " ",
"space-before-opening-brace": "",
"space-before-selector-delimiter": "",
"strip-spaces": true,
"unitless-zero": true,
"vendor-prefix-align": true,
In fact, is it possible to add a new file before each new selector inside another selector?
Example:
Before:
h2{
font: $font-lastnews-article-h2;
font-weight: 600;
a{
text-decoration: none;
color: white;
&:hover{
text-decoration: underline;
}
}
}
After:
h2{
font: $font-lastnews-article-h2;
font-weight: 600;
a{
text-decoration: none;
color: white;
&:hover{
text-decoration: underline;
}
}
}
Result I want:
h2{
font: $font-lastnews-article-h2;
font-weight: 600;
a{
text-decoration: none;
color: white;
&:hover{
text-decoration: underline;
}
}
}
Do you really have
.folder-button{
color: #000;
background-color: #fff;
&:hover{...}
}
translated to
.folder-button{
color: #000;
background-color: #fff;
&:hover{...}
}
? I mean the empty line that is jumping around.
Thanks for your quick reply, that was just to show that the sort-order works. Here's another example:
Before:
.folder-button{
width: 100%;
display: block;
position: relative;
opacity: 0;
&:hover{
opacity: 1;
}
}
After:
.folder-button{
display: block;
position: relative;
width: 100%;
opacity: 0;
&:hover{
opacity: 1;
}
}
Result I want:
.folder-button{
display: block;
position: relative;
width: 100%;
opacity: 0;
// This is the line I want to add ↓
&:hover{
opacity: 1;
}
}
Thanks :)
Ah, you have sort-order option set.
I've thought there is a bug somewhere :)
In fact, is it possible to add a new file before each new selector inside another selector?
I guess we should add an option like rule-delimiter which will set spaces between rulesets and media queries (this has been already discussed in #92).
It seems to me that this option should be more important than space-after-declaration (see #197).
So we can have, for example: { 'space-after-declaration': 1, 'rule-delimiter': '\n\n' }
// Before
a {
color: tomato;
top: 0;
panda {
position: happy;
}
raccoon {
a: b;
}
foo: bar;
}
// After
a {
color: tomato; top: 0;
panda {
position: happy;
}
raccoon {
a: b;
}
foo: bar;
}
Hm... I still don't understand why there is no empty line before &:hover.
Can you show your full config, please?
Including sort order.
Hm... I still don't understand why there is no empty line before &:hover. Can you show your full config, please? Including sort order.
I really appreciate your help, here's my full config:
{
"exclude": [
".git/**",
"node_modules/**",
"bower_components/**"
],
"always-semicolon": true,
"block-indent": 4,
"color-case": "lower",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": false,
"remove-empty-rulesets": true,
"space-after-colon": " ",
"space-after-combinator": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-closing-brace": "\n",
"space-before-colon": "",
"space-before-combinator": " ",
"space-before-opening-brace": "",
"space-before-selector-delimiter": "",
"strip-spaces": true,
"unitless-zero": true,
"vendor-prefix-align": true,
"sort-order": [
[
"$variable"
],
[
"$include"
],
[
"content",
"display",
"visibility",
"float",
"clear",
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"overflow",
"overflow-x",
"overflow-y",
"-ms-overflow-x",
"-ms-overflow-y",
"clip",
"zoom",
"flex-direction",
"flex-order",
"flex-pack",
"flex-align"
],
[
"-webkit-box-sizing",
"-moz-box-sizing",
"box-sizing",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left"
],
[
"font",
"font-family",
"font-size",
"font-weight",
"font-style",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"line-height"
],
[
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image"
],
[
"quotes",
"counter-reset",
"counter-increment",
"resize",
"cursor",
"-webkit-user-select",
"-moz-user-select",
"-ms-user-select",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"-webkit-transition",
"-moz-transition",
"-ms-transition",
"-o-transition",
"transition",
"-webkit-transition-delay",
"-moz-transition-delay",
"-ms-transition-delay",
"-o-transition-delay",
"transition-delay",
"-webkit-transition-timing-function",
"-moz-transition-timing-function",
"-ms-transition-timing-function",
"-o-transition-timing-function",
"transition-timing-function",
"-webkit-transition-duration",
"-moz-transition-duration",
"-ms-transition-duration",
"-o-transition-duration",
"transition-duration",
"-webkit-transition-property",
"-moz-transition-property",
"-ms-transition-property",
"-o-transition-property",
"transition-property",
"-webkit-transform",
"-moz-transform",
"-ms-transform",
"-o-transform",
"transform",
"-webkit-transform-origin",
"-moz-transform-origin",
"-ms-transform-origin",
"-o-transform-origin",
"transform-origin",
"-webkit-animation",
"-moz-animation",
"-ms-animation",
"-o-animation",
"animation",
"-webkit-animation-name",
"-moz-animation-name",
"-ms-animation-name",
"-o-animation-name",
"animation-name",
"-webkit-animation-duration",
"-moz-animation-duration",
"-ms-animation-duration",
"-o-animation-duration",
"animation-duration",
"-webkit-animation-play-state",
"-moz-animation-play-state",
"-ms-animation-play-state",
"-o-animation-play-state",
"animation-play-state",
"-webkit-animation-timing-function",
"-moz-animation-timing-function",
"-ms-animation-timing-function",
"-o-animation-timing-function",
"animation-timing-function",
"-webkit-animation-delay",
"-moz-animation-delay",
"-ms-animation-delay",
"-o-animation-delay",
"animation-delay",
"-webkit-animation-iteration-count",
"-moz-animation-iteration-count",
"-ms-animation-iteration-count",
"-o-animation-iteration-count",
"animation-iteration-count",
"-webkit-animation-direction",
"-moz-animation-direction",
"-ms-animation-direction",
"-o-animation-direction",
"animation-direction",
"text-align",
"-webkit-text-align-last",
"-moz-text-align-last",
"-ms-text-align-last",
"text-align-last",
"vertical-align",
"white-space",
"text-decoration",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-indent",
"-ms-text-justify",
"text-justify",
"letter-spacing",
"word-spacing",
"-ms-writing-mode",
"text-outline",
"text-transform",
"text-wrap",
"text-overflow",
"-ms-text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"-ms-word-wrap",
"word-wrap",
"word-break",
"-ms-word-break",
"-moz-tab-size",
"-o-tab-size",
"tab-size",
"-webkit-hyphens",
"-moz-hyphens",
"hyphens",
"pointer-events"
],
[
"opacity",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
"-ms-interpolation-mode",
"color",
"border",
"border-width",
"border-style",
"border-color",
"border-top",
"border-top-width",
"border-top-style",
"border-top-color",
"border-right",
"border-right-width",
"border-right-style",
"border-right-color",
"border-bottom",
"border-bottom-width",
"border-bottom-style",
"border-bottom-color",
"border-left",
"border-left-width",
"border-left-style",
"border-left-color",
"-webkit-border-radius",
"-moz-border-radius",
"border-radius",
"-webkit-border-top-left-radius",
"-moz-border-radius-topleft",
"border-top-left-radius",
"-webkit-border-top-right-radius",
"-moz-border-radius-topright",
"border-top-right-radius",
"-webkit-border-bottom-right-radius",
"-moz-border-radius-bottomright",
"border-bottom-right-radius",
"-webkit-border-bottom-left-radius",
"-moz-border-radius-bottomleft",
"border-bottom-left-radius",
"-webkit-border-image",
"-moz-border-image",
"-o-border-image",
"border-image",
"-webkit-border-image-source",
"-moz-border-image-source",
"-o-border-image-source",
"border-image-source",
"-webkit-border-image-slice",
"-moz-border-image-slice",
"-o-border-image-slice",
"border-image-slice",
"-webkit-border-image-width",
"-moz-border-image-width",
"-o-border-image-width",
"border-image-width",
"-webkit-border-image-outset",
"-moz-border-image-outset",
"-o-border-image-outset",
"border-image-outset",
"-webkit-border-image-repeat",
"-moz-border-image-repeat",
"-o-border-image-repeat",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"background",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"background-color",
"background-image",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"-ms-background-position-x",
"background-position-y",
"-ms-background-position-y",
"-webkit-background-clip",
"-moz-background-clip",
"background-clip",
"background-origin",
"-webkit-background-size",
"-moz-background-size",
"-o-background-size",
"background-size",
"box-decoration-break",
"-webkit-box-shadow",
"-moz-box-shadow",
"box-shadow",
"filter:progid:DXImageTransform.Microsoft.gradient",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
"text-shadow"
]
]
}
That's a bug, I confirm that it's reproducible both in master and dev.
There should definitely be an empty line before &:hover.
Will try to include the fix in next release.
Thank you!
As for empty lines before every rule set, I've opened #210 for discussion.
I really appreciate your help! I will wait for the next release :)
Any idea when it will be available? I've read that there's a release planned for march, is it still the case? Thanks!
We've postponed it for a month, so April it is :)
@tonyganch Is this still an issue in the latest version? I'm seeing it in my code.
This:
label {
margin-bottom: $v-space / 2;
font-weight: bold;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
&:active {
color: $active-link-color;
}
}
turns into this:
label {
margin-bottom: $v-space / 2;
font-weight: bold;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
&:active {
color: $active-link-color;
}
}
Yeap, I confirm. Newlines still stripped away for some reason
yep, same here as @tonyganch. Any word on this?
Not working for me - https://gist.github.com/thebugs/977813e0040a4145cf9d
Same story
I wish it would be this option too.