63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# CSS/Sass Naming Conventions
|
|
|
|
Table of Contents:
|
|
|
|
- [Introduction](#introduction)
|
|
- [Prefixing](#prefixing)
|
|
- [Class names](#class-names)
|
|
- [Example](#example)
|
|
- [TL;DR](#tldr)
|
|
|
|
## Introduction
|
|
|
|
Our guidelines are based on those used in [Calypso](https://github.com/Automattic/wp-calypso), which itself follows the [BEM methodology](https://getbem.com/).
|
|
|
|
Refer to the [Calypso CSS/Sass Coding Guidelines](https://wpcalypso.wordpress.com/devdocs/docs/coding-guidelines/css.md) for full details.
|
|
|
|
Read more about [BEM key concepts](https://en.bem.info/methodology/key-concepts/).
|
|
|
|
There are a few differences in WooCommerce which are outlined below.
|
|
|
|
## Prefixing
|
|
|
|
As a WordPress plugin WooCommerce has to play nicely with WordPress core and other plugins/themes. To minimize conflict potential, all classes should be prefixed with `.woocommerce-`.
|
|
|
|
## Class names
|
|
|
|
When naming classes, remember:
|
|
|
|
- **Block** - Standalone entity that is meaningful on its own. Such as the name of a component.
|
|
- **Element** - Parts of a block and have no standalone meaning. They are semantically tied to its block.
|
|
- **Modifier** - Flags on blocks or elements. Use them to change appearance or behavior.
|
|
|
|
### Example
|
|
|
|
```css
|
|
/* Block */
|
|
.woocommerce-loop {}
|
|
|
|
/* Nested block */
|
|
.woocommerce-loop-product {}
|
|
|
|
/* Modifier */
|
|
.woocommerce-loop-product--sale {}
|
|
|
|
/* Element */
|
|
.woocommerce-loop-product__link {}
|
|
|
|
/* Element */
|
|
.woocommerce-loop-product__button-add-to-cart {}
|
|
|
|
/* Modifier */
|
|
.woocommerce-loop-product__button-add-to-cart--added {}
|
|
```
|
|
|
|
**Note:** `.woocommerce-loop-product` is not named as such because the block is nested within `.woocommerce-loop`. It's to be specific so that we can have separate classes for single products, cart products, etc. **Nested blocks do not need to inherit their parents full name.**
|
|
|
|
## TL;DR
|
|
|
|
- Follow the [WordPress Coding standards for CSS](https://make.wordpress.org/core/handbook/best-practices/coding-standards/css/) unless it contradicts anything here.
|
|
- Follow [Calypso guidelines for CSS](https://wpcalypso.wordpress.com/devdocs/docs/coding-guidelines/css.md).
|
|
- Use BEM for [class names](https://en.bem.info/methodology/naming-convention/).
|
|
- Prefix all class names.
|