CSS学び直し①
CSS学び直しメモ
やってること
Udemyのコース。 最近、自動翻訳で日本語がつき始めてるので講義の選択肢が増えて嬉しい。
発音聞き取りやすいし、面白い。おすすめ。
以下メモ。
アスタリスク
- 全体のmarginとpaddingを潰す
- border-boxでpaddingとborderの幅を要素の幅と高さに含める。(※デフォルトはcontent-boxとなる)
* { margin: 0; padding: 0; box-sizing: border-box; }
body
主にフォントの指定を行う。
font-family
sans-serif
(サンセリフ)は英字の端々に飾り(うろこ)がない指定。可読性が高い。ゴシック体。Noto Sans
とかLato
とか有名らしい。
font-weight
(太さ)- 100,200,....,900まで。標準が400。bold等キーワード指定も可。
line-height
- 行の高さ。1.7は170%, 1.7emと同等。
padding
- コンテンツとの境界線の領域。箱の内側。
body { font-family: "Lato", sans-serif; font-weight: 400; font-size: 16px; line-height: 1.7; color: #777; padding: 30px; }
参考:google
font-family:Roboto,Arial,sans-serif;
参考:facebook
font-family:Helvetica, Arial, \"hiragino kaku gothic pro\",meiryo,\"ms pgothic\",sans-serif;
header
トップ要素。
viewport
パーセンテージ指定vw / vh / vmin / vmax
など。- viewport自体は
<meta name="viewport" content="width=device-width, initial-scale=1.0">
のような指定。 - 幅をdevice-width。高さを95vh(95%)と指定。
linear-gradient
- 2つ以上の色の間でグラデーションを作る。(複数可)
to
でどの向きに、というのを指定。
background-size
- 要素の背景画像の寸法。
contain
: 画像を切り取ったり縦横比を崩したりすることなく、画像ができるだけ大きくなるよう拡大縮小。cover
: 画像の縦横比を崩すことなく、画像ができるだけ大きくなるよう拡大縮小します。画像の縦横比が要素と異なる場合、空き領域が残らないように上下または左右のどちらかを切り取ります。auto
: 縦横比が維持されるように、適切な方向に背景画像を拡大縮小します。
clip-path
- 画像を自由に切り抜きできる。○/△/□いろいろ。
- x軸 / y軸の組み合わせで指定していく。
.header { height: 95vh; background-image: linear-gradient( to right bottom, rgba(126, 213, 111, 0.8), rgba(40, 180, 133, 0.8) ) , url(../img/hero.jpg); background-size: cover; background-position: top; position: relative; clip-path: polygon(0 0, 100% 0, 100% 75%,0 100%); }
logo-box
ロゴ要素。
position
absolute
指定は基準が画面か親要素。親要素にrelative
を指定すると、親要素を基準に指定できる。(指定しないと意図しない動きになる)- ここでは
header
にrelative
をつけて、そこからの相対位置指定とする。
.logo-box { position: absolute; top: 40px; left: 40px; }
テキスト関連
header
に配置するテキストボックスを用意して、各テキストそれぞれにcssを当てていく。
top
+left
+transform
で真ん中に表示させるtop 50% / left 50%
だけだと「50%の位置から始まる」の指定で、意図したものとならない。transform
で指定位置からズラすことで、真ん中に配置できる。- 相対位置とすることでレスポンシブに。
.text-box { position: absolute; top: 40%; left: 50%; transform: translate(-50%, -50%); }
display
block
指定することで改行できる。
letter-spacing
- 文字の間隔。
- 小さい文字の
font-weight
を大きくすることで、全体のバランスを整えられる。
.heading-primary { color: #fff; text-transform: uppercase; } .heading-primary-main { display: block; font-size: 60px; font-weight: 400; letter-spacing: 35px; } .heading-primary-sub { display: block; font-size: 20px; font-weight: 700; letter-spacing: 17.4px; }
アニメーション① animationと@keyframes
animation
animation-name
: @keyframesで指定したアニメーションを起こす。animation-duration
: アニメーション時間。animation-timing-function
:ease-out
→ 徐々に遅く。ease-in
→ 徐々に早くなどいろいろ- 上要素3つ合わせて
animation: moveInRight 1s ease-out;
のような指定も可能。 - animation4つめの要素に
delay
を指定可。 animation-fill-mode
backwards
指定により、@keyframes
の0%時点
から描画を開始できる。
- 最初は表示せず、あとから遅れて表示させたい要素に用いる。
opacity
- 透過度。
- transformの謎のチラツキ
- なぜ起こるのかは謎らしい?親要素で
backface-visibility: hidden;
とすることで防止できる。 animation-iteration-count
/animation-delay
などその他いろいろ
- なぜ起こるのかは謎らしい?親要素で
@keyframes
- アニメーションに名前をつける
- 0% / 50% / 100%などで開始〜終了までのアニメーションを指定できる。
.heading-primary { backface-visibility: hidden; } .heading-primary-main { animation-name: moveInLeft; animation-duration: 1s; animation-timing-function: ease-out; } .heading-primary-sub { animation: moveInRight 1s ease-out; } @keyframes moveInLeft { 0% { opacity: 0; transform: translate(-100px); } 80% { transform: translate(10px); } 100% { opacity: 1; transform: translate(0); } }
アニメーション② aタグボタン
- 疑似クラス(要素:hoge)
- link/visited両方の疑似クラスを指定することで訪問済かどうか関係なく表示
- hoverはマウスオーバー/activeはクリック状態
text-decoration
- aタグデフォルトの下線を消すために用意。
border-radius
- 角丸。100px以上は大差なし?
box-shadow
- X軸/Y軸/ぼやけ部分/色で指定する。
transition
all
→ 全ての要素に同じアニメーション設定を適用する。
inline-block
- 要素自体はinline制御なので、親要素でのtext-alignで中央寄せなどが可能。
.btn:link, .btn:visited { text-transform: uppercase; text-decoration: none; padding: 15px 40px; display:inline-block; border-radius: 100px; transition: all .2s; } .btn:hover { transform: translateY(-3px); box-shadow: 0 10px 20px rgba(0,0,0,.2); } .btn:active { transform: translateY(-1px); box-shadow: 0 5px 10px rgba(0,0,0,.2); } .btn-white { background-color: #fff; color: #777; }
アニメーション③ 疑似要素(Pseudo-elements)
わかりにくかったのでMDN参照。
CSS において ::after は、選択した要素の最後の子要素として擬似要素を作成します。よく content プロパティを使用して、要素に装飾的な内容を追加するために用いられます。
- 擬似クラスはコロン:、疑似要素はコロンコロン::。
- 疑似クラスは昔から使えた。疑似要素はCSS3から登場。
- after疑似要素は擬似クラスでも代用可。
- 擬似クラスに対して疑似要素をつける場合はCSS3構文じゃないとNGか?
- btnクラスを持つ要素に対し、装飾用の項目を用意。
- 装飾するときは親要素と同じサイズにしたりするとわかりが良い
position:absolute
+top 0 left 0
+z-index -1
で裏側に隠す
.btn::after { content: ""; display: inline-block; height: 100%; width: 100%; border-radius: 100px; position: absolute; top:0; left:0; z-index: -1; transition: all .4s; } .btn:hover::after { transform: scalex(1.4) scaleY(1.6); opacity: 0; }