PostCSS
PostCSS is a post-processor tool that provide developers with multiple web development plugins.
Ravenbright CSS consists of smaller independent CSS files. You can freely import or remove them based on your needs by using Import plugin with PostCSS.
Installing the PostCSS​
Create or open your project directory then, cd
into that directory.
npm i -D postcss postcss-cli
Once the installation is finished, the PostCSS command will be available in your CLI. After that you can check whether PostCSS is already installed by writing this command
npx postcss --version
Adding the plugins​
PostCSS is now installed. Ravenbright currently uses 3 plugins in PostCSS. You can import CSS files & use SASS-like functionalities in native CSS.
- Run these commands below to install the plugins
npm i postcss-import
npm i postcss-nesting
npm i postcss-mixins
- Write this config file in your root directory & it's done!
module.exports = {
plugins: [
require('postcss-mixins'),
require('postcss-import'),
require('postcss-nested'),
]
}
Learn more about the plugins from these official PostCSS repository
Compiling CSS file​
It's time to compile the CSS code. PostCSS and its plugin will transform Ravenbright CSS into your chosen output directory.
Create or navigate into Ravenbright CSS or your project directory.
Run this following command inside your project directory
npx postcss main.css --output dist/ravenbright.min.css --watch
To speed up our development workflow, lets' add 'compile and watch' command script.
- Open
package.json
file. Then, copy and paste this code
{
"scripts": {
"buildcss": "npx postcss main.css --output dist/ravenbright.min.css --watch",
"buildcss-dark": "npx postcss main.css --output dist/ravenbright-dark.min.css --watch"
}
}
The PostCSS --watch script will automatically compile your CSS file when there exist changes inside your source code. Your CLI will also show "waiting for file changes" and report the emerging issues.
Import plugin​
Let's begin with badge & button components. Navigate to Ravenbright project directory
cd directory
Create or open main.css. (a CSS file which used to gather all the relevant other CSS files). Put all the components & utilities inside src directory. You can read about this on directory structure
Then, write these code below into main.css
Make sure to place the utilities
files on the last line of main.css
to make the CSS cascade works.
@import "src/reset.css";
@import "src/css-variable.css";
@import "src/components/button.css";
@import "src/utilities/flexbox.css";
@import "src/utilities/width.css";
After that, we can compile the main.css file using this command below.
npx postcss main.css --output dist/ravenbright.min.css
Nesting plugin​
To better understand the nesting syntax in PostCSS, let's begin with button component. Navigate to the button.css file inside the components
directory. Check this code below to see the real example of nesting in PostCSS
button,
.btn {
display: flex;
align-items: center;
justify-content: center;
font-weight: var(--rbrh-font-weight-semibold);
background-color: var(--rbrh-green-600);
border-radius: var(--rbrh-radius-sm);
color: var(--rbrh-white);
padding: var(--rbrh-spacing-4) var(--rbrh-spacing-6);
&:hover {
transform: translateY(-3px);
transition: transform 0.2s ease;
}
&:target,
&:focus {
box-shadow: var(--rbrh-shadow-focus);
outline: 0;
}
&:active {
transform: translate(var(--rbrh-spacing-1), var(--rbrh-spacing-1));
box-shadow: 0 1px 2px var(--rbrh-gray-100) inset;
}
}
Mixins plugin​
Ravenbright only defines 2 mixins to simplify the process of creating media queries & define the text styles (font-size, line-height & letter-spacing)
@define-mixin screen-sm-up {
@media (min-width: 36rem) {
@mixin-content;
}
}
@define-mixin screen-md-up {
@media (min-width: 48rem) {
@mixin-content;
}
}
@define-mixin font-size-3xl {
font-size: var(--rbrh-font-size-3xl);
line-height: var(--rbrh-line-h-3xl);
letter-spacing: var(--rbrh-letter-spacing-sm);
}
@define-mixin font-size-2xl {
font-size: var(--rbrh-font-size-2xl);
line-height: var(--rbrh-line-h-xl);
letter-spacing: var(--rbrh-letter-spacing-md);
}
This is how you use the mixin inside the CSS selectors
/* Make a responsive large button: */
.button-large {
@mixin screen-xs-up {
@mixin font-size-sm;
padding: var(--rbrh-spacing-4) var(--rbrh-spacing-6);
}
@mixin screen-lg-up {
@mixin font-size-md;
padding: var(--rbrh-spacing-5) var(--rbrh-spacing-7);
}
}
Troubleshoot​
If PostCSS is not detected in your system:
- check the "PATH" directory inside the Settings in your Operating System.
- read about this issue on PostCSS official docs