diff --git a/.gitignore b/.gitignore index c8ceb27434..d98495eec9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /docs/_build/ /.tox/ /venv +/node_modules/ diff --git a/.scss-lint.yml b/.scss-lint.yml new file mode 100644 index 0000000000..5589b866c9 --- /dev/null +++ b/.scss-lint.yml @@ -0,0 +1,154 @@ + +scss_files: 'wagtail/*/static/**/*.scss' +exclude: 'wagtail/**/static/**/vendor/*.scss' + +linters: + BorderZero: + enabled: true + + Indentation: + severity: warning + width: 4 + allow_non_nested_indentation: true + character: space + + ColorKeyword: + enabled: true + + ColorVariable: + enabled: true + + BangFormat: + space_before_bang: true + space_after_bang: false + + Comment: + enabled: true + + DeclarationOrder: + enabled: true + + DuplicateProperty: + enabled: false + + ElsePlacement: + enabled: true + + EmptyLineBetweenBlocks: + enabled: true + + EmptyRule: + enabled: true + + FinalNewline: + present: true + + HexLength: + style: short + + HexNotation: + style: lowercase + + HexValidation: + enabled: true + + IdSelector: + enabled: true + + ImportantRule: + enabled: true + + ImportPath: + enabled: true + + LeadingZero: + style: exclude_zero + + MergeableSelector: + enabled: false + + NameFormat: + allow_leading_underscore: true + + NestingDepth: + max_depth: 4 + + SelectorDepth: + max_depth: 3 + + SelectorFormat: + convention: hyphenated_lowercase + ignored_names: + - js_class + ignored_types: + - element + + PlaceholderInExtend: + enabled: true + + PropertyCount: + enabled: false + + QualifyingElement: + allow_element_with_attribute: false + allow_element_with_class: false + allow_element_with_id: false + + Shorthand: + enabled: true + + SingleLinePerProperty: + enabled: true + allow_single_line_rule_sets: true + + SingleLinePerSelector: + enabled: true + + SpaceAfterComma: + enabled: true + + SpaceAfterPropertyColon: + style: at_least_one_space + + SpaceAfterPropertyName: + enabled: true + + SpaceBeforeBrace: + enabled: true + allow_single_line_padding: true + style: space + + SpaceBetweenParens: + enabled: true + + StringQuotes: + style: single_quotes + + TrailingSemicolon: + enabled: true + + TrailingZero: + enabled: true + + UnnecessaryMantissa: + enabled: true + + UnnecessaryParentReference: + enbabled: true + + UrlFormat: + enabled: true + + UrlQuotes: + enabled: true + + VariableForProperty: + enabled: false + + VendorPrefix: + enabled: false + + ZeroUnit: + enabled: true + + diff --git a/docs/contributing/css_guidelines.rst b/docs/contributing/css_guidelines.rst new file mode 100644 index 0000000000..26d1e5e123 --- /dev/null +++ b/docs/contributing/css_guidelines.rst @@ -0,0 +1,168 @@ +CSS coding guidelines +=========================== + +Our CSS is written in Sass, using the SCSS syntax. + +Spacing +~~~~~~~ + +- Use soft-tabs with a four space indent. Spaces are the only way to + guarantee code renders the same in any person's environment. +- Put spaces after ``:`` in property declarations. +- Put spaces before ``{`` in rule declarations. +- Put line breaks between rulesets. +- When grouping selectors, keep individual selectors to a single line. +- Place closing braces of declaration blocks on a new line. +- Each declaration should appear on its own line for more accurate + error reporting. +- Add a newline at the end of your ``.scss`` files. +- Strip trailing whitespace from your rules. + +Formatting +~~~~~~~~~~ + +- Use hex color codes ``#000`` unless using ``rgba()`` in raw CSS + (SCSS' ``rgba()`` function is overloaded to accept hex colors as a + param, e.g., ``rgba(#000, .5)``). +- Use ``//`` for comment blocks (instead of ``/* */``). +- Use single quotes for string values + ``background: url('my/image.png')`` or ``content: 'moose'`` +- Avoid specifying units for zero values, e.g., ``margin: 0;`` instead + of ``margin: 0px;``. +- Strive to limit use of shorthand declarations to instances where you + must explicitly set all the available values. + +Sass imports +~~~~~~~~~~~~ + +Leave off underscores and file extensions in includes: + +.. code-block:: scss + + // Bad + @import 'components/_widget.scss' + + // Better + @import 'components/widget' + +Pixels vs. ems +~~~~~~~~~~~~~~ + +Use ``rems`` for ``font-size``, because they offer +absolute control over text. Additionally, unit-less ``line-height`` is +preferred because it does not inherit a percentage value of its parent +element, but instead is based on a multiplier of the ``font-size``. + +Specificity (classes vs. ids) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Always use classes instead of IDs in CSS code. IDs are overly specific and lead +to duplication of CSS. + +When styling a component, start with an element + class namespace, +prefer direct descendant selectors by default, and use as little +specificity as possible. Here is a good example: + +.. code-block:: html + +