'css and/or SASS + (sibling) selector upwards [duplicate]
In CSS there is no way to select a sibling with plus if the sibling is above in the output, a preceding element in the HTML.
For example
<div class="first">
<div class="second">
.second + .first {
//style applied to div.first
}
Is there anyway to do this in SASS/SCSS?
Solution 1:[1]
SASS supports all CSS3 selectors. Sibling + selector is one of them. But it does not bring some extra features.
It means you can do
.first {
+ .second {
font-size: smaller;
}
}
But you can't impact a parent with it...
P.S. It seems to be a feature of CSS4.
Solution 2:[2]
I know the feeling, this is really annoying. I found a quick way of doing it tho.
HTML
<div class="mainmenu">
<div class="subnav">
<ul>
<li>Whatever</li>
</ul>
</div>
</div>
SCSS
CSS is pointed towards to first child of div "mainmenu" with the > class "subnav"
.mainmenu{
& > .subnav{
// Child Selector SCSS HERE
}
}
@thgaskell, you have proved me wrong :) My code works fine and I lost 6KB of my Minified code! I have updated the code as how the comment below was informed.
Solution 3:[3]
May or may not be suitable for your needs but you can use the general sibling selector in Sass/CSS. This will select all elements on the same node level (not explicitly before but still handy):
.second {
.first ~ & {
/* styles to be applied to .second if a .first exists at the same node level */
}
}
Solution 4:[4]
I ended up using Jquery. gets the job done :) (sorry i dont have the example code anymore as i went another route, but its quite simple, something like 'if child has class then add class to this'. :)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Oleg Valter is with Ukraine |
| Solution 2 | |
| Solution 3 | |
| Solution 4 | petergus |
