エントリー本文
CSS の after 擬似要素で回り込みを解除する
float プロパティで設定したテキスト等の回り込みを、CSS の after 擬似要素を用いて解除する方法を紹介します(通常の解除方法も併せて掲載しています)。
1.「回り込み」とは
例えば、画像の左(または右)にテキストを表示することを「(テキストの)回り込み」と呼びます。
マークアップ
<p>
<img src="hogehoge.jpg" alt="image" style="float:left" />
回り込みテキスト?(略)?回り込みテキスト
</p>
表示
回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト
(X)HTMLでこのような表示を行う場合、先に出現する要素(ここでは img 要素)に対して float プロパティを与えます。float プロパティは、指定された要素を左または右に寄せて配置する際に使用します。 後に続く内容は、前の要素の右(または左)側に回り込みます。
ちなみに「float プロパティ = 回り込み」という解釈は正しくないようです。下記の記事に分かりやすい解説があります。
2.「回り込み解除」とは
画像の左(または右)に回り込んで表示されているテキスト(あるいは要素)を、回り込まない状態に戻すことをこのように呼びます。
画像の回り込みが有効な状態が持続すると、流し込むテキスト量によっては後続のテキスト等が一緒に回り込んでしまいます。リキッドレイアウトでブラウザの横幅をひろげた場合にありがちです。
回り込みを解除していないマークアップ
<p>
<img src="hogehoge.jpg" alt="image" style="float:left" />
回り込みテキスト?(略)?回り込みテキスト
</p>
<p>
回り込まないテキスト?(略)?回り込まないテキスト
</p>
表示
回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト
このような予期しない表示を避けるため、回り込みを解除する必要があります。
3.回り込み解除方法
3.1 後続の要素に clear プロパティを与える
回り込みを解除するために、回り込みさせた要素の後続の要素に clear プロパティを与える方法があります。
マークアップ
<p>
<img src="hogehoge.jpg" alt="image" style="float:left" />
回り込みテキスト?(略)?回り込みテキスト
</p>
<p style="clear: both">
回り込まないテキスト?(略)?回り込まないテキスト
</p>
表示
回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト
3.2 親ブロック要素の after 擬似要素に clear プロパティを与える
具体的には、float プロパティの要素を含む親ブロック要素の after 擬似要素に対し、clear プロパティを与えます。
3.1項の方法では後続の要素で回り込み解除を設定しますが、回り込みさせた要素を含むブロック要素自身で回り込みを解除させる方が感覚的に本来のように感じます。
このような場合、after 擬似要素を用いれば可能らしいのですが、残念ながら IE6(多分IE7も)では after 擬似要素がサポートされていません。
が、調べているうちに、
「zoom プロパティを併用することで IE も対応可能」
といった内容の記事をみつけましたので、ここではその方法をご紹介致します。*1
参考記事は下記です。ありがとうございました。
全体の構成は下記のようになり、float プロパティを与えた親のブロック要素(ここでは p 要素)に対し、回り込み解除用の class 属性を記述します。class 属性名は任意の名称で構いません。
CSS
.fbox {
zoom: 100%;
}
.fbox:after {
content: "";
clear: both;
height: 0;
display: block;
visibility: hidden;
}
Windows XP + IE6 / IE7/ Firefox2 / Opera 9 では、height プロパティ、visibility プロパティは指定しなくても回り込み自体は解除されるようです(他の振る舞いについての差異は未確認)。
マークアップ
<p class="fbox">
<img src="hogehoge.jpg" alt="image" style="float:left" />
回り込みテキスト?(略)?回り込みテキスト
</p>
<p>
回り込まないテキスト?(略)?回り込まないテキスト
</p>
表示
回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込みテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト回り込まないテキスト
4.Movable Type でエントリーを書く場合
Movable Type でエントリーを記述する際、エントリー編集画面下の「改行設定」を「改行を変換する」にしている場合でも、class 属性つきの p 要素を手動で付与した場合は、p 要素は重複して自動付与されないので、3.2項の方法がそのまま利用できます。
5.関連リンク
- Cascading Style Sheets, level 2 CSS2 Specification:9.5.1 浮動体の位置決め ('float'特性)
- 同:9.5.2 浮動体に隣接する流れの制御 ('clear'特性)
- 同:5.12.3 :before 疑似要素及び :after 擬似要素
とまとめてみましたが、私自身回り込み解除を利用していなかったので、これから少しずつ過去のエントリーを修正していきたいと思います(反省)。
*1:zoom プロパティは IE(5.5 以上)の独自jプロパティですので、利用した場合、CSS valid にならなくなります。
- ブログを読みやすくするコツ
- IE7 の CSS ハック
- テンプレートカスタマイズ支援ツール Column Resizer
- リストマークの画像のずれを修正する
- 234万5678アクセス特別企画
- リンク画像の枠線を消す
- CSSで画像に影をつける(ドロップシャドウ)
- Internet Explorer 6 と Internet Explorer 7 を共存させる
- CSS の画像置換で画像にリンクを設定する
- Musical Baton
- IE7 で pre 要素が適正に表示されない不具合を修正
- CSS ネガティブマージンで重なった要素のリンクをクリックできるようにする
- CSS でヘッダーに画像を表示する for Movable Type 4
- CSSでブログに影をつける(ドロップシャドウ:Movable Type 4.x 配布テンプレート版)
- Highslide JS でサムネイル画像を拡大表示する(設定方法の変更)
- CSS でブログ本文の画像だけをセンタリングする
- CSS の画像置換で画像にリンクを設定する
- XREA のバナー広告を固定レイアウトのヘッダに表示する
- グローバルナビゲーション(その1:基本スタイル)
- 「追記文章の折りたたみ 2.0」でIE7の不具合を解消する
- サブカテゴリーリストのツリー画像で親カテゴリーのみ異なる画像を表示する
- 公開テンプレートにフッタを追加する(2カラム版)
- テンプレートカスタマイズ支援ツール Column Resizer
- サイドバーのタイトル背景をカラム幅にあわせて表示する
- 公開テンプレートのサイドバーのカラム幅を変更する
- CSSでブログに影をつける - ドロップシャドウ画像ファイルの作り方
- CSSでブログに影をつける(ドロップシャドウ)
- IE7 の CSS ハック
- CSSでブロックレベル要素をセンタリングする
- 3カラムレイアウトをナビゲーションバー部分に適用する
いつもお世話になっています。少し動きの変わったサイドメニューの折りたたみを見つけましたこちら
また、お手すきの時にでも導入方法をエントリーお願いします。WordPressでも利用できれば幸いです。宜しくお願いします。
>panserさん
こんにちは。
ご要望事項ということで承りました。なおエントリーにつきましては確約できませんので、その点予めご了承ください。
それではよろしくお願い致します。
こんばんわ。
[mellow_blog]のmellowといいます。
blogpeopleリンク貼らせていただきました。
手探り状態でブログ人のCSSカスタマイズとかやってるんですが、
いろいろ参考にさせていただきたいと思います。
ヨロシクお願いします。
>mellowさん
こんばんは。
BlogPeople登録ありがとうございました。
こちらこそどうぞよろしくお願い致します。
wordpressユーザーですが、最新版にバージョン・アップした頃からテキストが画像右側に勝手に回り込んでしまう現象に頭を痛めてしました。
こちらで紹介されているプロパティを応用したら、すぐに解決しました。
本当にありがとうございました(^^)
私はMTは使ったことがないのですが、WPでも応用できる小技がいろいろありますね。
時々、参考にさせて頂いているので、これからも頑張ってください!
>marieさん
こんにちは。
ご連絡ありがとうございました。
お役にたてたようで良かったです。
ではでは!
