inStyle
is a CSS authoring tool to append, insert or replace elements in the current selector (&
), giving you an intuitive way to style the current element based on parent variants without repeating complex queries. Enables fully nested CSS writing styles and wealth of one's soul.
Article: https://css-tricks.com/instyle-current-selector-sass/
Currently available for SASS 3.4+ and PostCSS.
What's new in 1.6.3:
- libsass 3.4+ compatibility (thanks andrezrv)
Appending a state to an existing parent is done with the <
special character. Each additional use of this character targets a higher parent (works the same for all features).
.my-app
display: block
.widget
border-radius: 5px
&.blue
color: blue
.isIE6 &
background-image: url("fake-borders.png")
+in('<.expanded')
color: red // .my-app.expanded .widget { };
@media (max-width: 768px)
float: left
You can also explicitly mention the compound selector, which is useful for filtering out undesired multiselector parents. May also be preferential for readability.
ul, ol
list-style: none
li
display: inline-block
a
text-decoration: underline
+in('ol.links')
color: orange // ol.links li a { };
Inserting a new selector at a certain position above the current element is done with the ^
special character.
.container
display: flex
div
flex: 1
span
color: red
+in('^.upside-down')
transform: rotate(180deg) // .container div .upside-down span { };
+in('^^[class^=foo]')
content: 'bar' // .container [class^=foo] div span { };
table
table-layout: fixed
thead
font-weight: normal
tr
height: 30px
+in('^thead')
height: 50px // table thead tr { };
Replacing a certain selector is done using the @
character. Multiselectors that become duplicit due to the replacement are removed from the rendered selector.
ul, ol
list-style: none
li
display: inline-block
a
text-decoration: underline
+in('@.cool')
background: pink // ul .cool a, ol .cool a { };
+in('@@.special-list')
color: orange // .special-list li a { };
- Infinitely nestable
- Any amount of modifications separated by a space
- Accepts multiselectors separated by a comma
- Validates all CSS input by SASS internal
selector-parse()
- Order of modifications makes no difference, RTL priority
Change any of the special characters to your preference by setting the following global variables:
$__inTagAppend: '<'
$__inTagInsert: '^'
$__inTagReplace: '@'
@import 'node_modules/inStyle/src/instyle'
in your SASS/SCSS stylesheet.
npm install inStyle
bower install inStyle
npm install
npm run test
- Stylus port (blocked by #1703)