Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レスポンシブ Web デザインの基礎

mu_zaru
August 13, 2020

レスポンシブ Web デザインの基礎

配信動画はこちら
https://youtu.be/LNI8pr86PpA

もし良かったらムーザルちゃんねるのチャンネル登録お願いします!
https://www.youtube.com/channel/UCLPHXwLp90A5R69Eltxo-sg

Twitter でもプログラミングネタをつぶやいているのでフォローお待ちしております。
ムー
https://twitter.com/mu_vpoe
zaru
https://twitter.com/zaru

mu_zaru

August 13, 2020
Tweet

More Decks by mu_zaru

Other Decks in Programming

Transcript

  1. 話す人 現役のエンジニア二人 赤貝が好きな CTO と デザイン勉強中のエンジニア @mu_vpoe 最近は SwiftUI で

    macOS アプリづくりが 趣味 ムー zaru @zaru CTO, Love 赤貝, JavaScript, Firebase, Web Components. Twitter フォロー お願いします!
  2. 今はレスポンシブでモバイルファースト CSS HTML レスポンシブ Web デザインでモバイルもデスクトップも同じ HTML / CSS を使うようになった。

    作り方の流れは、まずモバイル用に作ってから、徐々に画面サイ ズが大きい環境用に最適化していくモバイルファーストのやり方 が推奨されている(主に Google に) まずモバイル エンジニア z さん 次にデス クトップ
  3. レスポンシブ Web デザイン 3要素 Fluid grid layout 液体のように柔軟なレイアウ ト。px ではなく

    % や em な どの相対的な単位を使う。リ キッドデザインとも言う Flexible image デバイスに応じて適切な画像 とメディアを表示する Media query デバイスの機能を条件にして CSS を出し分けすることがで きる CSS
  4. 画面サイズに応じて CSS を切り替える @media (条件) { 該当した場合の CSS } CSS

    いろいろな条件を設定できる - min-width / max-width (幅) - orientaion (向き) - hover / pointer (マウス・タッチパネル)
  5. flexbox は子要素を良い感じに並べる flex コンテナ flex アイテム flex コンテナ flex アイテム

    display: flex; flex 指定をした要素の子要素は自動的に flex アイテムになる。 何も指定しなくても flex アイテムを横並びにしてくれる。 子要素の並びは縦や逆順などを flex-direction で指定ができる
  6. 余白は flex-grow で指定 余っているスペース flexbox は何も指定しない場合、flex アイテム分の width を確保す ると、残りの余っているスペースに対しては何もしない。

    アイテムの余白を調整するには、flex-grow を指定して調整する。 (*) 他にもいろんな調整の仕方があるがよく使うパターンのみ
  7. 余っている スペース flex-grow 2 flex-grow 1 flex-grow 2 flex-grow 1

    grow が 2 なので、2個割り当てる grow が 1 なので、1個割り当てる 余っているスペースを 3 分割する (flex アイテム全ての grow 合計値で割る) 余っている スペース 余っている スペース
  8. <ul> <li> ul { width: 100%; display: flex; } CSS

    <body> 余っているスペース
  9. <ul> <li> ul { width: 100%; display: flex; justify-content: space-between;

    } CSS <body> 幅いっぱい、均等になるように配置 自動調整 余白 自動調整 余白 自動調整 余白
  10. <ul> ul { width: 100%; display: flex; justify-content: space-between; }

    CSS <body> li:first-child, li:last-child { flex-grow: 1; } CSS 自動調整 余白 <li> 自動調整 余白 最初と最後だけに余白を作りたい grow で余白調整するので、これは必要ない
  11. とにかく grid-template を覚える .grid { display: grid; grid-template: "header header

    header " 50px "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } .header { grid-area: header; } .left-menu { grid-area: left-menu; } CSS いろんな定義の方法があるけど…
  12. .grid { display: grid; grid-template: "header header header " 50px

    "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } スペース区切りで エリアに名前をつけられる
  13. .grid { display: grid; grid-template: "header header header " 50px

    "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } エリアをまたぐ場合は同じ名前を指定する
  14. .grid { display: grid; grid-template: "header header header " 50px

    "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } 行の高さを指定
  15. .grid { display: grid; grid-template: "header header header " 50px

    "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } 列の幅を指定
  16. .grid { display: grid; grid-template: "header header header " 50px

    "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } .header { grid-area: header; } .left-menu { grid-area: left-menu; } CSS 表示したいタグに エリア名を指定する 定義したエリア名を、要素で指定する
  17. .grid { display: grid; grid-template: "header header header " 50px

    "left-menu main right-menu " auto "left-menu footer-main footer-main" 100px / 200px 1fr 200px; } .header { grid-area: header; } .left-menu { grid-area: left-menu; } CSS grid コンテナで余っているスペースを 指定した fr の数で割って、割り振る。 flexbox の grow に似ている 可変にしたい要素に 1fr 付けるくらいの感じで OK fr は利用可能なスペースの分数
  18. .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } CSS

    子要素の最低限の 維持したい幅を指定する 余っているスペースに 子要素をフィットしてくれる 繰り返しグリッドを設定してくれ る。子要素の数が確定できない場 合に便利
  19. Flexbox は一次元、Grid は二次元 Flexbox Flexbox は縦か横のどちらかに限定される。 折り返したとしても1方向を維持する Grid Grid は縦横を自由に設定可能

    横並びなメニューやヘッダーなどの UI 構築に向いている ページ全体のレイアウトや、折り返しが 必要な繰り返しコンテンツに向いている
  20. <img src="x1.png" srcset="x1.png, x2.png 2x, x3.png 3x" width="300" height="200"> HTML

    srcset 属性でピクセル密度ごとに分ける 普通のディスプレイの場合 Mac の Retina ディスプレイ や 4K、スマホなどの場合 高解像度スマホなど 解決 1
  21. <img srcset="./300x300.png 300w, ./600x600.png 600w" sizes="(max-width: 300px) 300px, 600px" src="./300x300.png">

    HTML sizes 属性で画面サイズに応じて分ける 解決 2 ブラウザの画面サイズに応じて、表示する画像を 振り分けられる。シンプルな記法のわりに難しい 挙動をするので最適化するのは厳しい印象。 正直、普段使いする必要はないと思う。
  22. <picture> <source media="(max-width: 375px)" srcset="crop.jpg"> <source media="(min-width: 376px)" srcset="normal.jpg"> <img

    src="normal.jpg"> </picture> HTML picture タグで画像を出し分ける 解決 選択肢になる画像を source で定義する。 Media query を使って使用する条件を設定
  23. ブレイクポイント 何を設定すればいいの問題 <style type="text/css"> p { color: red; } @media

    (min-width: ???px) { p { color: blue; } } </style> さまざまなデバイスが あるし、どんな閾値で 設定するのが良いか決 めにくい…
  24. 定番なオススメ設定 <style type="text/css"> p { color: red; } @media (min-width:

    481px) { p { color: blue; } } @media (min-width: 769px) { p { color: green; } } </style>
  25. 定番なオススメ設定 <style type="text/css"> p { color: red; } @media (min-width:

    481px) { p { color: blue; } } @media (min-width: 769px) { p { color: green; } } </style> 共通 + スマホ
  26. 定番なオススメ設定 <style type="text/css"> p { color: red; } @media (min-width:

    481px) { p { color: blue; } } @media (min-width: 769px) { p { color: green; } } </style> タブレット + 横向きスマホ
  27. 定番なオススメ設定 <style type="text/css"> p { color: red; } @media (min-width:

    481px) { p { color: blue; } } @media (min-width: 769px) { p { color: green; } } </style> デスクトップ + 大型タブレット
  28. モバイルファーストで作る <style type="text/css"> p { color: red; } @media (min-width:

    481px) { p { color: blue; } } @media (min-width: 769px) { p { color: green; } } </style> モバイルから作り始めて、徐々 に解像度が大きいデバイスに合 わせて作っていく
  29. <style type="text/css"> p { } @media (max-width: 480px) { p

    { color: red; } } @media (min-width: 481px) and (max-width: 768px) { p { color: blue; } } @media (min-width: 769px) { p { color: green; } } </style> 個人的にはこちらの厳密に指定 するスコープタイプが好き
  30. @media (min-width: 481px) {} @media (min-width: 769px) {} @media (max-width:

    480px) {} @media (min-width: 481px) and (max-width: 768px) {} @media (min-width: 769px) {} スタイルが被ってい るので、打ち消しが 必要になることがあ る スタイルがかぶらな いので考えやすい (冗長になることもある)
  31. <style type="text/css"> @media (min-width: 769px) { .sp_br { display: none;

    } } </style> <p>スマホではここで<br class="sp_br">改行したい</p>