2013-04-25 22 views
6

Ich benutze 2 divs, ein Elternteil und ein Kind. Der Elternteil hat eine Breite von 100% und sein Inhalt ist Text-ausgerichtet an die Mitte.Make zentriert DIV innerhalb breiter DIV mit Inhalt Breite erweitern

Das untergeordnete div sollte eine Breite von null (oder etwas in der Nähe davon) haben und seine Breite automatisch mit seinem Inhalt erweitern, während es immer noch im übergeordneten div zentriert ist. Beispiel:

+------------ PARENT DIV ------------+ 
|         | 
|   ..some content..   | 
|         | 
|   +--CHILD DIV--+   | 
|   |Inside child |   | 
|   +-------------+   | 
|         | 
+------------------------------------+ 

+------------ PARENT DIV ------------+ 
|         | 
|   ..some content..   | 
|         | 
|  +------ CHILD DIV ------+  | 
|  |Inside child with more |  | 
|  +-----------------------+  | 
|         | 
+------------------------------------+ 

Wenn ich eine feste Breite für das Kind div setzen, ich kann es richtig zentriert:

.parent { 
    width: 100%; 
} 
.child { 
    width: 100px; 
    margin-left: auto; 
    margin-right: auto; 
} 

Aber das ist nicht das, was ich brauche, ich brauche das Kind div seine Breite zu erweitern nach seinem Inhalt. Also habe ich versucht, mit float und nowrap:

.parent { 
    width: 100%; 
} 
.child { 
    float: left; 
    white-space: nowrap; 
    margin-left: auto; 
    margin-right: auto; 
} 

, die für das Kind arbeitet selbst, aber dann ist es nicht mehr als Inhalt des Stammes zentriert.

Ich kann es mit Javascript lösen, aber ich bevorzuge es wirklich nicht.

Ich habe mich nach ähnlichen Fragen in SO umgeschaut, aber ich habe keine gefunden, die diese Situation genau beantworten.

Kann mir bitte jemand ein Licht geben?

Vielen Dank im Voraus für Kommentare.

Francisco

Antwort

3

können Sie verwenden display: inline-block; (nicht in < IE7 unterstützt), aber Sie müssen alle anderen Inhalte in einem anderen Block-Level-Element umschließen (wie ein <p> oder einem anderen <div>)

.parent { 
    width: 100%; 
    text-align: center; 
     border: 1px solid #000; 
} 
.child { 
    display: inline-block; 
     border: 1px solid #f00; 
} 

http://jsfiddle.net/4kpsK/

(Klicken Sie auf die rot umrandet div um mehr Inhalt hinzuzufügen und die Lösung in der Wirkung zu sehen.)

+0

Vielen Dank!:-) Ich glaube nicht, dass ich mir zu viele Gedanken über Leute machen sollte, die IE6 oder niedriger benutzen. Ich bin mir sicher, dass sie bereits mindestens 50% des aktuellen Webs verzerrt sehen. Wie auch immer, ich nehme an, sie werden sehen, wie das Kind auf 100% erweitert wird, was ich nicht will, aber es macht nichts anderes kaputt. Vielen Dank! –

0

Sie haben Ihr Kind machen inline:

.parent { 
    width: 100%; 
    text-align: center; 
} 
.child { 
    display: inline; 
} 

See Fiddle hier: http://jsfiddle.net/4wXTd/1/

+0

Inline-Elemente unterstützen nicht den Rand und die Breite. – Kyle

+0

Sorry, das Ding hier ist "Text-Align" -Mitte in der Eltern. Ich habe die Ränder und Breite entfernt – Brewal

+0

Danke, aber das funktioniert nicht. Das untergeordnete div verfügt über andere für ein blockelement geeignete style-Attribute. Dadurch verhält es sich genau so, als würde ich einfach ein span-Element anstelle eines div verwenden. Die Antwort von Kyle Sevenoaks scheint besser zu funktionieren (Inline-Block). –

0

Ich denke, dass statt width Sie max-width und display:inline verwenden können. Aber das hat Nachteile: max-width wird nicht richtig interpretiert in IE (< 9 zumindest, denke ich), aber in Webkit/Moz/Opera Browsern sollten Sie sicher sein.

0
.child{display:block; margin: auto;} 

Sollte funktionieren.

+0

Das macht das Kind div auto-wided'ed zu 100%. Außerdem ist die Anzeige "Block" die Standardanzeige für ein Div. –

+0

Nun, ich habe diesen Code mehrmals für divs, Bilder und Texte verwendet, und es hat immer das Element zentriert und die Breite des Elements ist genauso viel wie es für seinen Inhalt benötigt wird. – ITFarmer

+0

Vielleicht verwenden Sie nicht streng validierte HTML? Schau es dir selbst an. :-) http://jsfiddle.net/4wXTd/3/ –