話題:レスポンシブをつくる

レスポンシブウェブデザイン(RWD: Responsive Web Design)でよく使う技術についてまとめています。

RWDとは

ウェブを見る端末は、パソコンだけではなくなりました。スマホやタブレットなど携帯できる端末、サイネージや巨大ディスプレイなど街中で見るような端末、テレビやゲーム機など昔からある端末でも、ウェブが見られます。

RWDとは、そんないろいろな画面サイズで見ても、ページが崩れず見えるようにデザインする技術です。

一見難しそうです。ウェブを作るプロでも、ときどきRWDに頭をひねることがあります。でも、必ず実現する方法があるのです。

コンテンツファースト

いろいろな端末のサイズで崩れず見えるようにするには、どう考えて設計すればよいか。2000年ごろから世界中の研究者が考えてきた結果、2013年ごろから「コンテンツファースト」へ定番化しました。

たとえば、ロゴのサイズが、縦300px × 横560px だったとします。これを横幅いっぱいに配置しようとしました。しかし、スマホのような横幅が 480px しかない端末では、ロゴが右端で切れて表示されてしまいます。

そこで、端末のサイズではなく、ロゴのサイズを優先して、560px を境にレイアウトを切り替える作りにします。

560px より大きい場合は width: 560px; であっても、逆に小さい場合には、width: 100%; にするといった具合です。

文字数や、レイアウト上の余白や、画像や動画のサイズによって、きれいに見える大きさで切り替えて作ってしまえばよいのです。

よく使うCSS集

そこで、よく使うCSSトップ5をご紹介します。

  1. flex-direction: column; / flex-wrap: wrap;
  2. display: flex;とした要素の並ぶ向きを、横方向から縦方向に変更するプロパティ。

    横に並んでいるメニューやアイコンやビジュアルを、スマホでは縦に並べたいときに使います。

    display: flex;で左にある要素から順に、flex-direction: column;で上から下へ並べていけます。

    逆に,display: flex;で左にある要素を下から並べたいときも大丈夫。flex-direction: column-reverse;で実現できます。

    さらに、flex-wrap: wrap;を設定しておけば、要素サイズがオーバーしても改行されるので、ページが横に切れることはほぼありません。

  3. min-width / min-height / max-height
  4. widthを%やemで指定していると、横幅がPCに比べ狭い端末で、写真などが横に縮みすぎることがあります。

    「この要素は少なくとも横幅200pxくらい欲しい…」との願い。min-widthで実現できます。

    どんなに横幅が狭くても、widthの最小値を与えられます。

    heightも同様に、少なくとも350pxは欲しいとき、min-height: 350px;とします。

    一方、「この要素は横幅200px以内に収めたい…」との願いは、max-widthで実現できます。こちらもよく使います。

  5. overflow-x: hidden;
  6. スマホで、画面が横に揺れるページをみたことはありませんか。

    ページ内の文字列や写真や要素が、ページ幅を超えてしまっているときに起こります。

    ページ内の全要素を調べて、食み出ている要素を特定できれば修繕できます。

    しかし、文字列や写真のサイズが大きくても、縦にスクロールできるが横にはスクロールできなくしたい。

    そのときに、overflow-x: hidden;を使えば、スクロールできなくできます。

    また、コンテンツが長くなったときだけスクロールバーを出すには、overflow: auto;と書きます。

  7. word-wrap: wrap; / word-break: break-word;
  8. 英語の文字列にハイフンやスラッシュをスペースを含めず書くと、改行がなされず文字列が横へ出てしまいます。

    また、スマホで長い文字列が横のサイズに収まらないと、横揺れの原因になります。

    word-wrap: wrap;として単語単位で改行するか、word-break: break-word;で強制的に改行させることができます。

    文書関連のCSSは、一度調べておくと良いと思います。

  9. position: fixed;
  10. どんなにスクロールしても右下や左上にアイコンをくっつけておきたい、上や下にメニューバーを固定表示させたい。

    そんなとき、position: fixed;を使うと、スクロールしても出現位置を固定できます。

    position: fixed;と書いた要素の親要素にposition: relative;を書いたうえで、

    position: fixed;にtop: 0;やright: 0;やleft: 0;やbottom: 0;を組み合わせます。

    しかし、くっつけずに、スクロールに連動させたくなったら…

    簡単です。position: fixed;をposition: absolute;に書き換えるだけです。


ここに挙げたプロパティを知るだけで、設計・表現の幅が広がると思います。

トップページへ戻る