画像を横100%でフルに表示して文字を載せる、これが難しい
本ページトップのような画像と文字をレイアウトする、というのがこのページの内容である。
まず、画像は二種類用意する
ひとつはPC用の画像、PC用は横長の画像にしなければ、画像だけでPCのディスプレイを埋め尽くしてしまう。横長の中にイメージ全体が入るようにしてあげる。
もうひとつはモバイル用の画像、モバイル用はやや縦長の画像にするとバランスが良い。
.wrapperのbackgroundに画像を配置して、その画像中央に複数行の文字列を配置する方法は次の通りである。
/* html */
<div class="wrapper">
<div class="box">
<h1 style="color: #008080">Place the horizontal direction and the vertical direction at the center</h1>
<p>このボックスは .wrapper の中で幅70%、上下左右の中央に配置される。</p>
</div>
</div>
/* css */
.wrapper {
position:relative;
display: block;
height:50vh;
border: solid #008080;
}
.box {
position:absolute;
top:50%;
left:50%;
transform:translate(-50%, -50%);
width: 70%;
background-color: rgba(154, 188, 244,0.2);
}
画像は上記htmlに下記cssの類を充てる。いくつかのブレイクポイントの設定が必要で、PC用またはモバイル用画像の指定とheightを微調整する。
メモ:"height: 100%" の要素が画面の高さ100%にならない場合の対応方法はhtml要素とbody要素に height: 100%; を指定する
/* image css */
@media (min-width: 200px) and (max-width: 375px) {
.wrapper {
max-width: 375px;
height: 60vh;
position: relative;
background-image: url("images/background-photo_mobile.png");
background-size:cover;
background-repeat: no-repeat;
color: white;
}
}
SAMPLE
Place the horizontal direction and the vertical direction at the center
このボックスは .wrapper の中で幅70%、上下左右の中央に配置される。
メディアクエリー / Media query を使う
画像と文字がオーバーラップするという環境では、メディアクエリーを使ったバランスの微調整が必要だ。デバイス別での表示を確認して、画像と文字のバランスの調整を行う。ブレイクポイントを適切に区切り、topプロパティで、上からの画像の配置位置を調整したり、文字サイズを調整する。現時点でデバイスで確認したいサイズは→ 320px~540pxがモバイル、541px~1279pxがタブレット、1280px~がPCの3グループ。
CHROME ディベロッパー ツールで表示を確認する
実機が手元にないので、Chromeのディベロッパー・ツールにて表示を確認する。cssの設定通りにサイズが効いてくれない場面に出くわす時は「!important」(スタイルを優先させる)を捻じこむと殆どが上手くいく。
Viewport Unit(ビューポートの単位)とは?(H5)
現在、CSSで利用できるViewport Unit(ビューポートの単位)は、4種類。(P)
- vw ビューポートの幅のパーセント
- vh ビューポートの高さのパーセント
- vmin vwかvhの最小値
- vmax vwかvhの最大値
vminがIE9で、vmaxがIE10-Edgeで利用できないが、ここでは「vw」のみを利用するので、ほとんどのブラウザで使用できる。ビューポートとは、ブラウザの幅と高さのサイズに依存する。 1vwはブラウザの幅の1%、100vwはブラウザの幅の100%を意味する。
ビューポートの利点は、ビューポートが変化した時はいつでもその値が自動的に再計算されることで、ページをロードした時、リサイズした時、向きを変えた時、すべてで自動的に再計算される。例えば幅と高さを1/2にして、面積を全体の1/4に指定した場合、どんな時でも必ず1/4になるコンポーネントを簡単に作成することができる。