ラベル CSS の投稿を表示しています。 すべての投稿を表示
ラベル CSS の投稿を表示しています。 すべての投稿を表示

2012-10-01

使って欲しい 3 つの HTML 5 — ruby, details, scoped style

HTML 5 には面白い新機能が沢山ある。その中で、特にブロガーが使うのに便利そうな 3 つの新機能について紹介したい。

ルビ

ruby 要素はテキストにルビを振る。古い HTML 時代から存在しているので、見かけることは多いけれど、HTML5 のルビはシンプルなフォーマットで書く様になっている。

<ruby>文字 <rt>ルビ</rt></ruby>

たったこれだけ。ただし、これだとルビ非対応のブラウザーでルビ文字が連続して現れる。例えば、次の様に入力すると

<ruby>都 <rt>みやこ</rt></ruby>

非対応ブラウザーでは

都みやこ

と表示されてしまう。これは見苦しいので、次のテンプレートをぼくは使っている。

<ruby>文字<rp> (</rp><rt>ルビ</rt><rp>) </rp></ruby>

こうしておくと、ルビ対応なブラウザーでは rp 要素内が消え、非対応なブラウザーでは rp 要素の中身が現れる。サンプルを一つ

<ruby>都<rp> (</rp><rt>みやこ</rt><rp>) </rp></ruby>

非対応ブラウザーの出力は次の通り。

都 (みやこ) 

Google Chrome の出力は次の通り。

details 要素

details 要素を使うと、「詳細はこちらをクリック」「続きはこちらをクリック」みたいなことが JavaScript なしで出来るようになる。使用例として、過去記事「Google 乗換案内がバスルートをサポート」で「地域別サポートバス会社一覧 - 49 社(五十音順)」を隠しているのでよければ触ってみて欲しい。

文字部分をクリックすると、サポートバス会社一覧が表示される。

details 要素の書式は次の通り。

<details>
<summary>サマリー文字</summary>
詳細...
隠したい文章...
</details>

JavaScript を使わなくて良いのがオススメ・ポイント。なお、非対応ブラウザーでは details 要素内は「見えて」しまう。ユーザー・アクションがない限り絶対に見せたくない、という用途には向いていない。

スコープのある CSS Style

普通、CSS はスタイル・シートを別ファイルに持つかウェブ・ページの先頭で指定する。けれどブログでは、この記事でだけ使いたい CSS スタイルが欲しい場合がある。

先日、新しい iPad と Google Nexus 7 の違いをテーブルに書いた。そして優れている方を「青文字」で書いた。scoped style を使わないなら、次の様に書く。

<td style="color: blue;">優れている</td>

このやり方は二つの点でスマートじゃない。一つは、何故優れている方が青字なのかが分からない点。もう一つは、色を青から赤に変えようとした時に置換に頼らなければならない点。特に後者はケアレスミスを招きやすい。今回の例では、blue を red に置換すると「bluetooth」が「redtooth」に誤置換される恐れがある。

そこで、scoped style を使う。書式例は次の通り。

<table border="1">
<style scoped="scoped">
  .better { color: blue; }
</style>
<tr><th>解像度</th><td class="better">264 dpi</td><td>216 dpi</td></tr>
...
</table>

こう書くと、ソースコードを見て 264 dpi が better だと分かるし、色を変えたい場合は scoped style の CSS を書き直すだけで良い。

そうそう、「スコープ」の説明もしておこう。style 要素に scoped 属性を上記の様に設定すると、一つ上の親の要素の中でだけ、そのスタイルは適用される。上記の例では style 要素の親は table 要素だから、table 要素の中でだけスタイルが適用される。

こういうスタイルは、全体のスタイル・シートで決定することが難しい。もしかして、better の他に worse があるかもしれないし、良し悪しの比較ではなく別のことに色を付けているかもしれない。それはブログの記事によって変わるもの。scoped style は正にそういう悩みを抱えるブロガーにピッタシの機能。

サポート・ブラウザーについて

デスクトップ版の Google Chrome と iPad の Safari が上記の機能を全てサポートしていることを確認した。

なお、ブラウザーに限らず Google Reader では、全ての機能がサポートされていないことも確認した (2012-10-01 現在)。この点に関しては、一刻も早い Google のサポートを期待したい。

あとがき

ルビに details 要素に scoped style は一年位い前からこのブログでよく利用している。フィード・リーダーがサポートしてくれていないのは痛いけれど、それにも増して「書きやすい・読みやすい」というメリットがある。

少くとも Blogger のテンプレートは HTML 5 なのでこれら要素を使うことに問題はない。また、他の HTML 5 じゃないブログでも、おそらく HTML 5 の書き方をしてもブラウザーが良きにはからってくれると思う。よければ試してみて欲しい。

