CSS①

Contents

一般

◆ブラウザのデベロッパーツール

・ショートカット	ctrl+shift+C

◆VScodeショートカット

・ctrl + X		行の切り取り
・Ctrl + Shift + k 行の削除
・ctrl + C 行のコピー
・Shift + alr + ↓ カーソル行を下にコピー
・alt + ↓ カーソル行を下に移動
・Ctrl + Enter 下に行追加
・Ctrl + [ インデント追加
・Ctrl + ↓ 行をスクロール
・Ctrl + L 行を選択

◆CSSファイルの設定方法(HTML)

1.CSSファイルの拡張子を「.css」にする。
2.<link rel="stylesheet" href="CSSファイル">

◆セレクタ

〇class名のルール(HTML)

・空白(Space)を入れない。
・英数字とハイフンとアンダースコアで記述。
・1文字目は必ず英字。
・複数のclass名を付ける場合、半角Spaceを空ける。
<p class="blue small text_size">

〇書式

・基本形		セレクタ { プロパティ : 値 ; }
・複数セレクタ セレクタ, セレクタ { }
・子孫セレクタ セレクタ (半角Space)セレクタ { }
・特定のクラス名がつけられた要素  要素名.クラス名(←半角Space無し)
・直下の子要素のみ   セレクタ>セレクタ>セレクタ { }
・同階層の直後に隣接のみ   セレクタ + セレクタ { }
・同階層の直後以降の全て   セレクタ ~ セレクタ { }
・属性セレクタ セレクタ [属性名] { }
セレクタ [属性名="値"] { }
・属性(複数指定されている属性値の内、特定の属性値を含む要素) セレクタ [属性名~="値"] { }
・属性セレクタ(「-(ハイフン)」前の値が指定の属性値をもつ要素) セレクタ [属性名|="値"] { }
・属性(一部が一致) セレクタ [属性名*="値"] { }
・属性('始め'が一致) セレクタ [属性名^="値"] { }
・属性('最後'が一致) セレクタ [属性名$="値"] { }
・全ての要素 * { }
・セレクタの中の全要素 セレクタ* { }
・△以外のセレクタに適用  セレクタ : not ( △ ) { }
li:not(:last-child) { } 最後を除くli

◆疑似要素(::)

・要素と横並びは「display: inline-block;」、縦並び(改行)は「display: block;」指定。
・contentに画像指定すると画像の幅と高さは変更不可。
・画像の幅を変更するには、displayをblockかinline-
blockにして、「background-image」に指定。

 ::first-letter 要素の位置文字目を指定。
 ::first-line 要素の位置行目を指定。
 ::before 要素の直前にコンテンツを追加。
「"」または「'」でcontentを指定。
 ::after 要素の直後にコンテンツを追加。
画像も可能。
p.example::after {
content: url( "../image/artis-logo.jpg");}
 ::selection 選択した文書の一部に適用。
 ::marker <li>の箇条書き記号ボックスを選択。
 ::placeholder <input>や<textarea>のプレイス
ホルダー文字列を選択。

◆疑似クラス(:)

〇入力擬似クラス(フォーム要素に関連)

:checked	ラジオボタンで選択されている要素。
:invalid 無効な内容を持つ要素。
:required 必須項目の要素。

〇位置疑似クラス

:any-link	要素が :link または :visited のいずれか。
:link まだ訪問していないリンク。
:visited 訪問したことのあるリンク。
:target URL のフラグメントに一致するidを持つ固有の要素(ターゲット要素)。

〇ツリー構造疑似クラス

:first-child		同階層の一番最初の要素。
:last-child 同階層の一番最後の要素。
:only-child 要素に兄弟がいない場合に適用。
:nth-child(n) 同階層のn番目。nは0からスタート。
  odd 奇数。
  even 偶数。
  :nth-child(7) 7番目。
  :nth-child(n+7) 7、8、9番目・・・。
  :nth-child(3n+4) 4,7、10、13番目・・・。
  :nth-child(-n+3) 最初の 3 つの要素。
  :nth-child(n+8):nth-child(-n+15) 8~15 。
  :first-of-type 最初の特定の型に一致する要素。
  :last-of-type 最後の特定の型に一致する要素。
  :nth-of-type(n) 指定された型のn番目の要素。
  :empty 子がない要素。 

〇ユーザー操作疑似クラス

:hover		ポインターが当たっている要素。
:focus フォーム入力欄などが有効な要素。
:activ ユーザー操作でアクティブな要素。

〇疑似関数クラス

:not()		指定セレクターに一致しない要素。
:is() 列挙セレクターの何れか一つに該当の要素。
  {:is(ol, ul, menu:link) :is(ol, ul) {color: #000; }
:where() 列挙セレクターのうちの何れかに当てはまるすべての要素。

◆強制制御

・子孫引継ぎ	プロパティ: inherit; 
・スタイル 値の後ろに「!important」

◆ベンダープレフィックス

・-ms-		IE向け。
・-moz- FireFox向け。
・-webkit- Safari向け。

◆メディアクエリ

〇書式

・@media メディアタイプ and (条件1) and (条件2) { セレクタとスタイル }
・@media (min-width: 768px) { body {font-size: 16px; } }

〇メディアタイプの種類

・screen	一般的なディスプレイ型デバイス
・print 印刷物
・all 全てのメディア(初期値)

〇主な条件

・max-width : ○px	ビューポートの幅が○px以下
・max-height : ○px ビューポートの高さが○px以下
・max-device-width : ○px 画面の幅が○px以下
・max-device-height : ○px 画面の高さが○px以下
・orientation : portrait デバイスが縦向き
・orientation : landscape デバイスが縦向き
・resolution : ○ デバイスの解像度が○

〇ブレークポイント

・スタイルを切り替える画面幅の境界線。
・画面幅
  ・スマートフォン 320-480px(横向き480px以上)
  ・タブレット 768px以上
  ・パソコン 1200px以上
・よく使われるブレークポイント
  ・480, 600, 768, 1200px
  ・576, 992, 1024px

◆数学関数

〇calc()

・「+」と「-」の前後には半角スペースが必要。
・calc()の入れ子では、内部関数は単純な()式。
width: calc( 100% / calc(100px * 2) ); ⇒ width: calc( 100% / (100px * 2) );
・calc()の実装例(ルートに基づいたサイズ指定)
・font-size: calc(100vw / 30);
・ font-size: calc(16px + 0.20vw);
・width: calc(100% - 300px);
・ height: calc(100vh - 60px);

〇min()

・値をカンマで区切って最も小さい値を適用。
・最大値の定義。最小値は定義されない。
・widthとmax-widthを同時に指定できる。
width: min(70%, 800px);

〇max()

・値をカンマで区切り、最も大さい値を適用。
・最小値の定義。最大値は定義されない。
・widthとmin-widthを同時に指定できる。
width: max(70%, 800px);
・余白へ適用
margin: 0 max(5px,1vw) max(5px,1vw) 0;

〇clamp()

・最小値、推奨値、最大値を指定でき、min()とmax()を組み合わせた動き。
・最小値と最大値間の値を流動的に処理する為、推奨値は固定値ではなく相対値(vw や %)を使用する。
・clamp(10px,15px,20px)では、15pxが適用。
font-size: clamp(10px,1vw,20px);
width: clamp(400px, 50vw, 600px);

◆カスタムプロパティ(変数)

〇カスタムプロパティの定義

・書式		セレクタ { --名前: 値; }
:root { --grey: #333; }

〇カスタムプロパティの呼び出し

・書式		プロパティ: var(--名前); 
color: var(--grey);

幅と余白

◆box-sizingプロパティ(ボックスモデル)

・inherit		親要素の指定を引き継ぐ。
・content-box 初期値。width=contents幅のみ。
・border-box width=contents+padding+border
全称セレクタで全ての要素に適用推奨。
*, *:before, *:after { box-sizing: border-box;}

◆余白(margin・padding)

〇表記

・{margin: 10px;}		 上下左右
・{margin: 20px 10px;}  上下、左右
・{margin: 20px 10px 5px ;}  上、左右、下
・{margin: 20px 10px 5px 0px;}  上、右、下、左

〇margin相殺の発生パターン(4種類)

a.親と最初の子の上マージンの大きい方。
b.親と最後の子の下マージン。
  ・親{height: auto;(初期値) }では親子の大きい方。
  ・親のhight: auto;以外では親のmargin-bottom。
c.兄弟要素の上下のマージンの大きい方。
d.空の要素自体の上下のマージンの大きい方。

〇marginの相殺が起きない例外

a.Flexbox、Gridなどブロックレベルでない要素。
b.ルート要素。
c.ボーダーやパディングを使ったラインのボックス。
d.ネガティブmargin。
   ・30pxと-10pxでは、30px - 10px = 20px。
   ・-30pxと-10pxでは、-30px。
e.親要素にoverflowが指定されている。

〇「%」での指定

・「%」は親要素の幅に対する比率。
・合計が100%になるように指定する。
・「paddingを%で指定したい場合」は、marginも widhtも%で指定する。

◆幅(width)と高さ(height)

〇ボックスの大きさの指定

・bodyまで一切pxでの幅が無指定の場合、ブラウザの幅=bodyの幅になり、端末毎にbodyの幅が変わる。
・inline要素では指定不可。

〇widthの指定

・auto	初期値。blockでは親要素の幅に広がる。
・px 「親要素の幅>子要素の幅」に指定。
・% 親要素の幅に対する比率で指定。
・width:100%とautoの違い
   「auto」 width=contents+padding+border。
   「100%」 widthにpaddingとborderを含まない。

〇heightの指定

・auto	 初期値。文字や画像の要素の中身分の高さ。
・px  「親要素の高さ>子要素の高さ」に指定。
・%  親要素のheightに対する比率。親要素の
 heightが無指定の場合、%指定は無効。

〇max-width

・画面(親要素)から画像がはみ出ないように制限。
・画像対してにmax-width: 100%を設定する。
・「height: auto;」で、画像の縦横比が崩れない。

〇line-height

・文字サイズ(font-size)と上下の余白の合計。
・nomal 初期値。だいたい「1.2」。
・単位付き数値 文字サイズと余白の合計 (px, em)。  
・単位無し数値 文字サイズの倍数(2, 10)。
・パーセント(%) 文字サイズの%倍(200%)。

〇vw,vh(viewport width, viewport height)

・vw	横幅の横幅を100とする単位。
・vh 画面の高さを100とする単位。
・「%」指定は、画面ではなく親要素の比率。

displayプロパティ

◆種類

・none		表示なし。
・block ブロックレベル。
・inline 上下のmargin無効かつpaddingは重複。
・inline-block
・flex 子要素を並列に並べる。
・grid 子要素を並列縦横に並べる。
・inline-grid

◆flex(子要素を並列に並べる)

〇種類

・justify-content	水平寄せ、間隔
・align-items アイテムの高さ揃え
・flex-direction itemの並び方(縦横正逆)
・flex-wrap itemの折り返し
・flex-flow itemの並び方と折り返し
・align-content 縦寄せ、間隔

〇子要素(フレックスアイテム)のプロパティ

・flex-grow	・子要素の幅が伸びる倍率。
・初期値「0」。
・flex-shrink ・子要素の幅が縮む倍率。
・初期値「1」。
・flex-basis ・子要素の基本幅。
・初期値「auto」。
・flex ・子要素の幅に関する一括指定。
・flex-grow, flex-shrink, flex-basis順。
{flex: 0 1 auto; }
・order ・子要素の順番を指定。
・初期値「0」。
・align-self ・子要素の垂直揃えを指定。
・初期値「auto」。

〇footerを最下部に固定(flex-grow:1/heith:100%)

1.<html>と<body>に「height: 100%;」を指定。
2.<body>に「display: flex;」
「flex-direction: colomn; 」を指定。
3.<main>に「flex-grow: 1」を指定。

◆grid(子要素を並列縦横に並べる)

〇書式

1.親(グリッドコンテナ)に「display : grid ;」。
2.親にgrid-templateで幅と高さを指定。
3.子にgrid-areaでエリアの位置を指定。

・値の指定時、x軸とy軸の区切りは「/」を使用する(?)。
・値の指定時、x軸(y軸)で複数の値を並列指定する区切りは「space」(?)。
・minmaxやrepeat関数の「()」内では「,」で区切る(?)。

〇幅と高さの指定(親指定)

・半角Spaceで区切って、pxかfr(比率)で指定。
・grid-template-columns 子要素の横幅を指定。
{grid-template-columns: 100px 2fr 1fr; 
・grid-template-rows 子要素の高さを指定。
grid-template-rows: 2fr 1fr; }
・grid-template-areas 名前つきエリアを作成。
grid-template-areas: "area1 area2 area3"
  "area1 area4 area4";
・grid-template ショートハンド。
a.{ grid-template : 高さ1 2 3... / 幅1 2 3... ; }
{ grid-template : 20px 20px / 10px 10px 10px; }
b.{ grid-template : "名前1 名前2 名前3" 高さ
"名前4 名前5 名前6" 高さ/ 横幅1 横幅2 横幅3; }
{ grid-template: "a a ." minmax(50px, aut
"a a ." 80px
"b b c" auto / 2em 3em auto; }
・grid-auto-rows 行の暗黙的トラックを定義。
・grid-auto-columns 列トラックを定義。

〇frとautoの違い

・autoはコンテンツに合わせてサイズ調整される。
{ grid-template-columns: repeat(3,1fr) auto; }
{ grid-template-columns: repeat(2,100px) auto; }

〇repeat()関数

・同じ値を繰り返す場合、複数の寸法を一括指定。
repeat(回数, サイズ1 サイズ2 サイズ3...)
{ grid-template: 100px repeat(6, auto); }
{ grid-template: repeat(4, auto 50px); }
{ grid-template: repeat(auto-fit, minmax(250px, 1fr)); }
・親要素にスペースが余る場合
・auto-fill 空のグリッドが作られる。
・auto-fit 幅が変わりスペースが埋まる。

〇minmax()関数

・トラックサイズの最小値と最大値を指定する。
{ minmax(最小値, 最大値); }
{ grid-template-columns: minmax(100px, 1fr) 1fr 2fr;
grid-template-rows: 2fr 1fr; }

〇位置の指定(grid-column・grid-row・grid-area)

・子要素に列の○~○番目、行の○~○番目のライン位置を「/」で区切って指定。
.item { grid-column : 1/4;
grid-row : 1/2 ; }
・grid-column x軸方向の一括指定。
{ grid-column : x軸の開始位置 / x軸の終了位置 ; }
・grid-row y軸方向の一括指定。
{ grid-row : y軸の開始位置 / y軸の終了位置 ; }
・grid-area x軸とy軸を一括指定。
a.{ grid-area : 開始y座標 / 開始x座標 / 終了y座標 / 終了x座標 ; }
※値とスラッシュは半角スペースが必要。
{ grid-area : 3 / 1 / 4 / 3 ; }
b.{ grid-area : エリア名; }

〇spanで配置指定

・隣接するセルの結合数で領域を指定。		
grid-column: span 2; 列の領域は2トラック分で、開始位置は前のアイテムの終了位置。
grid-column: 3 / span 2; 番号 3 からの2トラック分。
grid-column: span 2 / 5; 番号5までの2トラック分。

〇ライン名で配置指定

・grid-template-columnsとgrid-template-rowsでトラックを設定する際に[ ]で指定。
: 位置a [ライン名a] 位置b [ライン名b];
・ライン名はスペースで区切って複数指定可能。
・ライン名を「**-start / **-end」とすると、「**」と書くだけで指定可能。
.grid-container { display: grid;
grid-template-columns: 100px [first-start] 150px 50px [first-end];
grid-template-rows: [first-start] 100px [first-end] 50px; }
.item-1 { grid-column: first-start / first-end;
grid-row: first-start / first-end; }
/* 以下のように省略可能 */
.item-1 { grid-column: first;
grid-row: first; }

〇エリアで配置指定(grid-template-areas/grid-area)

・エリアの設定にはgrid-template-areasを使用。
・同名のセルは同じエリアとして扱われる。
.container { display: grid;
grid-template-areas: "area1 area2 area3"
"area1 area4 area4";
grid-template-columns: 100px 150px 50px;
grid-template-rows: 100px 50px; }
・grid-templateで一括指定。
{ "エリア名 エリア名 エリア名" 行の高さ
"エリア名 エリア名 エリア名" 行の高さ / 各列の幅 ;}
・アイテムにgrid-areaプロパティを指定して配置。
.item-1 { grid-area: area1; }
.item-2 { grid-area: area2; }
.item-3 { grid-area: area3; }
.item-4 { grid-area: area4; }

〇子要素間の余白(gap・親指定)

・グリッドアイテム同士の余白を指定。
・上下左右の端は親要素の枠に揃う。
・column-gap x軸の余白。
・row-gap y軸の余白。
・gap x軸とy軸の一括指定。
row-gapと任意でcolumn-gap の値を指定。
{ gap : row-gap column-gap ; }
gap : 10px 15vw;

〇並ぶ方向の指定(grid-auto-flow)

・row		初期値。行トラックを順番通りに埋め、
必要なら暗黙の行トラックを追加。
・column 列トラックを順番通りに埋め、
必要なら暗黙の列トラックを追加する。
・dense 空白を早くアイテムで埋める。

〇コンテナプロパティの一括指定(grid・親指定)

a.grid-template-areaとgrid-template-rows /grid-template-columns をまとめる。
・grid-templateと同じ使用方法。
・但しgrid-template と違い、他の grid のサブプロパティは全て初期化される。
b.grid-auto-flow: row と grid-template-columns をまとめる
・行に auto-flow、行の高さ / 各列の幅
grid: auto-flow 100px / 1fr 1fr 1fr;
c.grid-template-rows と grid-auto-flow: column をまとめる
・各行の高さ / 列に auto-flow、列の幅
grid: 1fr 1fr 1fr / auto-flow 100px;

〇Grid Layout モジュール以外のプロパティ

・justify-content	親指定。水平方向の配置。
・align-content 親指定。垂直方向の配置。
・place-content 上2つのの一括指定。
・justify-item 親指定。アイテムの水平配置。
・align-item 親指定。グリッドの垂直の配置。
・place-item 上2つの一括指定。
・justify-self 子指定。アイテムの水平配置。 
・align-self 子指定。アイテムの垂直配置。
・order 子指定。並ぶ順番。値: 整数。

〇gridレイアウトとflexボックスの比較

・gridレイアウトは、格子状平面に配置するため、複数の行や列を扱う多次元レイアウト向き。
・flexボックスは、単一の行や列を扱う場面、<li>や<nav>を横一列に並べたり、条件によって行の
 配置と列の配置を切り替えるデザイン向き。
・glidでのアイテムは、コンテナ側のトラックに貼付ける為、寸法や伸縮はコンテナに全て依存。
・flexでのアイテムは、コンテナ空間に流し込まれ、規則の中での挙動をアイテム自身で決められる。

◆inline-grid

・要素にdisplay: grid を指定すると、グリッド枠がウィンドウ幅いっぱいに表示されブロック要素の表示をするが、
 display: inline-grid を指定すると、グリッドの枠をインラインで表示する。

positionプロパティ

◆種類

・static	・初期値。
・relative ・現在の位置を基準に相対位置を指定。
・ボックス中心寄せ時の親要素。
・absolute ・親要素を基準に絶対的な位置を指定。
・ボックス中心寄せ時の子要素。
・fixed ・画面の定位置に固定する。
・sticky ・スクロールに合わせて追従させる。
・top, bottom, left, rightの一つ以上が必須。
・アイテムはコンテナ内でのみフロート。
・親要素の終了位置で固定が解除される。
・「overflow: hidden;」ではstickyが無効

◆stycky

・要素を固定して、スクロールに合わせて追従させる。
・top, bottom, left, rightのどれか一つ以上の指定が必要。
・position: sticky;を指定するとその親要素が自動的にスティッキーコンテナとなる。
・スティッキーアイテムはスティッキーコンテナ内でしかフロートすることが出来ない。 ・「position: stiky;」を設定した要素の親要素の終了位置で固定が解除される。
・スティッキーコンテナの中にスティッキーアイテムが複数ある場合、スクロール位置時点でフロートしているアイテムが、
 それ以前のアイテムに覆いかぶさるようにフロートしていく。
・スティッキーアイテムを一つずつ持ったスティッキーコンテナが複数ある場合、それぞれのコンテナ内でフロートして他のアイテムに覆いかぶさることはない。
・「overflow: hidden;」で使用する場合、「position: sticky;」が効かない。(position: sticky;とoverflow: hidden;は共存できない。)
・position: sticky;の子要素は、スクロール可能な親要素に張り付く(親を軸に固定される)状態となるが、overflow:hidden;を使うと親要素が
 スクロールされい対象となり、くっついている子要素は自分の今いる位置が正しいと判断し、固定されない状態になる。
・overflow: hidden;を使うのではなく、contain: paint;を使う。

◆stickyとfixedの違い

〇固定位置

・sticky:親要素内で固定。
・fixed:ウィンドウの左上を基準にした絶対位置。

〇要素の高さ

・sticky:要素の高さは有する。
・fixed:要素の高さがなくなる(浮遊状態)。

◆top, bottom, left, right

・上下左右の具体的な位置を指定。

◆inset

・top, right, bottom, leftを一括指定。
・絶対配置で天地中央に要素を配置する場合にコードを簡潔にまとめることができる。
  inset:10px        上下左右に適用。 
  inset:10px 5px      上下・左右に適用。
  inset:10px 5px 7px    上・左右・下に適用。
  inset:10px 5px 7px 3px  上・右・下・左に適用。

◆ヘッダーの固定表示(fixed)

・header { position: fixed; 	
  width: 100%;
  z-index: 1; }

◆モーダルウィンドウ(absolute・inset)

・header { position: fixed;
     inset: 0;
     margin: auto;
     width:80%;
    height:80%;
 z-index: 1; }