いつも現場ならではの生きた意見を有難うございます。
勉強中の管理人としては、とてもよい刺激になります。
エオカさんの例に出して頂いている内容については、
何かハックを使わない良い方法がありそうな気がするので少し宿題にさせて下さい。
「clearfix」ハックについて、自分なりにどういうCSSの指示なのか整理してみました。
間違い等あれば教えて下さい
【Firefox, Opera, Safari 対応】--擬似要素:after がIEに対応していない為、IEを除く
.clearfix:after {
content: "."; 擬似要素に"."を追加。要素の後に"."が追加される
display: block; 上記"."の表示形式をブロック要素に指定する
height: 0; 上記"."の高さが算出されないよう0に設定
clear: both; フロートを解除して回りこみを防ぐ
visibility: hidden; 不可視状態に設定
}
【MacIE 対応 + WinIE7.0対応】
.clearfix {
display: inline-table; 表示形式をinline-tableの指定で、MacIEでも外側のボックスの高さを内容にあわせて拡張可に
min-height: 1%; 要素に高さを設定するとWinIEはフロートした要素に合わせて伸縮(IE7.0対応)
}
【WinIE5.0-6.0 対応】--バックスラッシュハックと、スターハックを用いてWinIE5.0~6.0のみ有効
/* Hides from IE-mac \*/ バックスラッシュハック(MacIE未対応)でMacIE除く
* html .clearfix {height: 1%;} スターハック(WinIE-6.0迄対応)。要素に高さを設定しボックスの高さを拡張する(IE独自のバグ)
.clearfix {display: block;} inline-tableのままも気持ち悪いので、MacIE以外のブラウザで表示形式をブロック要素に修正
/* End hide from IE-mac */
但し、このハックには問題点がある事が調べで分かりました。
【参考サイト】
http://www.fsiki.com/archive/css-doc/float.html(※大変詳しいです、お勧め)
どのような問題点かと言うと、上記サイトより…
display: inline-tableをCSSに記述するとFirefoxのJavaScriptコンソールが以下のようなエラーを吐き出します。
エラー: 'display' プロパティの値をパース中にエラーが発生しました。 このスタイル宣言は無視されました。
無視されているのなら問題ないのですが、非常に気持ち悪いです。
またJavaScriptでobject.style.displayの値を切り替えたりするときに、
ブラウザ振り分けなどの面倒な事態が発生することが予想されます。
また、確かではありませんがMacIEにおいてdisplay: inline-tableが
効いているボックスの子要素を絶対配置(position: absolute)で配置しようとしても、
意図とは反した場所に表示されてしまう現象を何度か経験したことがあります。
(手元にMacが無いのでどういった場合に起きるか確認できていません)
との事でして、その問題点については同サイトで最終提案してくれていますので省きます。
.clearfix {
color: #000000;
background-color: #B4D543;
border: 2px solid #F1288B;
padding-top: 20px;
padding-bottom: 20px;
overflow: hidden;
}
.clearfix:after {
content: "";
display: block;
clear: both;
height: 1px;
overflow: hidden;
}
/* Hides from IE-mac \*/
* html #.clearfix {
height: 1em;
overflow: visible;
}
/* End hide from IE-mac */
何処まで拘るかにもよりますが、ここまでして(ブラウザバージョンアップの都度検証して)
このハックを使わなければならないのか?という気になってきました(T T)
面倒臭がりの私は、どうも性格柄ハック非推奨です。なんか、非効率な気がしてなりません。
ただ、不明な点があれば調査をするのは技術者の仕事だと思っているし、
それが将来的に応用の効く技術になるのなら、時間を惜しむ必要は無いと考えています。
能力として評価対象にはならないと思いますので、自己満足と研究の為と割り切って
業務の状況を考えながら時間を割きたいですね。
補足ながら、「inline-block」と「inline-table」について説明を入れておきます。
ただ、今回の「inline-table」はMacIEがボックスを拡張する為だけに使用しているみたいです。
displayプロパティ は、要素が生成するボックスをどのように表示させるか、その表示形式を指定します。
要素はそれぞれブロック要素とインライン要素の 2種類に大別されますが、
displayプロパティで各要素に任意で別の種類を割り当てることができます。
inline-block
「幅・高さを指定できるインライン要素にする(WinIE6.0・7.0, Opera 対応)」
"inline-block" を指定した要素は、インライン要素でありながらブロック要素のように
幅(width)や高さ(height)の指定が可能になります。
インライン要素で幅・高さを指定できるということで、機能的には img要素と同じです。
inline-table
「インラインの表要素にする(table要素)(Firefox, Opera, Safari 対応)」
"table" 関連のキーワードは、HTML文書で使うような場面はありません。
たとえば、XML で記述された文書を XSLT で HTML として表示させる場合の
表組としての整形を行うために使用されることがあります。
HTML文書であれば、わざわざ CSS で面倒な事をしなくとも通常通り HTML の
表関連要素を使って表を作成することができます。
【引用サイト】
http://www.seo-equation.com/html/css/display色々勉強になったハックでした。
個人で勉強していると、どうしてもブラウザにより異表示は適当に流してしまいます。
また、将来的に発生するであろう修正も、個人では対応可能な為に(自分がする事だから文句も出ないしね)
「仕事」として適切な記述は何だろうかと今後の課題になりました。