2009-09-15

CSS でセクション・カウンター

CSS でヘッダー要素にカウンターを自動的に付けることができる。例えば、「Chapter 1.」とか「Section 2.1.」みたいなのを自動で振れる。で、いつも CSS の書き方を忘れてしまうのでメモ。

sample.html

まずはサンプルの HTML ファイル。

<html>
 <head>
  <title>CSS Counter Sample</title>
  <link href="sample.css" rel="stylesheet" type="text/css"/>
 </head>
<body>
<h1>CSS Counter Sample</h1>

<h2>OS</h2>
<h3>Linux</h3>
<h3>MacOS</h3>
<h3>Windows</h3>

<h2>Company</h2>
<h3>Google</h3>
<h3>Apple</h3>
<h3>Microsoft</h3>
<h3>Yahoo!</h3>
</body>
</html>

これを、CSS ファイルなしでウェブ・ブラウザー (Firefox 3.5) で見るとかうなる。

HTML Headers

sample.css

次に sample.css を追加してみませう。

h1 {
  counter-reset: chapter;
}

h2 {
  counter-increment: chapter;
  counter-reset: section
}
h2:before {
  content: "Chapter " counter(chapter) ". ";
}

h3 {
  counter-increment: section;
}
h3:before {
  content: "Section " counter(chapter) "." counter(section) ". ";
}

sample.html と同じ場所に置いて、ブラウザーをリロードするとかうなる:

HTML Headers with counter

CSS

counter-increment で変数 (この場合 chapter や section) のカウンター値を増やす。そして、contentcounter を使ってカウンター値を出力させる。

counter-reset でカウンター値をリセットさせないと、次の章に入っても節番号が 1 に戻らないので注意。

CSS を使ったカウンターなので、途中に h2 要素を突っ込んでも自動的にカウンターが振られ直される。便利。

gist

今回書いたサンプル・スクリプトは、gist にものっけてある。git 使いの方はどうぞ。

2008-09-05

Pre 要素に横スクロール・バーを付けた

当方のブログ、今まで pre 要素で横に長〜いテキストを書くと右端がサイドバーに隠れて見えなくっていた。例えば、ソース・コードをそのままコピペした時とか、長いワンライナーを書いた時にそんなことが起きていた。

今日、改善策を入れた。

CSS で一行だけ。

div.quote, pre.sample {
  margin: 0 0 1em 20px;
  padding: 5px 0 5px 10px;
  overflow: auto;
}

overflow というのがそれ。行をはみ出す (overflow する) 時に、自動で横スクロール・バーを出してくれる。

これで、少しはブログを見易くなったんじゃないかと思う。今まで、ご不便かけててごめんなさい。

2008-06-13

CSS で画像回転

CSS で画像を回転できないものかと調べてみた。で、CSS3 の規格でこんなの発見。

ブロック要素を回転させる。

rotation
角度を指定。デフォールト値は 0。
rotation-point
回転軸をどこにするか指定する。デフォールト値は 50% 50%、つまりブロックの中心。

こんな風に使うらしい。

h1 {
  rotation: 45deg;
  rotation-point: bottom left;
}

こりゃいいものを見つけた。というわけで、早速 firefox 3 で試してみた。

何も起きない。

どうやら規格が新しすぎて、対応していないっぽい (Safari, Opera はどうかなぁ?)。画像回転を CSS で行なうには、もう少し待たないといけないみたい。

2006-07-30

mouse hover で文字を小さくする効果の嫌なところ

マウスを文字の上に持ってくと、その文字が大きくなる、って効果を入れてるサイトがあるよね。クリックしようとしてる文字を見易く伝えるとか、Mac OS X っぽい効果を狙ってるとか、いろんな意図があるんだと思う。ぼくも、こういうギミックは好き。よいユーザー・インターフェイスを提供してくれるなら、文句ない。

不思議なのは、マウスを文字の上に持って行ったら、その文字を小さくする効果を入れる人がいること。彼らの意図が、汲み取れない。何で、こんな効果を入れるんだらう。

いや。別に、理由が分からなくても、困ることがなければ、文句は言わないよ。でも、少し嫌なことが起きるんだよね。

Shaking Character

具体的に症状を見てみませう。

CSS コードは次の通り。

#css_sample_2006_08_01       { font-size: xx-large; }
#css_sample_2006_08_01:hover { font-size: small; }

次の文字の「Shaking」の部分にマウスを持って行く。すると、文字がブルブル震え始める。

Font Shaking

マウスが Shaking の文字に被さると、:hover の命令に従って文字が小さくなる。すると文字がマウスから逃げた形になる。つまり、マウスは文字の上にかぶさらなくなる。hover 命令が解除されるので、文字は元の大きさに戻り、マウスが再び文字に被さる。あとは、これの繰り返し。

