HTML / CSS

web 関係のこと

HTML と CSS について。

HTML と CSS を使って、このページも書かれている。おおざっぱに言うと、 HTML は文章の構造を示したマークアップ言語CSS は文章の見た目を整えるマークアップ言語 である。これら (言語構造と装飾) は厳格に区別されるべきである。昔、自分が大学で習ったときには、そんな概念がちゃんとしてなくて、一旦ハマっていろいろ作ったこともあったけど、メンテナンスの煩雑さから遠ざかっていた。今 (2014/3/12 現在) の HTML の最新ヴァージョンは HTML 5、CSS の最新ヴァージョンは CSS 3 である。これらの仕様は W3C が策定している。

さらに、web ページは様々なプログラムを駆使して作成される。個人的にすぐに深入りする気がないが、Javascript を使えばこのページのトップ画像のようにランダムに絵を変えたり、ゲームを作ったり、訪れた人の動きに依って動作を変えることができる。

さらにさらに、自分で web サーバーを稼働させて php なんかを動かせば、サーバー側での処理も可能になり、多くのことができる。(いまのところ時間がないので試す予定ではない。)

下の方で述べるが、CSS もより便利に管理する方法 ( Sass と呼ばれる) が用意されているようでこのことは後で述べる。

HTML のこと

HTML はマークアップ言語であるため、特別な意味を持つ文字が多数あるが、それらをそれら自身として出力する方法は、実際のそれを記述せずに以下を記述する。

特殊文字 (参照: HTML の特殊文字 : IT 用語辞典 )

  • → → →
  • & → &
  • < → &lt;
  • > → &gt;
  • ∗ → &lowast;
  • √ → &radic;
  • § → &sect;

やってはダメなこと。

ブロック要素とインライン要素をちゃんと把握すればいいが、とりあえずの自分の為のやりがちな禁止次項を羅列。まとまってるサイトは → このタグの中ってなんのタグがかけるんだっけ?

  • label タグの中に div タグはダメ
  • p タグの中に h タグ、ul タグはダメ
  • dt タグの中に div タグはダメだけど、dd タグの中に div タグはオッケー

しかし、p タグの中の ul タグがダメというのは、何とも腑に落ちない。

Haml について。

Haml は HTML を書くためのツールである。HTML 自体を直接書くのではなく、HTML を作るための Haml を書く。Haml の方が、変数が使えたり、閉じ括弧を自動で付けてくれたりと、何かと便利である。ブラウザが初めから Haml を理解すればいいのだろうが、そうなっていないので、1 ステップ多くなるが、その方法を取る。

書き方については、以下で徐々に説明するが、Haml を書いたら、コンパイルという作業をして、HTML を作る。Haml のファイル xxx.haml を使って、xxx.html を作るには以下のコマンドを用いる。

1haml -f html5 xxx.haml xxx.html
ここで、 -f html5 は html5 にするという意味である (今は特に指定しなくても html5 になる?)。

Haml の基本

Haml は HTML の入れ子構造を再現するために半角スペース 2 つを用いる。例えば、一番簡単な HTML

1<!DOCTYPE html>
2<html>
3  <head></head>
4  <body></body>
5</html>
を作るなら、Haml で、
1!!!
2%html
3  %head
4  %body
と書けば良い。!!!というのは、html のタイプを書き込むマークアップである。今回は、-f html5としたので、Html5 に準拠した出力がなされる。head と body は html 内のタグなので、半角スペース 2 つを用いて字下げを行っている。

タグ内に何か入れる場合はすぐ隣に書く。次の場合、

1<p>この文章は p タグ内にあります。</p>
1%p この文章は p タグ内にあります。
とすればよい。 字下げをして書くこともできる。
1<p>
2  この文章は p タグ内にあります。
3</p>
としたいときは、
1%p
2  この文章は p タグ内にあります。
とする。 2 行で書きたいとき
1<p>
2  この文章は 1 行目
3  この文章は 2 行目
4</p>
は、
1%p
2  この文章は 1 行目
3  この文章は 2 行目
とする。

ID の付与は、#id などとして、タグのすぐ後に書く。 例えば、

1<h1 id="title">タイトル</h1>
としたい場合は、
1%h1#title タイトル
とする。

クラス の付与は、.class などとして、タグのすぐ後に書く。 例えば、

1<h1 class="colored">タイトル</h1>
としたい場合は、
1%h1.colored タイトル
とすれば良い。

  • 子要素に対して Html にしたときに一行にタグと要素を書く方法。
    タグの隣に要素を書く。
    ソース:
    1%ul
    2  %li sentence
    出力結果:
    1<ul>
    2  <li>sentence</li>
    3</ul>
    < 記号を書く。
    ソース:
    1%ul
    2  %li<
    3    sentence
    出力結果:
    1<ul>
    2  <li>sentence</li>
    3</ul>
  • 親要素に対して Html にしたときに一行にタグと要素を書く方法。
    > 記号を書く。
    ソース:
    1%ul
    2  %li>
    3    sentence
    出力結果:
    1<ul><li>
    2  sentence
    3</li></ul>
  • 親要素、子要素両方について Html にしたときに一行にタグと要素を書く方法。
    > と < は一緒に使える。
    ソース:
    1%ul
    2  %li><
    3    sentence1
    4%ul
    5  %li<>
    6    sentence2
    出力結果:
    1<ul><li>sentence1</li></ul>
    2<ul><li>sentence2</li></ul>

CSS のこと

いくつかの単発な使い方。

影を付ける。(参照: ほんっとにはじめての HTML5: box-shadow)

Float を理解する (参照: 初心者がよくハマる、CSS の float プロパティ徹底攻略)

コンテンツが Float で高さを持たない場合の背景設定のおまじない。

