Open34

HTML&CSS

hayaohayao

Progate HTML&CSS道場レッスン初級編の感想

CSSは方法論をもってやらないと崩壊する。メンテ不可能になる。

hayaohayao

Progate HTML&CSS道場レッスン中級編の感想

クソむずい。

名前空間の概念ある?
スコープを区切れない
セレクタが意図しない要素に当ててるとかが怖い

素のCSSでは書けない

Paddingの挙動がよく分かっていない

hayaohayao

HTML & CSS 上級編

レスポンシブデザインにするためにメディアクエリの紹介
マニュアルオーバライド 筋は悪そう

hayaohayao

div要素

特別な意味はない
スタイルをつける目的でidやclassを付与する
他に適切な要素がなかった場合の最終手段

hayaohayao

inputのplaceholder属性

ユーザ入力の支援をするためのヒント
入力欄に値が入力されていないときのみ表示される。

hayaohayao

フォームコントロール

ユーザが値を入力・設定するための部品

form要素

フォーム全体を表す

label要素

フォームコントロールにラベルをつける

for属性

フォームコントロールにid属性でIDを指定している場合、for属性でそのIDを指定することで紐づけることができる。

hayaohayao

CSS

すべてはボックスである

内在サイズと外在サイズ
外在サイズの場合は内部のコンテンツの幅が多すぎるとオーバーフローする

ボックスモデル

コンテントボックス
パディング
ボーダー
マージン

パディングはBox内
ボーダーは要素を視覚的にフレーム化する

box-sizing

content box widthはcontent boxの幅。それにpaddingとborderの幅が追加される

border box witdhはcontent box + padding + border

.awesome[data-sizing="intrinsic"] {
  width: min-content;
}
hayaohayao

セレクタ

  • ユニバーサルセレクタ ex. *
  • タイプセレクタ ex. section
  • クラスセレクタ ex. .my-class
  • idセレクタ ex. #rad
  • 属性セレクタ
[data-type='primary'] {
  color: red;
}
<div data-type="primary"></div>

擬似クラス

例 a:hover

疑似要素

  • コンテンツの挿入
  • 要素の具体的な部分をターゲットにする
.my-element::before {
  content: 'Prefix - ';
}

コンビネータ

子要素にしか作用できない

  • 子孫
    スペース
p strong {
  color: blue;
}
  • 隣接兄弟コンビネータ next sibling +
    • 後続兄弟コンビネータ subsequnet ~
      ↑違いが分かっていない 隣接は任意の隣人がいるかで、後続は指定した要素のあと?(後続はnot 直後らしい)
  • 子コンビネータ >
hayaohayao

The cascade

複数のCSS規則の、HTML要素への適用の衝突の解決

カスケードアルゴリズムの4つのステージ

  • position and order of appearance
  • Specificity
  • Origin
  • Importance

Specificty

id > class > element type

Specificityは累積的
a.my-class.another-class[href]:hover

これは上書きするのが難しい。なので、セレクタはなるべくシンプルになるよう努めるべき

Order

specificityが弱い順

  1. User agent base styles
  2. Local user style
  3. Authored CSS
  4. Authored !important
  5. Local user styple !important
  6. User agent !important

Importance

重要度が低い順

  1. normal rule type
  2. animation rule type
  3. !imoportant rule type
  4. transition rule type
hayaohayao

Specificity

スコアは低く保つ。ちょうど必要なだけの高さであることが大切。でないと上書きするのが難しい。

  • Universal selector (*): 0 points
  • element or pseudo-element selector: 1 point
  • class, pseudo-class or attribute: 10 points
  • ID selector: 100 point
  • Inline style attribute 1,000 points
  • !important: 10,000 points
hayaohayao

Inheritance

キーワード

  • inherit
  • initial
  • unset

unset

unset は CSS のキーワードで、プロパティをリセットし、親から自然に継承された場合は継承値、そうでなければ初期値を設定します。言い換えれば、前者の継承プロパティの場合は inherit キーワードのように動作し、後者の非継承プロパティの場合は initial キーワードのように動作します。

hayaohayao

Layout

https://24ways.org/2019/a-history-of-css-through-15-years-of-24-ways/

display

inline

文中の単語のように機能する
明示的に幅と高さを設定できない
ブロックレベルのマージンとパディングは、周囲の要素によって無視される

block

互いに並んでいない。
自分たちのために新しいラインを作成する
全て辺のマージンが考慮される

flex

要素の子の動作方法も決定する。
子供がflex item?になる。

flexbox

1次元のレイアウト。水辺また垂直。
要素の子要素をインライン方向に並べてブロック要素に引き伸ばすので、子要素は同じ高さになる。

アイテムは同じ軸にとどまり、スペースがなくなっても折り返されない。
互いに同じラインに押しつぶそうとする。

grid

単軸レイアウトでなく多軸レイアウト

https://qiita.com/kura07/items/e633b35e33e43240d363

Flow Layout

inline-block

textと同じように配置されるけど、ブロックの一部の特性が無視されない

float

指定された方向にフロートされる
兄弟要素がその周りをwrapする

floatの注意点?

https://rachelandrew.co.uk/archives/2017/01/24/the-end-of-the-clearfix-hack/

multicolum layout

colum-count
colum-width

positioning

hayaohayao

Grid

用語

グリッド線

1始まり

グリッドトラック

2つのグリッド線の間のスペース

グリッドセル

行トラックと列トラックの交点によって定義されるグリッド上の最小スペース

グリッドエリア

グリッドセルの集まり

ギャップ

トラックの間の溝

Insepect CSS grid

https://developer.chrome.com/docs/devtools/css/grid/

intrinsic sizing keyword

  • min-content
  • max-content
  • fit-content()