文字がガタガタ震えて、見苦しいこと甚だしい。

今回の例は、分かり易くするために、デフォールトの文字サイズを xx-large、小さな文字を small にしたけど、デフォールト・サイズが normal であっても文字を小さくする限り同じ現象が起きる。

どうか、CSS を書く時は、マウスを飾して文字を小さくする効果が、こういった副作用を生むことを覚えておいて欲しい。

2005-12-21

Greasemonkey っていいね (若しくはフォント・サイズを小さくするスクリプト)

Greasemonkey を使い始めた。Greasemonkey は firefox の拡張の一つ。サイトごとに任意の JavaScript を実行させる環境だとぼくは認識してる。

例えば、clmemo@aka では先日ブログのフォント・サイズを small から medium に直した。で、今まで通り小さなフォントで表示させる読者のために bookmarklet を書いて置いたのだけど、ページを移動するたびにブックマークレットを実行する必要があって面倒臭い。もし、「http://at-aka.blogspot.com/ ではフォント・サイズを常に small にする JavaScript を実行する」ことができたら手間が省ける。

思いたったが吉日。そういう Greasemonkey スクリプトを書いてみた。

まず、

から最新の Greasemonkey をインストールして、次のユーザー・スクリプト (Greasemonkey で動かす JavaScript のコードをそう呼ぶ) を右クリック、「Install User Script」する。

コードの中身はたったの一行。

// ==UserScript==
// @name          Font Size Small
// @namespace     http://at-aka.blogspot.com/
// @description   Set font-size of body element small.
// @include       http://at-aka.blogspot.com/*
// ==/UserScript==

GM_addStyle("body { font-size: small; }");

GM_addStyle は Greasemonkey が定義する関数で、CSS を設定するためのもの。ちょっと JavaScript か CSS を勉強するだけで、任意のページの見栄えを変えることができる。Greasemonkey って面白い。

他のページでもフォント・サイズを小さくしたかったら、メニューの「ツール」から「Manage User Script」を選ぶ。インストールしたユーザー・スクリプトの一覧が表示されるので、スクリプトを選んで Include Pages に適用したいページの URL を書く。例えば http://www.foo.bar/* という感じに (* で任意の文字列を表す)。若しくは、Excluded pages にサイトを指定すると、そのサイト以外のページでユーザー・スクリプトが有効になる。

フォントを小さくするんじゃなくて、大きくしたい (Medium なフォント・サイズにしたい) なら、次のユーザー・スクリプトをお試しあれ。

ぼくが使ってるユーザー・スクリプト

ぼくが使ってる他の人のユーザー・スクリプトを二つ紹介。

マイミクシィ最新日記から外部 Blog を消す Greasemonkey 用 User Script - にぽたん研究所

mixi の最新日記一覧から、外部ブログで日記を公開している人達の日記を隠す。外部ブログを Google Reader なんかで読んでる場合に、余計な情報を見なくて済むようになるので便利。

(追記:2005-12-22) コメント欄にて、「マイミキシィ管理」から「マイミキシィ最新日記に表示させない」を選ぶことができるとの情報を頂きました。「表示」「非表示」を一人ずつ設定することができるので、かなり便利です。(takayama さん、ありがとうございます)

最速インターフェース研究会 :: del.icio.usにはてなブックマーク件数をくっつけるGreasemonkeyスクリプト
del.icio.usはてなブックマークのブックマーク件数も表示する。del.icio.us で人気なページがはてなブックマークでほとんどブックマークされてなかったりとか、その逆もあったりとか。このスクリプトの逆バージョンもあればいいのに...

ココログ・フリー

今回、User Script を公開するに当たって、ココログ・フリーのアカウントを取って、そこにファイルを置いてみた。よさげなら、改めて記事を書きます。

2005-12-19

フォント・サイズをノーマルにした |CSS|Blogger|

昨日、clmemo@aka のデフォールト・フォントサイズを small から normal (指定無し) にした。具体的には、CSS の次の一行を削っただけ。

body { font-size: small; }

文字が大きく表示されるようになってるかしらん。というのも、small という指定は相対指定なので、どれ位いフォント・サイズが小さくなるかはブラウザー依存だから...

手元の firefox 1.5 で確認すると、ちょっとフォントがノーマルだと大きすぎかなぁ、という印象。きっと小さなフォントに慣れてるせいだと思うことにしやう。

何で小さなフォントをやめたのか

まず、何故小さなフォントを使ったか。特に理由はなくて、一番最初に選んだブログのデザインで font-size: small が指定されてたのから踏襲しただけ。何か見た目に格好いいかなぁ、という気がした。

小さなフォントをやめようと思ったきっかけは、以下のようなサイト

