対比的な構図のWebページを作ろう(背景の左右に画像を配置する)
2つの事柄を、画面の左右に並べて表示させることで、劇的な対比を示すことができます。
Webページの背景の左右に画像を配置して、対比的に示す例を紹介します。
このWebコンテンツでやっていること
二人の人物の肖像写真を、記事の背景に設定しています。
背景に設定した画像は、ページをスクロールしても、画面の中の決まった位置(ブラウザの上の方)に表示されています(記事の文章と一緒にスクロールしません)。
人物を紹介する記事の文章の中にも、画像を配置しています。こちらは、ページのスクロールに合わせて、表示される位置が変わっていきます。
表示する画像は同じですが、使用しているHTML/CSSの技法が異なるため、スクロールしたときの見え方・動作が違います。
Webページの構成
このサンプルは、次のようなファイルの構成でできています。
index.html
西郷隆盛と大久保利通についての説明を記述しているHTMLファイルです。HTMLのタグを使って、構造を作っています。
言い換えると、ページの内容と、論理的な構造を決めています。
また、このファイルの9行目にある以下の記述で、次に紹介するスタイルシートファイルstyle.cssを使って、ページの中の各要素の表示方法を決めるようにしています。
<head>
…
<link rel="stylesheet" href="css/style.css">
…
</head>
CSSへのリンク以外の詳細は、記事の後半で確認します。
style.css(フォルダcss内)
index.htmlで定義しているページの構造の各要素について、表示方法を決めています。CSS(カスケーディング・スタイルシート)という技術を使っています。
スタイルシートには、セレクタとプロパティを書きます。セレクタとは、HTMLの要素を選ぶ(セレクトする)要素です。
プロパティは、セレクタで選んだHTMLの要素に対して、表示方法を設定する値です。プロパティは、セレクタの後ろに中カッコ { } で囲んで書きます。複数の表示方法を指定する場合、セミコロン ; で区切ります。
具体例として、次のCSSを見てみましょう。
article{
width: 60%;
margin-left: 20%;
margin-right: 20%;
}
セレクタでタグarticleを選択し、プロパティで幅(width)を60%にしています。ここでいう幅60%とは、親の要素の幅の60%という意味です(※なお、タグ<article>の親は、タグ<div id=”hantoumei”>です)。
margin-leftは画面左の余白、margin-rightは画面右の余白です。それぞれ20%に指定しています。
このCSSのプロパティの指定により、「記事は中央部分の60%だけを使い、左右に20%ずつ余白をとって、表示する」という結果が得られています。
フォルダimages
画像ファイルを置いているフォルダです。西郷隆盛の画像(Saigou_Takamori_0085_1.jpg)、大久保利通の画像(Ookubo_Toshimichi_0032_1.jpg)の2つのファイルを置いています。
なお、これらの画像は、国立国会図書館が公開しているWebサイト「近代日本人の肖像」( https://www.ndl.go.jp/portrait/ )から入手しました。
HTMLファイルindex.htmlの構造
ここで、改めてHTMLファイルindex.htmlの構造を確認してみましょう。このファイルは、HTMLのタグによって、次のような構造を定義しています。
※以下では、Webブラウザが表示する、ページの本体部分に当たる部分(HTMLのタグ<body>の中)だけを示しています。
<div id="background"> <!-- 背景画像を置くための要素 -->
<div id="hantoumei"> <!-- 背景画像の上に、半透明のフィルタを置くための要素 -->
<article> <!-- 記事 -->
<h1>西郷隆盛と大久保利通</h1> <!-- 記事のタイトル -->
<section> <!-- 記事の段落 -->
<h2>...</h2> <!-- 記事の見出し -->
...
<!-- 画像 -->
<img src="..." style="...">
</section>
<section> <!-- 記事の段落 -->
<h2>...</h2> <!-- 記事の見出し -->
...
<!-- 画像 -->
<img src="..." style="...">
</section>
</article>
<footer>
...
</footer>
</div>
</div>
</body>
タグ<article>で、記事全体の範囲を決めています。タグ<h1>で、記事全体のタイトルを付けています。
タグ<article>の中には、タグ<section>を使って、2つの段落を作っています。
それぞれの段落には、タグ<h2>を使って見出しを、タグ<img>を使って画像を表示させています。
タグのID
ところで、タグ<div>を重ねて使っている所があります(タグ<div>の中に、タグ<div>がある。つまり、<div><div> … </div></div>)。
このタグ<div>には、それぞれ<div id=”…”>という属性が追加されています。
タグの<>の中に、id=”…”と書くことで、そのタグ要素に、ユニークな名前(ID)を付けることができます。
タグのIDをCSSのセレクタとして使う
このタグに付けたIDは、CSSのセレクタで使うことができます。IDの前に、記号#を付けると、HTMLの中にある要素を選ぶセレクタになります。
このサンプルのCSSの中では、IDを指定して、背景画像の設定と、背景色の設定をしています。
#background{
…
}
#hantoumei{
width: 100%;
background-color: rgb(255,255,255,0.8);
}
このCSSでは、タグ<div id=”hantoumei”>について、幅を親要素の100%、背景色を白(RGBで255,255,255)、透明度を0.8にしています。
この指定によって、親要素(タグ<div id=”background”>)に設定されている背景画像の上に、半透明のフィルターを被せたような表示を実現しています。
CSSを使って背景画像を設定する
いよいよ、この記事のテーマである、CSSを使って背景画像を設定する方法を紹介します。
サンプルのページの背景画像の表示方法を、文章で説明すると、以下の通りです。
背景画像は、タグ<div id=”background”>の要素に設定しています。
そのタグ要素の上に、タグ<div id=”hantoumei”>を乗せて、背景色を白、透明度を0.8に指定して、半透明のフィルターをかけています。そして、その上に記事(タグ<article>の内容)を表示させています。
概念図で示すと、次のようになります。
半透明のフィルターについては、上の「タグのIDをCSSのセレクタとして使う」という段落で説明してあるので、残っている背景画像の表示のCSSについて説明します。
背景画像は、タグ要素<div id=”background”>に設定しています。
CSSをみてみましょう。
#background{
width: 100%;
background-image:
url(../images/Saigou_Takamori_0085_1.jpg),
url(../images/Ookubo_Toshimichi_0032_1.jpg);
background-size:
30%,
30%;
background-position:
0% 10%,
100% 10%;
background-repeat:
no-repeat,
no-repeat;
background-attachment:
fixed,
fixed;
}
以下では、いったん上のCSSは全て無いものとして、少しずつ書き足していきながら、どんな効果が生じるか確認していくことにします。
CSS学習用プロジェクトをMonaca Educationにインポートする(要ログイン)
背景に表示する画像ファイルの指定
プロパティとしてbackground-imageを設定すると、画像ファイルを指定できます。関数url()の小かっこの中に、ファイルのパス(位置)を指定します。
フォルダimagesの中にある、2つのファイルを表示させたいので、カンマで区切って2つ書きます。
※なお、上記の編集用プロジェクトのファイルstyle.cssには、#copy_pasteというセレクタにプロパティを記述してあります。適宜、#backgroundセレクタの中カッコ { } の中にコピー&ペーストして、確かめてください。
#background{
width: 100%;
background-image:
url(../images/Saigou_Takamori_0085_1.jpg),
url(../images/Ookubo_Toshimichi_0032_1.jpg);
}
上記のCSSだけだと、表示は次のようになります。
背景の画像が大きく表示されてしまい、顔が見えなくなってしまっています。適切なデザインにするため、CSSの指定を追加していきます。
背景画像のサイズの指定
background-imageで、画像ファイルを指定しただけでは、画像が大き過ぎました。記事のサイズに見合うように、縮小して表示させるには、background-sizeを指定します。
#background{
width: 100%;
background-image:
url(../images/Saigou_Takamori_0085_1.jpg),
url(../images/Ookubo_Toshimichi_0032_1.jpg);
background-size:
30%,
30%;
}
2つのファイルそれぞれを、親要素の30%の大きさにするため、カンマで区切って2つ、「30%」という指定をしています。
結果は次の通りです。
画像のサイズが小さくなり、顔が分かるようになりましたが、西郷隆盛の画像が繰り返し表示されており、大久保利通の画像が表示されていません。
画像をタイルのように背景に敷き詰めて表示するなら、これでも良いのですが、今回は違います。
背景画像を繰り返さないように指定
画像を1回だけ表示するように(=繰り返し表示をしないように)、設定を改めてみましょう。
background-repeatを、no-repeatという値で指定します。2つの画像があるので、これもカンマで区切って2つ指定します。
#background{
width: 100%;
background-image:
url(../images/Saigou_Takamori_0085_1.jpg),
url(../images/Ookubo_Toshimichi_0032_1.jpg);
background-size:
30%,
30%;
background-repeat:
no-repeat,
no-repeat;
}
結果を確認すると、繰り返しはなくなったものの、画像は1枚しか表示されていないように見えます。
これは、2つの画像が同じ位置に重なって表示されてしまっているために、このような見え方になっています。
背景画像の位置の指定
2枚の背景画像のそれぞれについて、位置を指定してみましょう。
親の要素の、左から何%の位置か、上から何%の位置かをそれぞれ指定します。background-positionで、画面の左端からの位置、画面の上端からの位置を指定できます。二つの値はスペースで区切ります。
#background{
width: 100%;
background-image:
url(../images/Saigou_Takamori_0085_1.jpg),
url(../images/Ookubo_Toshimichi_0032_1.jpg);
background-size:
30%,
30%;
background-repeat:
no-repeat,
no-repeat;
background-position:
0% 10%,
100% 10%;
}
画像ファイルが2つあるので、カンマで区切ってそれぞれを指定しています。
1つ目の画像は、左から0%(つまり左端)、上から10%の位置に。2つ目の画像は、左から100%(つまり右端)、上から10%の位置に指定しています。
背景画像をウィンドウの決まった位置に表示させる
以上の設定でも、背景画像をうまく表示できています。
ただ、ここまでの指定では、画面がスクロールすると、背景画像もスクロールしてしまいます。
最後に、背景画像を画面全体と一緒にはスクロールしないようにする(記事の他の部分がスクロールしても、背景画像だけはウィンドウの決まった位置に表示させ続ける)指定をします。background-attachmentをfixed(固定)にします。
#background{
width: 100%;
background-image:
url(../images/Saigou_Takamori_0085_1.jpg),
url(../images/Ookubo_Toshimichi_0032_1.jpg);
background-size:
30%,
30%;
background-repeat:
no-repeat,
no-repeat;
background-position:
0% 10%,
100% 10%;
background-attachment:
fixed,
fixed;
}
これも、カンマ区切りで、2つの背景画像それぞれについて指定しています。
CSSによる背景画像の表示のまとめ
background-imageで背景に設定する画像ファイルを、 background-sizeで画像の表示サイズを決めました。
background-repeatをno-repeatに指定することで、繰り返しをしないようにしました。
背景画像の表示位置を決める際は、background-positionを使いました。
画像を、ページ全体がスクロールされても同じ位置に表示するためには、background-attachmentをfixedに指定しました。
背景画像の表示サイズや、表示する位置を工夫することで、様々な効果が得られます。色々な設定を試してみてください。