---
# System prepended metadata

title: CSS
tags: [css, layout, design]

---

---
title: "CSS"
path: "CSS"
---

{%hackmd @RintarouTW/About %}

# CSS

Cascading Style Sheets

:::info
Cascading
: 有兩種意義，一為層層串連，另一則是修飾 (modifier) 之意。目前主流的翻譯都僅限於結構上的描述，缺少了目的（修飾之意），對初學者而言難以顧名思義。
:::

https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/CSS_basics

## Syntax

```
style-rule ::=
    selectors-list {
      properties-list
    }

selectors-list ::=
    selector[:pseudo-class] [::pseudo-element]
    [, selectors-list]

properties-list ::= 
    [property : value] [; properties-list]
```

## Layout

CSS 2.1 defined four layout modes — algorithms which determine the size and position of boxes based on their relationships with their sibling and ancestor boxes:

- block layout, designed for laying out documents
- inline layout, designed for laying out text
- table layout, designed for laying out 2D data in a tabular format
- positioned layout, designed for very explicit positioning without much regard for other elements in the document

This module introduces a new layout mode, flex layout, which is designed for laying out more complex applications and webpages.

### Box Model Layout

<center><img src="https://i.imgur.com/b7mkq0Z.png"/></center>

margin (邊界) 
: 與其它 Box 之間的間隔

border (邊框)
: 邊框，可指定框粗細、顏色與 radius 等。

padding (邊距)
: 邊框與內容之間的間距，亦有填充之意。

### FlexBox Model Layout

<center><img src="https://i.imgur.com/Exledtm.png"/></center>

https://www.w3.org/TR/css-flexbox-1/#box-model

The contents of a flex container:

- can be laid out in any flow direction (leftwards, rightwards, downwards, or even upwards!)
- can have their display order reversed or rearranged at the style layer (i.e., visual order can be independent of source and speech order)
- can be laid out linearly along a single (main) axis or wrapped into multiple lines along a secondary (cross) axis
- can “flex” their sizes to respond to the available space
- can be aligned with respect to their container or each other on the secondary (cross)
- can be dynamically collapsed or uncollapsed along the main axis while preserving the container’s cross size

#### Example

```html
<div style="display:flex">

    <!-- flex item: block child -->
    <div id="item1">block</div>

    <!-- flex item: floated element; floating is ignored -->
    <div id="item2" style="float: left;">float</div>

    <!-- flex item: anonymous block box around inline content -->
    anonymous item 3

    <!-- flex item: inline child -->
    <span>
        item 4
        <!-- flex items do not split around blocks -->
        <q style="display: block" id=not-an-item>item 4</q>
        item 4
    </span>
</div>
```

#### main & cross

即 container 主軸和垂直（交叉）於主軸相的 cross  軸，因為主軸可指定為水平或垂直，故以主軸代稱。如主軸為水平，自然 cross 為垂直；同理反之。

main size/cross size 則分別指定其軸長度。

#### container & item

於 container 中，依主軸順序放置的 item。

## Color

147 CSS Color Name List
http://www.colors.commutercreative.com/grid/

```css
/* Keyword values */
color: currentcolor;

/* <named-color> values */
color: red;
color: orange;
color: tan;
color: rebeccapurple;

/* <hex-color> values */
color: #090;
color: #009900;
color: #090a;
color: #009900aa;

/* <rgb()> values */
color: rgb(34, 12, 64, 0.6);
color: rgba(34, 12, 64, 0.6);
color: rgb(34 12 64 / 0.6);
color: rgba(34 12 64 / 0.3);
color: rgb(34.0 12 64 / 60%);
color: rgba(34.6 12 64 / 30%);

/* <hsl()> values */
color: hsl(30, 100%, 50%, 0.6);
color: hsla(30, 100%, 50%, 0.6);
color: hsl(30 100% 50% / 0.6);
color: hsla(30 100% 50% / 0.6);
color: hsl(30.0 100% 50% / 60%);
color: hsla(30.2 100% 50% / 60%);

/* Global values */
color: inherit;
color: initial;
color: unset;
```

## Style

## Font

## Line Style

## Shadow

## Transformation

```
.box {
  transform: rotate(0.8turn);
}
```

## Function

```
.box {
  width: calc(90% - 30px);
}
```

## @rules

```
@import 'styles2.css';

@media (min-width: 30em) {
  body {
    background-color: blue;
  }
}
```

@media to create a section of our stylesheet that will only be applied in browsers with a viewport wider than 30em. If the browser is wider than 30em then the background color will be blue.

## Animation

## Selector

$$
select\ by\left\{
\begin{aligned}
element\\
:psudo\_class\\
::psudo\_element\\
.class\\
\#id\\
parent\_element > target\\
.parent\_class > target\\
element + adjecent\_silbling\\
element \text{~} general\_silbling\\
\text{*} (universal selector)\\
element[attr]
\end{aligned}
\right.
$$

## Pseudo Class

A CSS pseudo-class is a keyword added to a selector that specifies a special state of the selected element(s). For example, `:hover` can be used to change a button's color when the user's pointer hovers over it.

```
selector:pseudo-class {
  property: value;
}
```

https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes


## Pseudo Element

A CSS pseudo-element is a keyword added to a selector that lets you style a specific part of the selected element(s). For example, `::first-line` can be used to change the font of the first line of a paragraph.

https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements

## Attribute Selector

https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Attribute_selectors

###### tags: `css` `layout` `design`