を読んで、読み手に最初からフォントを小さく見せるよう要求のはやりすぎなのでは、と思ったから。例えば、普段、普通のフォントが大きく感じる人はもしかしたら自分でブラウザーのデフォールト・フォントを「小」にしているかもしれない。そこに、ぼくが小さなフォントを指定したら、「小×小」でとても小さなフォントになる。これでは、余計なおせっかいもいいところ! 逆に、普段フォントが小さいと感じてフォント・サイズを「大」にしている人には、ぼくが小さなフォント・サイズを押しつけるのは迷惑この上ない話になろう。

そんなことを考えて、本文のフォント・サイズは「ノーマル」に戻した。

font-size を small にする bookmarklet

一応、今までのフォント・サイズが好きな方々のために、font-size を「小」にする bookmarklet と「ノーマル (medium)」に戻す bookmarklet を書いた。

フォントを相対指定しているページなら、どこでも使えるんじゃないかと思う。ただし、フォント・サイズを絶対指定しているサイトについては、その限りではない (;_;)

2005-10-08

ブログのデザイン -- IE 対策

このブログ clmemo@aka のデザインの骨子は、[2005-06-06] に Green Witch という名前で作られた。その後、 最小幅を設定したり、 右サイドバーに折畳み式のコンテンツを作ったりと少しずつ進化してきた。ただ、デザインの確認は firefox だけでやっていて、IE のバグを考慮に入れてなかった。

たまたま、IE でブログを見直してみたところ、レイアウトがえらく崩れているのにびっくり。というわけで、IE のバグ対策を二点行ったのでメモっとく。

問題

IE6 でこのブログを見ると、右サイドバーがメイン・コンテンツの右端から押し出されて、本文の一番下に配置される。これは、次の二つの問題に起因する。

  1. IE6 が min-width をサポートしない問題
  2. IE6 が 内側のボックスの大きさに合わせて外側のボックスの width を広げてしまう問題

min-width をサポートしない問題について

firefox で見ると、メイン・コンテンツの横に白い帯が見える。これは、単なる飾り。作り方は、「 最小幅の設定」を参照されたし。

問題は、この飾りを作るために width にパーセント指定と px 指定が混ざっていること。

#main-content {
  width: 61.8%;
  float: left;
  margin: 0 1% 0 2%;
  border-style: none double;
  border-width: 18px;
  border-color: #eee;
}

#sidebar {
  float: left;
  width: 28%;
}

そのため、ブラウザーのウィンドウ幅を狭くすると、width が 100% を越えて、(結果) 右サイドバーが下に落ちてしまう。そこで firefox では最低の window 幅を CSS の min-width で指定していた。IE は min-width をサポートしないから、この解決策は使えない。

問題になっているのは border-width の px 指定だから、IE にはボーダーを設定しないことで逃げる事にした。見栄えが好みと合わなくなるけど、サイドバーが下に落ちるよりはまし。

IE だけ CSS を適用させないようにするのに、IE の独自実装 Conditional Comments を利用した。Conditional Comments を使うと、

<![if expression]> HTML <![endif]>

のように書いて、if 文にマッチするブラウザーだけ HTML を表示させられるようになる。

今回の場合、IE だけボーダーの設定をしないようにしたい。具体的には CSS ファイルの該当部分からボーダーの設定を取り除き、 Blogger のテンプレートに次のコードを追加した。

 <![if lt IE 5]>
  <style type="text/css">
    #main-content {
      border-style: none double;
      border-width: 18px;
      border-color: #eee;
    }
  </style>
 <![endif]>

if 文の意味は、IE のバージョンが 5 以下ならボーダーの設定をする、というもの。

内側のボックスの大きさに合わせて外側のボックスの width が広がる問題

簡略化した次のコードをごらんあれ。

<div style="width: 100px;">
 <pre>
   ...
 </pre>
</div>

上の例では、div 要素が pre 要素を囲んでいる。そして外側の div 要素には 100px の横幅が設定されてる。問題は pre 要素の中身のテキストが横長く、100px を越えた場合に起きる。

firefox のような標準に準拠したブラウザーは、100px 超過分のテキストは div のボックスを飛び出る形で表示する。ところが、IE は超過した分だけ外の div ボックスの width を広げてしまう。もし、pre の内側のテキストが 120px なら、div の width も (CSS の設定を無視して) 120px になる。200px なら、div の width は 200px。テキストの幅がブラウザー・ウィンドウの幅と同じ位い広いと、div もブラウザー・ウィンドウの幅と同じ位い広がっちゃう。そんなことになれば、右サイドバーの在るべきスペースは当然なくなるから、結果下に落ちることになる。

