1. selecting path
1.1. any elements' selectors with any position selectors between
1.1.1. div span + b[style] > a.className
1.2. there are no braces or groups
1.2.1. this way we are able to read selectors just like ordinary text: from left to right
1.2.1.1. so we should avoid redundant selectors or confusing parts like + or :nth-child
2. CSS RULES
2.1. CSS Selector(s)
2.1.1. are divided with comma
2.1.1.1. div, span.className, table > tr > td
2.2. CSS attributes
2.2.1. a lot of different look-related properties
2.2.1.1. CSS3, CSS2, CSS1
2.2.1.2. different properties can be unsupported by different browsers(caniuse.com)
2.3. several selectors could affect the same element
2.3.1. priority!
2.3.1.1. calculation
2.3.1.2. ordering matters!
2.3.1.3. !important as a plug
3. everything is element
3.1. tag
3.2. text
3.3. comment
4. selectors' parts
4.1. by state
4.1.1. tag name
4.1.1.1. "table", "div" and even "notexistingtag" refer to tag's name
4.1.2. attribute
4.1.2.1. any tag's attribute
4.1.2.1.1. [attr=value]
4.1.2.1.2. [attr~=partialValue]
4.1.2.1.3. w/o value refers to element that HAS attribute given; regardless its value
4.1.2.2. class
4.1.2.2.1. .className
4.1.2.3. id
4.1.2.3.1. #id
4.1.3. dynamic state
4.1.3.1. :hover
4.1.3.2. :active
4.1.3.3. :visited
4.2. by position in tree
4.2.1. including
4.2.1.1. "div table" means "find <table>s inside the <div>s"
4.2.1.1.1. does not mean "implictly contains"
4.2.1.1.2. means "that children is somewhere in the parent given"
4.2.1.2. just space as separator between elements "parent" "children"
4.2.2. implict children
4.2.2.1. parent>child
4.2.2.2. spaces can be used: parent > child
4.2.3. neighbors, siblings
4.2.3.1. reference + targetElement
4.2.3.2. "p + p" matches any <p> element that follows by another <p> element
4.2.3.2.1. "p + p" does not match to the first <p> element
4.2.4. counting
4.2.4.1. :first-child
4.2.4.2. :last-child
4.2.4.3. :even and :odd
4.2.4.4. :nth-child
4.3. by content
4.3.1. maybe in the future