1overflow: hidden;

CSS テクニック

テクニックを応用してコードサンプル等を実装 (参照: CSSだけ!クリックでスムーズに開閉するアコーディオンメニュー)

コードのハイライト

SyntaxHighlighter を使ってコードをハイライトする。やっていることは、Javascript と専用の CSS を用いてタグで囲まれた範囲を装飾しているに過ぎない。現在の最新ヴァージョンは 3.x 系だが、ここではコードの自動折り返しを行いたいので、Ver. 2.x 系を使う。

細かい設定 (参照: SyntaxHighlighter2.0の使い方)

以下の内容を タグの中に書き込む。

  • コードを囲むタグを script にする。
    1SyntaxHighlighter.config.tagName = "script";
  • マウスオーバーしたときにツールバーを表示する (Flash)
    1SyntaxHighlighter.defaults['toolbar'] = "true";
  • コードを隠して、リンクを貼る。
    1class="brush: html; collapse: true;"

Sass について。

現行の CSS では非常にまどろっこしい書き方が多いし、変数を使うことができない。そこでこの Sass という言語を使うと、CSS ファイルを作成するときに変数を定義したり、ファイルを分割して管理したりして効率よく作業ができる。CSS を直接分ける方法もあるのだが、パフォーマンスが落ちたり、読み込みの順番等でよからぬ挙動を示すことがあるため、Sass の方が優れている。それ以外の付加価値もたくさんあると思うがそれは本家サイトを見るなどして勉強して欲しい。

導入 (Mac の場合) は、以下のようにする (参照: CSS拡張メタ言語「Sass」フレームワークをインストール(Mac))

1sudo gem install sass
少し説明すると、

  • sudo は管理者権限で実行するという意味である。インストール関連の作業をするときは付ける。
  • gem は Ruby 系のパッケージ管理システムとあった。ということは、 MacPorts でもあるのかな? と調べると、あるみたい。いつもは MacPorts でパッケージ管理をしているのでそちらの方がいいかも? それとも、Ruby 系のものは Ruby 内で完結させた方がいいか? (保留)

という感じ。後は install コマンドで sass を入れろということなので、説明不要。 実は、上の参照ページでは、 haml を入れているが、sass だけ使う場合は sass だけインストールすればいい。haml は sass の HTML ヴァージョン、つまり、Ruby を使って html を効率的に書くツール (?) だと思われます!

基本的な使い方は、

1sass <ファイル名(*.scss)>:<ファイル名(*.css)>
とすれば、scss ファイルから css ファイルが生成される。css ファイルの中身は普通の css ファイルなので、正しくできているか簡単に確認できる。 このとき、いくつかオプションがあって、
1sass --style <指定> <ファイル名(*.scss)>:<ファイル名(*.css)>
として、<指定> の所を、

  • nested: 人が見て分かりやすい形 (default)
  • compact: ネストが行われない形
  • compressed: 改行も取り払われた形
と選ぶことで css の見た目をサイズを決めることができる。 また、
1sass --watch <ファイル名(*.scss)>:<ファイル名(*.css)>

とすることで、scss ファイルを変更する度に自動で css ファイルを更新してくれるようになる。但し、試した所、scss ファイル内で @import したファイルは監視してくれないようだ (T_T)。 基本的な使い方は詳しく 【Sassを覚えよう!】もくじ的なのと参考リンク で触れられているので参考にしてください。

header の自動挿入

header の部分を各 html に書くのが面倒になったので、シェルスクリプトで挿入するようにした。
01#!/bin/sh
02### parameters ###
03head="header.html"
04 
05##### usage #####
06function usage_exit() {
07cat << EOF
08Usage: $(echo $(basename $0)) [option] param
09  param:  --file <file>: file to change header (ex: index.html)
10  option: -h|--help    : show this message
11EOF
12exit 1
13}
14 
15OPT=$(getopt -o h \
16             -l file:,help -- "$@")
17[ $? != 0 ] && usage_exit
18 
19eval set -- "$OPT"
20while true; do
21  case $1 in
22    --file) file=$2; shift;;
23    -h|--help) usage_exit;;
24    --) shift; break;;
25  esac
26  shift
27done
28shift $(( OPTIND -1 ))
29 
30### check if <file> is exist ###
31if [[ -z $file ]]; then
32  echo "specify the file"
33  usage_exit;
34fi
35 
36### make buck up ###
37cp $file{,.bkup}
38 
39grep -B 100000 '<header>' $file.bkup > $file
40grep -A 100000 '<header>' $head | grep -B 100000 '</header>' \
41  | sed -e "/\<header\>/d" -e "/\<\/header\>/d" >> $file
42grep -A 100000 '</header>' $file.bkup >> $file
43 
44echo "$file is regenerated. (back up: $file.bkup)"
1for file in $(ls *html); do if [[ $file != header* ]]; then ./makeheader.sh --file $file; fi; done

メモ

疑似要素 (コロン : で指示される、hover や checked など) は、隣接セレクタ + で繋いだとき、2 つ前のものまでには適用されるが、その上の要素には適用されない (ブラウザ依存かも)。

01/* CSS sauce */
02/* NG */
03div:hover + div + div + div {
04  background: #0ff;
05}
06/* OK */
07div + div:hover + div + div {
08  background: #f0f;
09}
10/* OK */
11div + div + div:hover + div {
12  background: #ff0;
13}
14/* OK */
15div + div + div + div:hover {
16  background: #aaa;
17}
1<!-- HTML sauce -->
2<div style="color: #0ff;">line 4</div>
3<div style="color: #f0f;">line 3</div>
4<div style="color: #ff0;">line 2</div>
5<div style="color: #aaa;">line 1</div>
実行例:

line 4
line 3
line 2
line 1
to the top