この解決策として、pre 要素に幅を設定してそれより大きな width を取る場合はスクロール・バーを表示させる方法がある。それを CSS で指定するには overflow: scroll とする。ただ、この問題は IE だけの問題だから、この設定は IE にだけ指定したい。というわけで、 Blogger のテンプレートに次のコードを仕込んだ。

 <!--[if IE]>
   <style type="text/css">
    pre {
      width: 450px;
      overflow: scroll;
    }
   </style>
 <![endif]-->

Conditional Comments で IE にだけコードを適用。ただし、このコードは IE の独自拡張だから、 firefox らのために <!-- --> で Conditional Comments そのものをコメントアウトする。

さあ、これで IE でもレイアウトが崩れないはず。どうかな?

2005-08-29

「すみけんたろう」の CSS 本

HTML には文書構造を、CSS にはデザインを。これが、最近の W3C の方針。このブログもできる限り、その理念に沿おうと頑張ってる。

すみけんたろうの 「スタイルシート Web デザイン」

僕 が文書構造とデザインの分離について知ったのは、すみけんたろう氏の「スタイルシートWebデザイン」からだった。この本は凄かった。とにかく CSS (Cascading Style Sheet) の目的と理想を追いかけていた。当時 CSS を不完全にしかサポートしないブラウザーの多かった中にあって、CSS の普及のためにも「標準」に則った CSS デザインを勧めていた。巷には、HTML のデザイン本が溢れていたけど、一線を画していた。HTML や CSS のリファレンスやクックブックになるまいという、気概を感じた。CSS の解説書にして、唯一思想を語っていたような気がする。

でも、志が高すぎたのか。読者に媚を売らなかったせいか。それとも、分かりにくい目次とおざなりな索引のせいか (僕は、コレが一番の原因だと思ってる。とにかくリファレンスとして使い辛かった)、「スタイルシート Web デザイン」は絶版になってしまった。

僕が絶版を知ったのは [2003-07-01]。すみ氏のウェブページを見つけたときだった。すみ氏のウェブページには、本の原稿が公開されていた。

まき氏バージョン

さて、先日、久方ぶりにすみ氏のウェブページを覗いてみて驚いた。なんと、まき氏による HTML 版へのリンクが貼ってあった。

まき氏のウェブページができたのは [2003-07-29]。僕がページをチェックしてから、ほぼ一ヵ月後。ニアミスで、出会うのが 2 年も遅れてしまった。でも、知ってしまったからには紹介せねばなるまい。というわけで、この記事を書いた。

も ともと、この本はリファレンスや Tips というより、「CSS 斯くあるべし」を語った本。古くなろうはずが無い。執筆当時、勧告になった CSS2 は、未だフルサポートされたブラウザーが無いほど。ぜひ CSS を勉強し始める人に、そして、CSS の「使い方」だけ知ってる人に読んで欲しい。

2005-07-21

CSS デザインのワークフロー |CSS|

CSS デザインをする人に、面白い GIF アニメーションを紹介。

というブログ記事の Designline for the Open Air blog template (879k Animated GIF)

覚え書きさんの説明が、ほとんど全てを言い表しているので引用。詳しくはリンクを辿って下さい。

このアニメーションでは、実際にブラウザのデフォルトスタイルしか適用されていない状態でページ上に記載されるべき内容を書き並べ、ソースオーダー(文書上における記述順序)を確定してから制作者スタイルを適用し始めている様子が確認できます。「文書構造ありき」のデザインフローを可視化すると、大雑把にはこれと同様の流れになるのではないかな?という意味で、なかなか興味深いです。

構造とデザインの分離については、言われ始めて久しい。でも、自分は本当にそれをやってきていたか? レイアウト・デザインの行程は行き当たりばったりではなかったか? 本当に自分が意図した通りの見た目になっているのか? そんな問いかけを、このアニメーション GIF はつきつけてくるような気がする。

このサイトも、実はこのアニメーションの行程方法を真似てフル・スクラッチで書き直してる。CSS でデザインする人も、したことのない人も一度は見て欲しい動画です。

via

ref

2005-06-13

サイドバーのメニューを Peek-a-boo スタイルにした |Blogger|CSS|JavaScript|

サイドバーにあるメニューを Peek-a-boo スタイルにした。 firefox や IE でこのサイトを見ていれば、サイドバーのタイトル (About とか Link とか) をクリックして、内容の非示・非表示が切り替えられる。コードは、JavaScript と CSS だけ。JavaScript 非対応なウェブ・ブラウザー ( lynx とか w3m) では、非表示の切り替えはできないけど、見る分に問題はない。 Blogger のヘルプで参考にしたコードが Peek-a-boo comments という名前で紹介されていたので、このページでもそういう風に呼ぶ事にしますね (本当は何て言うんだろ?)。

