101 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # CSS Modules: Scope Locals & Extend
 | |
| 
 | |
| [](https://travis-ci.org/css-modules/postcss-modules-scope)
 | |
| 
 | |
| Transforms:
 | |
| 
 | |
| ```css
 | |
| :local(.continueButton) {
 | |
|   color: green;
 | |
| }
 | |
| ```
 | |
| 
 | |
| into:
 | |
| 
 | |
| ```css
 | |
| :export {
 | |
|   continueButton: __buttons_continueButton_djd347adcxz9;
 | |
| }
 | |
| .__buttons_continueButton_djd347adcxz9 {
 | |
|   color: green;
 | |
| }
 | |
| ```
 | |
| 
 | |
| so it doesn't pollute CSS global scope and can be simply used in JS like so:
 | |
| 
 | |
| ```js
 | |
| import styles from "./buttons.css";
 | |
| elem.innerHTML = `<button class="${styles.continueButton}">Continue</button>`;
 | |
| ```
 | |
| 
 | |
| ## Composition
 | |
| 
 | |
| Since we're exporting class names, there's no reason to export only one. This can give us some really useful reuse of styles:
 | |
| 
 | |
| ```css
 | |
| .globalButtonStyle {
 | |
|   background: white;
 | |
|   border: 1px solid;
 | |
|   border-radius: 0.25rem;
 | |
| }
 | |
| .globalButtonStyle:hover {
 | |
|   box-shadow: 0 0 4px -2px;
 | |
| }
 | |
| :local(.continueButton) {
 | |
|   compose-with: globalButtonStyle;
 | |
|   color: green;
 | |
| }
 | |
| ```
 | |
| 
 | |
| becomes:
 | |
| 
 | |
| ```
 | |
| .globalButtonStyle {
 | |
|   background: white;
 | |
|   border: 1px solid;
 | |
|   border-radius: 0.25rem;
 | |
| }
 | |
| .globalButtonStyle:hover {
 | |
|   box-shadow: 0 0 4px -2px;
 | |
| }
 | |
| :local(.continueButton) {
 | |
|   compose-with: globalButtonStyle;
 | |
|   color: green;
 | |
| }
 | |
| ```
 | |
| 
 | |
| **Note:** you can also use `composes` as a shorthand for `compose-with`
 | |
| 
 | |
| ## Local-by-default & reuse across files
 | |
| 
 | |
| You're looking for [CSS Modules](https://github.com/css-modules/css-modules). It uses this plugin as well as a few others, and it's amazing.
 | |
| 
 | |
| ## Building
 | |
| 
 | |
| ```
 | |
| npm install
 | |
| npm test
 | |
| ```
 | |
| 
 | |
| - Status: [](https://travis-ci.org/css-modules/postcss-modules-scope)
 | |
| - Lines: [](https://coveralls.io/r/css-modules/postcss-modules-scope?branch=master)
 | |
| - Statements: [](http://codecov.io/github/css-modules/postcss-modules-scope?branch=master)
 | |
| 
 | |
| ## Development
 | |
| 
 | |
| - `npm test:watch` will watch `src` and `test` for changes and run the tests
 | |
| 
 | |
| ## License
 | |
| 
 | |
| ISC
 | |
| 
 | |
| ## With thanks
 | |
| 
 | |
| - Mark Dalgleish
 | |
| - Tobias Koppers
 | |
| - Guy Bedford
 | |
| 
 | |
| ---
 | |
| 
 | |
| Glen Maddern, 2015.
 |