Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/necolas/idiomatic-html

Principles of writing consistent, idiomatic HTML.
https://github.com/necolas/idiomatic-html

Last synced: 3 months ago
JSON representation

Principles of writing consistent, idiomatic HTML.

Awesome Lists containing this project

README

        

# Principles of writing consistent, idiomatic HTML

![unmaintained](http://img.shields.io/badge/status-unmaintained-red.png)

The following document outlines a reasonable style guide for HTML development.
These guidelines strongly encourage the use of existing, common, sensible
patterns. They should be adapted as needed to create your own style guide.

This is a living document and new ideas are always welcome. Please
contribute.

## Table of contents

1. [General principles](#general-principles)
2. [Whitespace](#whitespace)
3. [Format](#format)
4. [Attribute order](#attribute-order)
5. [Naming](#naming)
6. [Practical example](#example)

[License](#license)


## 1. General principles

* All code in any code-base should look like a single person typed it, no
matter how many people contributed.
* Strictly enforce the agreed upon style.
* If in doubt when deciding upon a style, use existing, common patterns.


## 2. Whitespace

Only one style should exist across the entire source of your code-base. Always
be consistent in your use of whitespace. Use whitespace to improve
readability.

* Never mix spaces and tabs for indentation.
* Choose between soft indents (spaces) or real tabs. Stick to your choice
without fail. (Preference: spaces)
* If using spaces, choose the number of characters used per indentation level.
(Preference: 4 spaces)

Tip: configure your editor to "show invisibles". This will allow you to
eliminate end of line whitespace, eliminate unintended blank line whitespace,
and avoid polluting commits.


## 3. Format

* Always use lowercase tag and attribute names.
* Write one discrete element per line.
* Use one additional level of indentation for each nested element.
* Use valueless boolean attributes (e.g. `checked` rather than
`checked="checked"`).
* Always use double quotes to quote attribute values.
* Omit the `type` attributes from `link` stylesheet, `style` and `script`
elements.
* Always include closing tags.
* Don't include a trailing slash in self-closing elements.

(Keep line-length to a sensible maximum, e.g., 80 columns.)

Example:

```html





[tweet text]


Reply

```

### Exceptions and slight deviations

Elements with multiple attributes can have attributes arranged across multiple
lines in an effort to improve readability and produce more useful diffs.

Example:

```html

[text]

```


## 4. Attribute order

HTML attributes should be listed in an order that reflects the fact that class
names are the primary interface through which CSS and JavaScript select
elements.

1. `class`
2. `id`
3. `data-*`
4. Everything else

Example:

````html
[text]
````


## 5. Naming

Naming is hard, but very important. It's a crucial part of the process of
developing a maintainable code base, and ensuring that you have a relatively
scalable interface between your HTML and CSS/JS.

* Use clear, thoughtful, and appropriate names for HTML classes. The names
should be informative both within HTML and CSS files.
* Avoid _systematic_ use of abbreviated class names. Don't make things
difficult to understand.

Example with bad names:

```html


```

```css
.s-scr {
overflow: auto;
}

.cb {
background: #000;
}
```

Example with better names:

```html


```

```css
.is-scrollable {
overflow: auto;
}

.column-body {
background: #000;
}
```


## 6. Practical example

An example of various conventions.

```html



Document






[text]


[text]
[text]



```


## License

_Principles of writing consistent, idiomatic HTML_ by Nicolas Gallagher is
licensed under the [Creative Commons Attribution 3.0 Unported
License](http://creativecommons.org/licenses/by/3.0/). This applies to all
documents and translations in this repository.

Based on a work at
[github.com/necolas/idiomatic-html](https://github.com/necolas/idiomatic-html).