Blogger のヘルプは 2005-06-13 現在、日本語訳されていない。というわけで、Tips をおりまぜてコードの説明を書いとく。

JavaScript, CSS, and HTML

JavaScript のコードは以下の通り。これを head エレメントの中に書いておく。

<script type="text/Javascript"> 

function togglecomments (postid) { 

   var whichpost = document.getElementById(postid); 
   
   if (whichpost.className=="commentshown") { 
      whichpost.className="commenthidden"; 
   } 
   else { 
      whichpost.className="commentshown"; 
   } 
} 
</script>

CSS のコードは短い。

.commenthidden {display:none}
.commentshown {display:inline}

ようは、CSS で表示・非表示するクラスを定義して、JavaScript で適義クラスを設定してやるだけ。HTML のコードは次のようになる。

<a href="javascript:togglecomments('cXXX')">ココをクリックすると表示・非表示が切り替わる</a>

<span class="commenthidden" id="cXXX">
  表示・非表示される内容。
  ウェブページを開いた時、この内容は非表示になっている。
  最初から表示させるには class="commenthidden" を "commentshown" にする。
</span>

「表示・非表示される内容」を含む span エレメントの id cXXX はページの中で固有であれば何でもよい。ただし、 javascript:togglecomments の引数に同じ値 (ここでは cXXX) を指定しなければいけない。

Small Hack

このページで使ってる Peek-a-boo スタイル (?) は、上のコードに若干手を入れたもの。表示・非表示を切り替える文字列の前に、上向き三角 (表示時) と下向き三角 (非表示時) を出すようにした。修正版 JavaScript は次の通り。

function toggle_display (head_id,body_id) {

   var whichhead = document.getElementById(head_id);
   var whichbody = document.getElementById(body_id);

   if (whichbody.className=="body_shown") {
      whichhead.className="head_hidden";
      whichbody.className="body_hidden";
   } else {
      whichhead.className="head_shown";
      whichbody.className="body_shown";
   }
}

そして、CSS はこう。

.body_hidden { display: none;  }
.body_shown  { display: block; }
.head_hidden:before { content: "▼ "; } /* #x25bc */
.head_shown:before  { content: "▲ "; } /* #x25b2 */

サイド・バーの About は、Templete で次のように書いた。

  <h2 class="sidebar-title"><a id="habout" class="head_shown" href="javascript:toggle_display('habout','babout')">About</a></h2>
  <div class="body_shown" id="babout">
   <p><$BlogDescription$></p>
   <p>[ <a href="<$BlogSiteFeedUrl$>" title="Atom feed">Site Feed</a> ]</p>
  </div>

CSS の :before を使って、head_shown クラスの前に文字を生成させてる。もし、これを本文の中に直接書き込むようにすると、JavaScript・CSS 非対応なブラウザーで表示・非表示両方の場合の文字が見えることになってマヌケに見えちゃう。

Blogger 用の設定

サイドバーの About はデフォールトで表示。クリックして初めて非表示になる。そんなに長いものじゃないし、オプション的に非表示にできればいいか、という感じ。ただし、Previous とか Archives なんかは長くなりそうだから、ItemPage では非表示にしておきたい。そこは、 Blogger の Templete で対処。ちと繁雑だけど、次のコードを書いてる。

 <MainOrArchivePage>
  <h2 class="sidebar-title"><a id="hprevious" class="head_shown" href="javascript:toggle_display('hprevious','recently')">Previous</a></h2>
  <ul id="recently" class="body_shown">
 </MainOrArchivePage>
 <ItemPage>
  <h2 class="sidebar-title"><a id="hprevious" class="head_hidden" href="javascript:toggle_display('hprevious','recently')">Previous</a></h2>
  <ul id="recently" class="body_hidden">
 </ItemPage>
    <BloggerPreviousItems>
      <li><a href="<$BlogItemPermalinkURL$>"><$BlogPreviousItemTitle$></a></li>
    </BloggerPreviousItems>
  </ul>

ref

2005-06-10

最小幅の設定 |Blogger|CSS|

CSS 非対応 (もしくは対応が不十分) なブラウザーで読んでいる人の為に説明をすると、このページはメイン・コンテンツとサイドバーの 2 カラム構成になってる。基本は fluid width なページだけど、横幅 が 500px 以下では fixed width になる。備忘録の代わりにトリックを書いておこう。

テンプレートと CSS

このページのテンプレートは次の通り。

<body>
<div id="wrap">
  <div id="main-content">
    メイン・コンテンツ
  </div>

  <div id="sidebar">
    サイドバー
  </div>
</div>
</body>

CSS は、次のように書いてる。

body {
  color: #333;
  background: #eee;
}

#wrap { min-width: 500px; }

