Willさんいんのコーダー兼インストラクター兼ワーゲン愛好家、いしわのBlogです。主にサイト構築に関する私的メモ中心です。 » Haruki "HARUSAN" Ishiwa のプライベートブログ 以前書いていた、position プロパティを使ってレイアウトすると、IE7 のズーム機能で要素同士が開いたり重なったりするという問題。具体的には、position:relative で指定した要素の中に position:absolute を使って自由なレイアウトを行うものですが、position:relative を指定した要素同士が、IE7 のズーム機能で拡大すると間隔がどんどん広がり、縮小すると重なってしまいます。 これまで、いくらググったりしても解決法が見つからず、できるだけ position プロパティは使わず flort によって複雑なレイアウトも行ってきました。 しかし、現在
IEのヘンテコなCSS解釈の原因と言われるhasLayoutプロパティ。 どうやらこのhasLayoutプロパティの値がfalse(デフォルト値)の場合に、いろいろとまずいことが起こるようです。IEだけfloatした要素周辺のmarginやpaddingがおかしかったり、相対配置/絶対配置した要素がどこかに消えてしまったりする・・・という経験はcssレイアウトの際に誰もがぶつかる問題です。 また、hasLayoutがTrueとFalseの要素が混在している場合には、IE7のズーム機能を利用した際に、隣あった要素が重なってしまったりします。 この辺はコリスさんのIEでのCSSのバグを回避するhasLayoutに分かりやすい説明があります。 このhasLayoutの問題を解決するためにzoomプロパティが利用されることがあります。(zoomプロパティはIEの独自拡張であるため、これを使うこと自
IE6からIE7が今後本格的にマーケットシェアを取って行くことを考えると、IE7の仕様やバグを考えた上でのマークアップが欠かせないとは思います。でも、僕らはまだIE7がどんなものかが分からない。そのため、とりあえず* { zoom: 1;}を指定しておくことが安全策なのかもしれません。 IE7のZoom機能で、見事にこける。 先日、うちの本体のサイトを更新し終わった際に、スタッフから「あれ、しゃらくのサイトずれてるよ」と指摘されました。更新箇所が多く、CSSも多少いじくったので、どこか消してしまったのかもしれません。そこで、自分のブラウザで確認するも、どうも問題が再現できない。そのスタッフのブラウザを見ると、こんな感じになっていました。 僕のFirefoxで見てみても問題ないし、そのスタッフが使っているIE7でも問題なし。「うーん」と悩んでみるものの、意外と答えは簡単なところにありました。
IE8における拡大縮小バグ 先日リリースされたIE8だが、多くのバグを含んでおり、まだまだWEB製作者を悩ませそうです。 (追記)Firefox3でも発生しますね。検証不足でした。 例えば、私が見つけたのは拡大縮小に関するバグ。(文字ではなくズームによる) ul{ margin:10px; width:600px; border:1px blue solid; } ul li{ list-style-type:none; margin:2px; border:1px red solid; width:194px; height:194px; float:left; display:inline; } サンプル などのようにリスト要素を利用して表状の形態を表現した際、通常は以下のように表示される。 IE8 100%で表示。 これを95%に変更すると以下のようになる。 IE8 95%で表示。
1967年式 Volkswagen Type-1 に乗る、1967年生まれのおやじのサイトです。車もサイトも仕事の合間に少しずつカスタマイズしています。 以前書いた IE7のズーム機能の問題の解決策がわかりました。 まず、position プロパティを使ってレイアウトした場合に、拡大/縮小すると要素同士の間隔が広がっていったり、縮まって重なり合ったりする問題。 これは position:relative を指定した要素同士を包括する要素(例えば body)にも position:relative を指定してやることで解決します。 そして、 body の背景に画像を配置した場合に背景画像が拡大/縮小されない問題。 これは背景画像を body 以外に指定してやればいいわけで、<body> の内側に例えば <div id="body-inner"> といった要素を追加し、この #body-inn
IE 7 のズーム機能を使用すると、position プロパティを指定している箇所の表示がおかしくなってしまうことがあります。IE 7 でズーム機能を使用すると崩れてしまうdemoを用意しました。 不具合再現用のdemo 通常時 (サンプル画像は 100% 時)には意図したとおりにレンダリングされています。 拡大時 (サンプル画像は 120% 時) は下部に意図しない余白ができてしまっています。 縮小時 (サンプル画像は80%時) には黒い枠がグレーの枠の要素に食い込んでしまっています。 この例のHTMLの構造は 黒い枠のついたdiv要素 薄グレーの背景のdiv要素(position:relative;) 濃いグレーの背景のdiv要素(position:absolute;) という入れ子の構造になっています。 この不具合の原因はおそらくpositionプロパティが適用された要素の入れ子
hasLayoutがfalseのときに起こるバグは多数ありますがここでは触れません。hasLayoutプロパティをtrueにするにはwidthやheightを指定する方法の他に、IE独自実装の「zoom」を使うことも多いです。下記のように「zoom:1」と指定すれば、他のレイアウトに害が少ないからです。 div#foo { zoom: 1; } ただし、この「zoom」はW3CのCSSバリデータでエラーになるのでそれが嫌な人は使わないほうがいいかもです。 hasLayoutプロパティがtrueのときの問題点 では本題です。hasLayoutプロパティがtrueのときに、以下のようなバグが発生します。 IEでリストマーカーが壊れる IE7のズーム機能で拡大、縮小した際に文字が重なる IEでリストマーカーが壊れる これはul,ol,liのhasLayoutがtrueだとリストマーカーが壊れます
IE7のズーム機能を使うと、ラジオボタンやチェックボックス、文中に入れた画像がおかしくなります。こんな風に。 <input type="radio" />ウェブ全体から検索 <input type="checkbox" />日本語のページを検索 <img src="/clip/cmn/img/entry-bg-01.gif" />オマケ IE7のズームで崩れるサンプル これを直す方法。 IE6までは、問題のある要素にheight:0を指定するという、holly hackと呼ばれるバグ対処方法で、数々の問題のあるバグが解決されてきました。IE7になっても、コレに変わり、min-height:0を指定すれば直るじゃん!と思ってました。 しかし、その方法でもこれは直らない・・・。他のズーム機能のあるブラウザではこんなこと起こらないのに、どうすればいいか到底見当もつかない・・・ひどすぎるIE7・・
IE7で拡大・縮小時にレイアウトが重なってしまったり、IEでフロートした要素がはみ出てしまったりとIE独自のCSSのバグがいくつかあります。 これは、IEのhasLayoutが原因のひとつとなっているので、それを回避する方法を考察します。 hasLayoutとは IEでのCSSのバグを回避するhasLayoutの値 CSSのバグに効果のあるhasLayoutの指定方法 hasLayoutの参考ページ hasLayoutとは hasLayoutとは、オブジェクトがレイアウトを持っているかどうかを示すものです。 hasLayoutの値はread-onlyのため読み込みのみ可能で、falseとtrueがあります。 hasLayoutの値(read-only) false デフォルト値。 オブジェクトがレイアウトを持っていない。 true オブジェクトがレイアウトを持っている。 IEでのCSSのバ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く