Richten Sie Blockelemente in HTML rechtsbündig aus

Lesezeit: 6 Minuten

Benutzer-Avatar
Tomalak

Ich möchte Blockelemente in einem schwebenden Container rechtsbündig ausrichten.

Nehmen Sie das folgende Markup an.

<div style="float: left;">
  <img style="display: block;" src="https://stackoverflow.com/questions/17614801/...">
  <img style="display: block;" src="https://stackoverflow.com/questions/17614801/...">
</div>
   current                 wanted
+-----------+          +-----------+
|+-------+  |          |  +-------+|
||       |  |          |  |       ||
||       |  |          |  |       ||
|+-------+  |   --->   |  +-------+|
|+----+     |          |     +----+|
||    |     |          |     |    ||
|+----+     |          |     +----+|
+-----------+          +-----------+

Was ich versucht habe:

  • div { text-align: right; } – funktioniert in IE8, schlägt in Firefox fehl (natürlich sind die Bilder Blöcke und sollten nicht von betroffen sein text-align)
  • img { margin: 0 0 0 auto; } – funktioniert in Firefox, schlägt in IE8 fehl
  • Die Bilder nach rechts schweben lassen – funktioniert nicht, da ich die Bilder niemals in derselben Zeile haben möchte. Außerdem drücken schwebende Bilder den folgenden Inhalt nicht mehr nach unten.

Was kann ich noch versuchen? Ich bevorzuge eine reine CSS-Lösung, wenn das überhaupt möglich ist.


AKTUALISIEREN

Hier ist eine Geige, die das vollständige Markup erklärt: http://jsfiddle.net/Tomalak/yCTHX/3/

Einstellung float: right; funktioniert für alle echten Browser, für IE8 erweitert es die Bildbox in der Zeile zuerst über die gesamte Breite und schiebt die Box mit dem Text nach unten.

  • setze die div text-align: right;?

    – Frau Niemand

    12. Juli 2013 um 12:23 Uhr


  • @Ms.Nobody Oh, komm schon.

    – Tomalak

    12. Juli 2013 um 12:24 Uhr

  • Ich denke, die Antwort kann nicht so einfach sein, wenn die Person, die fragt, 123.000 Wiederholungen hat: D

    – Frau Niemand

    12. Juli 2013 um 12:25 Uhr

  • @Ms.Nobody Es ist nicht die Anzahl der Wiederholungen. Es ist, dass ich gesagt habe, dass ich es bereits versucht habe text-align: right;. Es ist wirklich nicht so viel Text in meiner Frage.

    – Tomalak

    12. Juli 2013 um 12:33 Uhr

  • Ich verstehe nicht. Sie verwenden text-align für das falsche Element. Es sollte auf dem Container und nicht auf den untergeordneten Elementen festgelegt werden.

    – Schmerz

    12. Juli 2013 um 12:52 Uhr

div > img { float:right; clear:right; }

  • Lesen Sie die Frage des OP: „Die Bilder nach rechts schweben lassen – funktioniert nicht, da ich die Bilder nie in derselben Zeile haben möchte. Außerdem drücken schwebende Bilder den folgenden Inhalt nicht mehr nach unten.“

    – Patsy Issa

    12. Juli 2013 um 12:32 Uhr

  • Ja, das funktioniert für alle modernen Browser, aber leider nicht im IE. Siehe mein Fragen-Update. +1 trotzdem, denn das ist eine saubere Lösung.

    – Tomalak

    12. Juli 2013 um 13:09 Uhr

  • @Tomalak nein, es funktioniert nicht im IE, nicht in diesem Layout. Gleiches gilt für die :nth-child Selektoren. Sie können versuchen, zu setzen direction:rtl an (odd) .box Zeilen, aber persönlich würde ich an dieser Stelle zu Javascript gehen, weil es viel zeitsparender ist.

    – Silviu-Marian

    12. Juli 2013 um 14:04 Uhr

  • Mit ie9.js Eine überraschende Menge an CSS funktioniert sogar in alten IEs. Das ist, was ich benutze, um zu bekommen :nth-child() sich zu verhalten, aber es könnte an anderer Stelle nachteilige Auswirkungen haben.

    – Tomalak

    12. Juli 2013 um 14:14 Uhr


  • @Tomalak wir sind ein bisschen von der ursprünglichen Frage abgewichen.

    – Silviu-Marian

    12. Juli 2013 um 19:53 Uhr

Der richtige Weg, ein Element mit CSS auszurichten, besteht darin, text-align für den Container und margin für die untergeordneten Elemente festzulegen.
Ihre Versuche sind falsch, da Sie den Rand und die Textausrichtung für das img-Tag festlegen. Ihr CSS sollte wie folgt aussehen:

div {
float:right;
text-align: right;
}
img {
margin: 0 0 0 auto;
}  

