2011-06-24 4 views
1

私は未知の幅のブロックレベル要素を持っています。この要素はページ上で水平に中央に配置する必要があり、positionrelativeである必要があり、絶対配置された子が正しい場所に表示されます。あなたはsee it in action hereです。Firefoxで未知の幅を持つ相対的に配置された要素を中心にします

私が知る限り、未知の幅の要素を中心にする最も良い方法は、displaytableに設定することです。意味的には、これは間違っていると思われます。なぜなら、私の要素には実際の表とは何の共通点もないからです。絶対位置の子供が間違った場所に表示させ、Firefox doesn't apply position to tables、さらに悪い:

enter image description here

は、このことの回避策があります

  • は、HTMLに余分な要素を追加しないでください
  • ではJavaScript

を持つ要素の幅を計算し、設定していない私は、純粋なCSSの修正を希望、と私は思いアイデアが不足している...

+0

意味的には、表示プロパティを 'table'に設定しても問題ありません。あなたは要素そのものを変えず、その外観だけを変えています。しかし、私はFirefoxについてのあなたの意見を取る、そしてそれは私を困惑させている...今のところ。 divの幅はどのように決定されますか? – Kalessin

+0

@Kalessin:divの幅は、 'display:table'を使うとき(通常のhtmlテーブルと同じように)、子の内容の幅に自動的に設定されます。しかし、 'display:table'要素は一般的に' display:table-row'と 'display:table-cell'という子を持っています。 –

+0

はい、動作させるには余分なHTML要素が必要でした。 – Kalessin

答えて

5

要素(#box)にdisplay: inline-block;を追加するだけで十分です。これは、それがインライン要素になり、それでも "boxy"プロパティを保持します。その幅は自動的に子の幅を占めます。

次に、その親にtext-align: center;を設定することで、配置を設定できます。

IE7はこの値をサポートしていません(自然なインライン要素のみ)。table(全くサポートされていません)と同じです。 You can use a hack though to make inline-block work in IE7.

jsFiddle Demo

+0

これは素晴らしい解決策ですが、ここでのキャッチとは、ボックスの高さを定義することです。 –

+0

@Aziz高さ*は定義されていますが、これは可変な幅です。 – Kalessin

+0

@Aziz彼の例では、彼は固定された高さを使用しました。 – kapa

1

最悪の場合は、インライン要素のようなブロック要素を中心とするFirefoxの固有の方法であるtext-align: -moz-center;を試みることができます。

関連する問題