理解すべき概念

用語

  • Grid Lines
  • Grid tracks
    • 二本のGrind lineにかこまれた領域
  • Grid cells
    • 2つのGrid tracksの交点
  • Grid area
    • Grid cells集合
  • Gaps
    • tracks間の余白
  • Grid container
    • display:gridが適用されたエレメント
  • Grid item
    • grid containerの直接の子供

size keyword

  • min-content
    • 文字がオーバーフローしない限り小さく?
  • max-content
    • 文が改行されないように広く?
  • fit-content
    • 指定した値を超えるまではmax-content
    • 指定した値よりは大きくならない

fr

関数

  • minmax
    • よくわからない
    • 設定したmin以上、max以下らしいが、frと一緒に使われたときに大きさはどう決まる?
  • repeat

auto-fill とauto-fit

auto-placemetnt

grid template areas

hayaohayao

Logical Property

ブロックの流れであるblock flowと文の流れであるinline flowがあるmargin-topなどはflowに関係なく動作するが、margin-block-startなのでblock flowのスタートを意味する。flowの流れによって物理的な位置が変わる

Browser supportは様々

hayaohayao

spacing

margin

ボックスの外側

  • marginの崩壊
  • auto
  • 可能なスペースを適用された方向に占有する?

### padding
断熱材のようにボックスの内側にスペースを作成する
ボックスモデルによっては、全体的な寸法に影響を与える

position

  • static default
  • relative
    • 自身の位置からの相対位置?
  • absolute
    • 親の位置からの相対位置?
      - sticky
    • よくわからない。docked/stucked stateのときの適用される?
    • スクロールしても画面にとどまる
hayaohayao

pseudo element

::before::after

子要素を作る
空文字を指定して、imageとか表示できる?

  • ::first-letter
  • ::first-line
  • ::backdrop
  • ::marker
  • ::selection
  • ::placeholder
hayaohayao

pseudo class

Interactive states

  • :hover
  • :active
  • :focus
  • :target
  • :link
    • LVHAルール

Form states

  • :disabled and :enabled
  • :checked and :inderminate
  • :placeholder-shown

Validation states

  • :valid and :invalid and :in-range
  • :first-child and :last-child
  • :only-child
  • first-of-type

Finding empty elements

  • :empty

Finding and excluding multiple elements

  • :is()
  • :has()
  • :not()
hayaohayao

z-index

基本は出てきた順に重なる
positionをstatic(default)以外にして、z-indexを設定すると重なり方を制御できる。
gridやflexboxを使っているときはpositionを変えなくてもz-indexが働く

stacking context

共通の親を持ち、z-indexで移動するエレメントの集まり

stacking contextの作り方

いろいろな方法があるhttps://developer.mozilla.org/ja/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context

hayaohayao

Funcitons

  • custom propertiesとvar()
:root {
	--base-color: #ff00ff;
}

.my-element {
	background: var(--base-color);
}
hayaohayao

Cascade

conflictの解消ルールの集合のこと

  1. StyleSheet origin
  2. Selector specificty
  3. Source Order
color: black;

colorはproperty
blackはvalue
この一行はdeclaration

cascaed value

cascadeの結果選ばれたあるpropertyに対する値

原則 (絶対のルールではない)

  • ID selectorを使わないでください
  • !importantを使わないでください
hayaohayao

Inheritance

すべてのpropertyが継承されるわけではない。主にあなたが継承してほしいと思っているもの、テキスト関連のpropertyなどが継承される。

inherit

継承したいpropertyに使う

initial

デフォルト値でリセット

hayaohayao

shorthand properties

複数のpropertiesを一度に宣言できる。
省略した値はinitial valueでセットされるので注意

順番

要素の4辺を指す 上右下左
省略されると反対の辺の値になる

2値のshorthand propertiesは水平・垂直

hayaohayao

相対単位

responsive

cssにおいてはブラウザのウィンドウサイズに応じて異なる反応をするスタイルのこと

em

1emは現在のエレメントのfont size
paddingやmargin、element sizeなどに適している

rem

root em root要素からの相対指定
font sizeの指定におすすめ

tip

時と場合によるが、迷ったらfont sizeはrem、borderはpixel、その他ほとんどはemがおすすめ

media query

特定の画面サイズやメディアタイプにのみ適用されるスタイルをしているために使用される@mediaルール

viewport

web pageが表示されるブラウザウィンドウ内の領域。アドレスバー、ツールバー、ステータスバーがある場合はそれを除く。

vh

viewportの高さの1/100

vw

viewportの幅の1/100

vmin

min(vh, vw)

vmax

max(vh, vw)

hayaohayao

custom property

decleration block内で宣言
--で名前をつける
var(名前)で使う

cascadeとinheritanceの規則がある

JavaScriptからアクセス、セットできる

hayaohayao

box-sizing: boarder-boxのほうが要素のサイズが予測しやすいため、新しいサイトを始めるときはboader-boxがおすすめ

    :root {
      box-sizing: border-box;
    }

    *,
    ::before,
    ::after {
        box-sizing: inherit;
    }
hayaohayao
hayaohayao

margin

負のマージン

左と上 自分が移動する
右と下 相手を引き込む

collapsed margin

上下のマージンでのみ発生する
上のmarginが20px、下のmarginが10pxだったら上下の余白は10pxになる
要素を貫通する

ただ必ずしも起こるわけではない。borderやpaddingを設定、flex、overflow:auto etcで起こらなくなる

hayaohayao

ロボトミーフクロウセレクタ

* + *

ページの親の最初の要素でないものを選択する

hayaohayao

doucble container pattern

中央揃えにする方法
Containerを重ねて、内側のContainerにmarginを設定する