#main-content {
  float: left;
  width: 61.8%;
  margin: 0 1% 0 2%;
  background: #fff;
  border-style: none double;
  border-width: 18px;
  border-color: #eee;
}

#sidebar {
  float: left;
  width: 28%;
  font-size: 85%;
  line-height: 1.4;
  color: #999;
}

CSS の解説

何故に #main-content の width が 61.8% という微妙な値なのかというと、本文とそれ以外を黄金比にしたかったから。黄金比は 1:(1+sqrt(5))/2 で、パーセントにすると 61.8:38.2 になる。本文の左には 2%, 右には 1% のマージンを取った。 #sidebar の width=28% は、実は適当。

このスタイルでは、メイン・コンテンツの両脇に白いバーを出してる (※ border-style: double をサポートしているブラウザーでないと見えません)。これは、二重線 border の線と線の間がメイン・コンテンツの background の色で塗られる事と、二重線自体は body の background と同じ色を指定して見えなくする事で実現している。ただし、border-width にパーセント指定ができなかったので 18px に指定。18px の由来は、 Google Adsense の枠線の太さが 6px っぽいのを参考にして、その値を 3 倍にしたもの。

横幅がパーセント指定と px 指定の混合になってしまったので、ブラウザーがある程度小さくなると float 指定したサイドバーがメイン・コンテンツの下に回されてしまうバグが入った。これを解決するために、min-width 値を設定して、この値より小さくなった時は fixed width にするようにした。

min-width の計算

横幅は、メイン・コンテンツの幅とサイドバーの幅の足し算。ボックスの幅の計算は次のようになる。

  横幅 = margin + border + padding + width

具体的な計算は次のようになる。

  横幅 = メイン・コンテンツの幅 + サイドバーの幅
       = #main-centent(margin-left + border-left + width + border-right + margin-right)
         + #sidebar(width)
       = ( 2% + 18px + 61.8% + 18px + 1% ) + 28%
       = 92.8% + 36px

ここで、92.8%+36px が 100% より上回るとサイドバーが動いてしまう。よって

  92.8% + 36px < 100% * width
          36px < 7.2% * width
  ∴ width > 36px / 0.072 = 500px

つまり、min-width=500px というわけ。

ただし、IE6 は min-width に対応していないので、幅を 500px より小さくするとサイドバーがメイン・コンテンツの下に行きます。ゴメンなさい。

2005-06-08

CSS Zen Garden |CSS|

CSS Zen Garden は CSS を使ったサンプルの宝庫。 日本語版もあるのが嬉しい。500 以上もサンプルがあるので、全部見るのは大変だけど時間があったら是非どうぞ。

2005-06-04

CSS コードを別ファイルにした |Blogger|

Open Cage で CSS コードを別ファイルにするメリットが説かれてた。

今回の変更で CSS ファイルは自前のサーバーに設置するように変更しました。これによってポストに占めるレイアウトコードが激減するのでかなりファイルサイズが小さくなっているはず。レスポンスが凄い向上するはずです。また冗長な部分がなくなって検索ロボットが情報を取り出しやすくなるのもいいところです。

また,CSS ファイルに変更を加えると直ぐに反映されるので,試行錯誤するのも楽。これまではいちいち再構築をしなければならなかったので時間がかかってしまい面倒臭かったですが,これで気軽に手を入れることができます。ちょっと嬉しい。

なるほど、と頷くことしきり。早速、 clmemo@aka も CSS コードを別ファイルにした。ついでに、Templete も少しいじってみた。permanent link をブログのタイトルの名にも出すようにしたり、 Google AdSense を ItemPage ではバナーで表示するようにしたり。次に目指すは、自作 CSS ファイルかな〜。

2005-06-01

blg-css: CSS 用 block grep |Emacs|blgrep|CSS|

CSS記述規則「プロパティ別整理法」の提案

大きな CSS ファイルを作ると、整理ができなくなって HTML につけた id や class 名が混沌としてくる。または、どんな id・class 名をつけるべきか混乱してくるという。そこで、あきやんさんが提案するのが「プロパティ別整理法」というもの。詳しい説明は、 あきやんさんのページを見てもらうとして、とりあえず概略をば。サンプルは、 自分のページで使っている CSS ファイル。

あきやんさん曰く、大低の人はセレクター毎にプロパティーを設定している。ぼくの CSS ファイルもそう。

body {
 margin: 1em 5%;
 line-height: 1.35;
}

h1 {
 text-align: center;
 text-family: sans-serif;
 text-size: xx-large;
 margin: 0.8em -5%;
 padding: 0.5em;
 background-color: #ffff00;
}

h2 {
 text-family: sans-serif;
 text-size: xx-large;
 border-bottom: 4px dotted #666666;
 padding-bottom: 4px;
 padding-top: 20px;
}

h3 {
 text-size: x-large;
 border-bottom: 2px dotted #666666;
 padding-bottom: 4px;
 padding-top: 20px;
}
(続く)

この方式を 図書館方式と名付けてる。不満点を一言であらわすと、

とにかく無駄な時間がかかることが不満です。

メンテナンス性の低さ、見栄えと関係の無い事象への負担が無視できないほどに大きいのです。これは、良いスタイルを目指す際の重い足かせとなっています。

とのこと。ぼくは、それほど大きな CSS ファイルは作ってないので不満はないけど、CSS 処理にバグを持つ NN4 とか IE5 の対策を入れている CSS ファイルはすごい事になっているので、大変そうなのは薄々分かる。

そこで プロパティ別整理法。これはシンプルに、1 セレクターに 1 プロパティーと割り切ってしまう方法。上の例をプロパティ別整理法で書くとこうなる。

/* background-color */
h1 { background-color:#ffff00 }

/* border-bottom */
h2 { border-bottom:4px dotted #666666 }
h3 { border-bottom:2px dotted #666666 }

/* line-height */
body { line-height:1.35 }

/* margin */
body { margin:1em 5% }
h1 { margin:0.8em -5% }

/* padding */
h1 { padding:0.5em }

/* padding-bottom */
h2 { padding-bottom:4px }
h3 { padding-bottom:4px }

/* padding-top */
h2 { padding-top:20px }
h3 { padding-top:20px }

/* text-align */
h1 { text-align:center }

/* text-family */
h1 { text-family:sans-serif }
h2 { text-family:sans-serif }

/* text-size */
h1 { text-size:xx-large }
h2 { text-size:xx-large }
h3 { text-size:x-large }
(続く)

いろいろ利点はあるそうだけど、ぼくはプロパティーごとに設定が分かるのがよいなぁと思う。セレクター単位でプロパティー値を見るには、grep を使えばよい、とのこと。

blg-css.el

さて、ここからが本題。プロパティー別な情報をセレクター別な情報に grep で変換できるというなら、セレクター別な情報 (旧来の方法) をプロパティー別に直すこともできるんじゃない? というわけで、 blgrep の CSS 用フロント・エンドを作ってみた。フロント・エンド名は blg-css。提供する関数は blg-cssblg-css-line の二つ。

実行例はこんな感じ。

  • M-x blg-css RET text-size
    h1 {
     text-align: center;
     text-family: sans-serif;
     text-size: xx-large;
     margin: 0.8em -5%;
     padding: 0.5em;
     background-color: #ffff00;
    }
    
    h2 {
     text-family: sans-serif;
     text-size: xx-large;
     border-bottom: 4px dotted #666666;
     padding-bottom: 4px;
     padding-top: 20px;
    }
    
    h3 {
     text-size: x-large;
     border-bottom: 2px dotted #666666;
     padding-bottom: 4px;
     padding-top: 20px;
    }
    (続く)
      
  • M-x blg-css-line RET text-size
    h1 {
     text-size: xx-large;
    h2 {
     text-size: xx-large;
    h3 {
     text-size: x-large;
    h4 {
     text-size: x-large;
    h5{
     text-size: large;
      

blg-css-line が、プロパティ別整理法の代わりに使える。ただし、検索結果が不完全な CSS ファイル (閉じの中括弧がない) になってしまうのと、セレクターとプロパティーの間に改行が入ってしまうのが嫌らしい。 blg-css は、検索に引っかかったセレクターを丸ごと出力するので旨味はないかな。

完全なプロパティ別整理法がやりたければ、あきやんさんが作っている 蓄々CSS自動整形を使うべきだと思うけど、

尚、小規模なCSSは例外ケースとなります。

また、CSSを新たに構築する際もプロパティ別整理法で書き始めることは推奨されません。 多くのCSSは図書館方式で整理されている

ということなので、プロパティー別整理法に移行する前の中位いの CSS ファイルで blg-css は使えるじゃないかな。

blg-css のインストール

まず、 blgrep 0.2 をインストール。その後、下の blg-css.el をダウンロードして、blgrep.el をインストールした場所と同じ所に入れます。

最後に、.emacs に次の二行を入れれば、 M-x blg-css, M-x blg-css-line ができるようになります。

(autoload 'blg-css "blg-css" "CSS grep." t)
(autoload 'blg-css-line "blg-css" "CSS grep line." t)

via

2005-05-12

abbr/acronym の title 内容も表示させる |HTML|CSS|

普通、abbr/acronymtitle attribute の内容は、Firefox などのモダン・ブラウザーでポップ・アップ表示される。これを、本文にも表示させるには、次のような CSS を書く。

acronym:after { content: " (" attr(title) ")"; }
abbr:after { content: " (" attr(title) ")"; }