2011-09-29 17 views
45

私は最初に未知の幅の要素、具体的にはユーザーによって提供されたMathJaxの式を持っています。要素の幅がその内容に適合し、定義された幅を持つように、要素をインラインブロックとして設定しました。しかしながら、これは従来のセンタリングの方法を妨げる。インラインブロック要素を中央に配置することは可能ですか?

.equationElement 
{ 
    display: inline-block; 
    margin-left: auto; 
    margin-right: auto; 
} 

、溶液をすることはできません:それは次のように動作しない、ある

.equationElement 
{ 
    display: block; 
    width: 100px; 
    margin-left: auto; 
    margin-right: auto; 
} 

私は、ユーザーが式をクリックすると幅が実際に事前に可能とすべきか見当がつかないので、私は方程式を強調表示する必要があるので、幅を0に設定することはできません。誰もこの方程式を中心にする解決策を持っていますか?

+0

を、登録がbrokようですそのページでChromeを使用してくださいJavaScriptの有無にかかわらず、[登録]ボタンをクリックしても何も起こりません。 – phihag

+0

魅力的!私はChromeを使用していて、うまく動作します。どのアカウントの種類を使用していますか? Google、Facebook、Twitter? –

+1

myopenid。私は100%ですが、JavaScriptがオフになっているとGoogle Chromeで動作しません。ボタンはフォームでもなく、とにかくサブミットボタンでもありません。 – phihag

答えて

92

単に容器にtext-align: center;を設定してください。

Here's a demo

+0

これはいいアイデアです。 'display:block'を設定しても動作しますが、要素がコンテナの幅を占めるか、手動で幅を設定する必要がありますが、幅は何か分かりません。要素が 'inline-block'として設定されていれば動作しません。それがインラインブロックである必要がある理由は、その幅がその内容に対して動的であるためである。しかし、素晴らしいアイデアをありがとう。 'inline-block'で完璧に動作するように変更することができれば。 –

+1

@Vivek Viswanathanなぜ "要素がインラインブロックとして設定されていても機能しない"ということを詳しく説明できますか?デモページに[link](http://phihag.de/2011/so/inline-block-center.html)を追加しました。 – phihag

+1

親要素に 'text-align:center'が設定されているので動作しているようです。しかし、 'inline-block'要素は、中央に置くことができない兄弟を持っているので、私は自分のコードでそれを行うことはできません。これに助けてくれてありがとう。 –

19

これを行うための別の方法(また、ブロック要素のために働く):

.center-horizontal { 
    position: absolute; 
    left: 50%; 
    transform: translateX(-50%); 
} 

説明: 左:50%が親を含むの中心からを開始する要素を配置しますので、あなたは、したいです位置の親を含むの位置を設定してください :移動X(-50%)

注1:その幅の変換の半分で背中それを引く相対。親が絶対的に配置されている場合は、その内部に0パディングとマージンのdivを100%の幅と高さを入れて、それを位置を与える:相対

注2:また

top:50%; 
transform: translateY(-50%); 
+0

これは素晴らしいです! – metahamza

+4

'absolute'の位置付けは不要で、' margin:50%; 'を使うことができます。 – Kevin

+1

絶対位置は必要ありませんが、位置が 'static'(デフォルトの要素の位置付け)の場合は左右が機能しません。 'absolute'が特定の必要性でない場合、' relative'を使うべきです。 –

2

少しと中心垂直に応じて変更できます後半、しかしIVEKの回答に似て、あなたはそう、というよりも、leftmargin-leftを使用してposition宣言の使用を避けることができます:ところで

margin-left: 50%; transform: translateX(-50%);

関連する問題