Gerade getestet auf ie8, ff und chrome.
http://jsfiddle.net/notme/wfwjf/2/

  • Wenn Sie die Bilder nach rechts schweben lassen, wird der Container breiter <div> über die gesamte Seite im IE. Es gibt zwei schwebende Container nebeneinander (einer mit den Bildern, einer mit Text). Sie sollen ein und dieselbe Zeile sein, in IE die float verschiebt den Textcontainer in die nächste Zeile. :-/

    – Tomalak

    12. Juli 2013 um 12:51 Uhr

  • Bezüglich der text-align, du liegst absolut richtig. Das habe ich versucht, der Fragetext ist in dieser Hinsicht falsch. Korrigieren.

    – Tomalak

    12. Juli 2013 um 12:53 Uhr

  • Warum lassen Sie beide Container schweben? du solltest nur den ersten schweben lassen, oder?

    – Schmerz

    12. Juli 2013 um 12:55 Uhr

  • Dies ist eine gültige Frage, ich werde versuchen, nur einen (dh den Bild-) Container zu schweben.

    – Tomalak

    12. Juli 2013 um 13:19 Uhr

  • Nein, das funktioniert nicht, da es den Textblock mit fester Breite neben den Bildern betrifft (siehe jsfiddle.net/Tomalak/yCTHX/6 im Vergleich zu jsfiddle.net/Tomalak/yCTHX/4).

    – Tomalak

    12. Juli 2013 um 13:33 Uhr

Verwenden Sie den Clearfix-Hack. Dies hilft Ihnen, das untere Bild nicht neben dem oberen Bild zu schweben. Höhe Breite kann nach Belieben definiert werden

.clearfix:before, .clearfix:after {
    content: "";
    display: table;
}
.clearfix:after {
    clear: both;
}
.clearfix {
    zoom: 1;
}
.main_div {
    width: 100%;
    height: auto;
    float: left;
}
.big_img {
    float: right;
    width: 100px;
    height: 100px;
}
.small_img {
    float: right;
    width: 100px;
    height: 100px;
}

HTML

<div class="main_div">
    <img src="" class="big_img">
    <div class="clearfix"></div>
     <img src="" class="small_img">

     </div>

Hier ist der Demo Geige

  • Das ist nicht die saubere Lösung, die ich mir vorgestellt habe – ich möchte vermeiden, der Seite mehr Markup hinzuzufügen.

    – Tomalak

    12. Juli 2013 um 13:40 Uhr


Hinzufügen overflow: hidden; zum übergeordneten div der Bilder. Es umschließt die Bilder, wenn Sie sie schweben lassen, und löscht die Bilder von rechts mit clear: right

http://jsfiddle.net/zBnqQ/15/

Setzen Sie sie in ein rechts ausgerichtetes div:

<div style="float: right;">
  <div align='right' class="content-container">
    <img class="image1" style="display: block;" src="https://stackoverflow.com/questions/17614801/..." />
    <img class="image2" style="display: block;" src="https://stackoverflow.com/questions/17614801/..." />
  </div> 
</div>

Verwenden Sie dann js, um die Breite des div auf das Bild festzulegen:

$('.container').width($('.image1').width());

CSS:

.image1 {
    width: 50px;
}
.image2 {
    width: 30px;
}

Obwohl es mit js besser ist, ist es nicht notwendig, dass es funktioniert

Geige: http://jsfiddle.net/GuTZ3/2/

Es gibt zwei mögliche Lösungen, eine mit grundlegendem HTML-Attribut: Ansatz 1:

<p>
<img src="https://stackoverflow.com/questions/17614801/...." align="right">...some text...
</p>

Ansatz 2: Sie können spaltenbasierte Layouts verwenden http://www.gridsystemgenerator.com

Spalte 1 Spalte 2 Text.. Bild

Ich weiß, dass Sie den HTML-Code nicht bearbeiten möchten.

HTML

    <p>This is crap station train to the mainstream...</p>        

    <div class="sth">
    <p><img src="https://www.gravatar.com/avatar/0ada184c98bf9073d15b2dc815be0170?s=32&d=identicon&r=PG" alt="jesus was not" /></p>
    <p><img src="http://unicornify.appspot.com/avatar/9d699fb41cafd14479fbd1ae1c89c669?s=128" alt="mum asked me to" /></p>
    </div>

    <p>This is crap station train to the mainstream...</p>

CSS

.sth{display:block; text-align:right;}
.sth img{ 
border: 1px solid black;
}

DEMO: http://jsfiddle.net/goodfriend/zBnqQ/39/

  • Pragmatische Lösung. Ich möchte vermeiden, mehr Markup hinzuzufügen, aber es könnte sein, dass ich dies am Ende mache.

    – Tomalak

    12. Juli 2013 um 13:42 Uhr

1047890cookie-checkRichten Sie Blockelemente in HTML rechtsbündig aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy