2012-09-20 6 views
8

Ich versuche auf einer Zeile angezeigt werden:H1 auf der linken Seite „Tasten“ auf dem rechten, vertikal ausgerichtet

  • ein H1 Element links von dem Aufnahmefeld ausgerichtet
  • mehrere „Buttons "(A Elemente hier) ausgerichtet ist rechts von dem Aufnahmekasten
  • alle auf der gleichen Grundlinie sein

Ist es möglich, dies mit einem minimalen Auszeichnungs zu tun (dh keine Hüllelemente) und ohne präzise einzustellen Höhen, Linie-hei ghts, margin-Tops etc.

<div id="block1"> 
    <h1>What a great title</h1> 
    <a href="javascript:void(0)">This link can kill you</a> 
    <a href="javascript:void(0)">Click if you dare</a> 
</div> 

Die Geige hier zeigt was ich fühle sind zwei unvereinbare Richtungen (Inline-Blöcke und Sie können nicht nach rechts gegen Schwimmer rechts ausrichten und Sie können nicht vertikal ausrichten): http://jsfiddle.net/GlauberRocha/bUsvX/

Irgendeine Idee? ..

+0

Dieser Link kann Ihnen helfen. http://stackoverflow.com/questions/1702669/what-is-the-difference-between-floatleft-vs-displayinline-while-every-element –

+0

@venkateshwar: Danke, aber ich verstehe den Unterschied zwischen 'display: block' und 'display: inline' und was es bedeutet. Ihr Link ist interessant, um weiter zu verstehen, aber hier versuche ich herauszufinden, wie ich dieses Problem am besten lösen kann. –

+0

Ihre JS Fiddle-Verbindung ist unterbrochen. –

Antwort

3

Sie haben ein mögliches Problem mit diesem Layout - Was ist, wenn Ihre H1 zu lang ist und auch die Tasten? Sie werden ineinander rennen. Aus diesem Grund wird kein einfaches CSS funktionieren - CSS mag das nicht - es müsste eine Art Lösung für das obige Problem bedeuten.

Aber was wollen Sie kann einfach erreicht werden, die absolute Positionierung mit:

<div style="position: relative;"> 
    <h1 style="position: absolute; left: 0; top: 0">What a great title</h1> 
    <div style="position: absolute; right: 0; top: 0; text-align: right"> 
     <a href="javascript: void(0)">This link can kill you</a> 
     <a href="javascript: void(0)">Click if you dare</a> 
    </div> 
</div> 

Wenn Sie wirklich Angst haben, dass der Header und der Anker Behälter könnte laufen in einander auf generierten Inhalten abhängig, können Sie CSS max-width und overflow Eigenschaften, um ihre enthaltenen Felder auf einige sinnvolle Werte zu beschränken. Der überlaufende Inhalt wird ausgeblendet, aber das Layout wird zumindest visuell nicht unterbrochen. Ich gehe davon aus der folgenden Änderung des obigen Codes (verzeihen Sie das Duplikat) würde den Zweck dienen:

<div style="position: relative;"> 
    <h1 style="position: absolute; left: 0; top: 0; max-width: 50%; overflow: hidden">What a great title</h1> 
    <div style="position: absolute; right: 0; top: 0; text-align: right; max-width: 50%; overflow: hidden"> 
     <a href="javascript: void(0)">This link can kill you</a> 
     <a href="javascript: void(0)">Click if you dare</a> 
    </div> 
</div> 

Zur Abrundung Sie nicht erreichen dies eine einfache CSS-Eigenschaft Kombination zu verwenden, da mit CSS (und HTML) Inhalt fließt von links nach rechts und von oben nach unten, oder es wird absolut- oder festpositioniert, wodurch der Fluss unterbrochen wird. Wie auch immer, es möchte nicht auf der gleichen Linie bleiben, und Sie als Layouter werden mit auflösenden Zweideutigkeiten konfrontiert, die ein solches Layout mit sich bringen würde, wie zum Beispiel, wenn die zwei Züge aus jeder Richtung frontal aufeinanderprallen:

)
+0

Du hast recht das mögliche Problem aufzuzeigen, wenn der Titel oder die Buttons zu lang werden (obwohl mich das hier nicht stört). Ihre Lösung sieht ganz richtig aus - trotz des zusätzlichen Markups! –

-1

hatte ich das gleiche Problem display:inline zum h1 hinzufügen, dann für Schaltflächen: float:right; display:inline;

Beispiel (unter Verwendung von Twitter Bootstrap):

<h2 style="display:inline">Users</h2> 

<a href="users.xls"><i class="icon-download-alt"></i>XLS</a> 

<form style="display:inline; float:right;"> 
    <input type="text" class="input-medium search-query" name="search"> 
    <button class="btn" type="submit">Search</button> 
</form> 
+0

Ja, ich habe an diese Lösung gedacht, aber wenn Sie 'float: right' hinzufügen, wird die display -Eigenschaft tatsächlich' block' (sagt Firebug). –

+0

Rechts. Float wird normalerweise nicht auf Inline-Elemente angewendet. Vielleicht verhalten sich manche Browser wie gewohnt und das Ergebnis ist genau das, was Sie versucht haben zu erreichen ... aber es ist falsch ... – SvenFinke

+0

Ich habe das Beispiel hinzugefügt, das ich gerade von der funktionierenden Webseite kopiert habe. Hoffe, es wird helfen. Wenn Sie die Anzeige explizit im Stil hinzufügen, sollte es funktionieren, denke ich. – Mat

0

Es ist schwer, ohne Hüllelemente oder feste Werte ...

Hinzufügen einer sowohl feste line-height der Überschrift zu erreichen und die Links würde Ihr Problem ziemlich schnell lösen.

  • Richten Sie Ihre Links mit 'display: block; schweben: rechts 'nach rechts.
  • Setzen Sie jetzt "line-height: 40px;" sowohl auf die Position und die Links

funktionieren sollte, aber nur, wenn die Größe der Überschrift nicht ändert ....

+0

Nun, ich möchte wegen der Hintergrundfarbe nicht 'line-height' für die Links setzen. Das würde sie höher aussehen lassen, als ich wirklich möchte. –

+0

Ah. in Ordnung. Dann wird meine Lösung nicht funktionieren: D – SvenFinke

8

Ich tat dies auf meiner Seite ein ganz vor: ein h2 auf die links, und ein Knopf auf der rechten Seite. Bildschirmfoto: cl.ly/image/3K3i412F0M2t

Code:

<div id="side_bar" class="clearfix"> 
    <h2 style="float: left;">Charity Map</h2> 
    <button class="btn btn-primary" style="float: right; position: relative; top: 10px; right: 10px;">Submit</button> 
</div> 
0

Ein möglicher Ansatz dazu, je nach Ihrem genauen Bedarf, ist ein Tabellenlayout zu verwenden:

#block3 { 
    display: table; 
    width: 100%; 
    box-sizing: border-box; 
} 

#block3 > * { 
    display: table-cell; 
} 

#block3 > *:last-child { 
    text-align: right; 
} 

JSFiddle: http://jsfiddle.net/bUsvX/39/

Wenn Sie möchten, dass die Schaltflächen genau ausgerichtet sind, muss diese Lösung ein anderes Element enthalten:

JSFiddle: http://jsfiddle.net/bUsvX/40/

Verwandte Themen