Wie können Sie ein Bild innerhalb eines Containers ausrichten div
?
Beispiel
In meinem Beispiel muss ich das <img>
in <div>
mit class ="frame
" vertikal zentrieren :
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
Die Höhe ist fest und die Höhe des Bildes ist unbekannt. Ich kann neue Elemente hinzufügen, .frame
wenn dies die einzige Lösung ist. Ich versuche dies in Internet Explorer 7 und höher, WebKit, Gecko.
Sehen Sie die jsfiddle hier .
.frame {
height: 25px; /* Equals maximum image height */
line-height: 25px;
width: 160px;
border: 1px solid red;
text-align: center;
margin: 1em 0;
}
img {
background: #3A6F9A;
vertical-align: middle;
max-height: 25px;
max-width: 160px;
}
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
css
image
vertical-alignment
Arnaud Le Blanc
quelle
quelle
Antworten:
Der einzige (und beste Cross-Browser-) Weg, wie ich weiß, besteht darin, einen
inline-block
Helfer mitheight: 100%
undvertical-align: middle
auf beiden Elementen zu verwenden.Es gibt also eine Lösung: http://jsfiddle.net/kizu/4RPFa/4570/
Code-Snippet anzeigen
Wenn Sie in modernen Browsern kein zusätzliches Element haben möchten und keine Lust haben, Internet Explorer-Ausdrücke zu verwenden, können Sie ein Pseudoelement verwenden und es mit einem praktischen Ausdruck, der nur einmal pro Element ausgeführt wird, zu Internet Explorer hinzufügen Es treten also keine Leistungsprobleme auf:
Die Lösung mit
:before
undexpression()
für Internet Explorer: http://jsfiddle.net/kizu/4RPFa/4571/Code-Snippet anzeigen
Wie es funktioniert:
Wenn Sie zwei
inline-block
Elemente nebeneinander haben, können Sie sie an der Seite des anderen ausrichten, sodassvertical-align: middle
Sie Folgendes erhalten:Wenn Sie einen Block mit fester Höhe haben (in
px
,em
oder einem anderen absoluten Einheit), kann die Höhe der inneren Blöcke in gesetzt%
.inline-block
mitheight: 100%
mit fester Höhe in einem Block würde ein anderes auszurichteninline-block
Element darin (<img/>
in diesem Fall) vertikal in der Nähe davon.quelle
.frame
und.frame:before
. Eine hier vorgeschlagene Lösung ist das Hinzufügenmargin-left: -4px
zu.frame
. Hoffe das hilft.<img src=""/>
NICHT in dem<span></span>
hinzugefügten Helfer befindet. Es ist draußen. Ich habe fast jede Haarsträhne gezogen, indem ich das nicht bemerkt habe.Dies könnte nützlich sein:
quelle
position:fixed;
Die Lösung von matejkramny ist ein guter Anfang, aber übergroße Bilder haben ein falsches Verhältnis.
Hier ist meine Gabel:
Demo: https://jsbin.com/lidebapomi/edit?html,css,output
HTML:
CSS:
quelle
top: 0;
. Dies führt dazu, dass nurbottom: 0;
vertikal angewendet wird.Eine dreizeilige Lösung:
Dies gilt für alles.
Von hier aus .
quelle
position: absolute;
weil Sie eine fließende Breite benötigen.Eine reine CSS-Lösung:
Schlüsselmaterial
quelle
Für eine modernere Lösung und wenn ältere Browser nicht unterstützt werden müssen, können Sie Folgendes tun:
Hier ist ein Stift: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
quelle
align-self
für einzelne Artikelalign-self
ist, dass die flexiblen Elemente die Höhe des übergeordneten Containers dehnen.Auf diese Weise können Sie ein Bild vertikal zentrieren ( Demo ):
quelle
font-size: 0
fürdiv
. Bei ziemlich großen Containern können Sie es verpassen, aber wenn Ihrdiv
100px und img 80px ist, ist es ein paar Pixel niedriger.Sie können auch Flexbox verwenden, um das richtige Ergebnis zu erzielen:
quelle
Mit Flexbox gibt es eine super einfache Lösung !
quelle
Sie können versuchen, das CSS von PI auf einzustellen
display: table-cell; vertical-align: middle;
quelle
PI
"?Sie können den folgenden Code ausprobieren:
quelle
Hintergrundbildlösung
Ich habe das Bildelement vollständig entfernt und es als Hintergrund für das div mit einer Klasse von festgelegt
.frame
http://jsfiddle.net/URVKa/2/
Dies funktioniert zumindest in Internet Explorer 8, Firefox 6 und Chrome 13 einwandfrei.
Ich habe überprüft, und diese Lösung funktioniert nicht, um Bilder mit einer Höhe von mehr als 25 Pixel zu verkleinern. Es gibt eine Eigenschaft namens,
background-size
die die Größe des Elements festlegt, aber es ist CSS 3, das den Anforderungen von Internet Explorer 7 widerspricht.Ich würde Ihnen raten, entweder Ihre Browserprioritäten zu wiederholen und für die besten verfügbaren Browser zu entwerfen, oder serverseitigen Code zu erhalten, um die Größe der Bilder zu ändern, wenn Sie diese Lösung verwenden möchten.
quelle
Stellen Sie sich vor, Sie haben
Und CSS:
quelle
Sie könnten dies tun:
Demo
http://jsfiddle.net/DZ8vW/1
CSS
JavaScript
quelle
http://jsfiddle.net/MBs64/
Die Schlüsseleigenschaft ist
display: table-cell;
für.frame
.Div.frame
wird als Inline angezeigt, daher müssen Sie es in ein Blockelement einschließen.Dies funktioniert in Firefox, Opera, Chrome, Safari und Internet Explorer 8 (und höher).
AKTUALISIEREN
Für Internet Explorer 7 müssen wir einen CSS-Ausdruck hinzufügen:
quelle
Meine Lösung: http://jsfiddle.net/XNAj6/2/
quelle
Dies funktioniert für moderne Browser (2016 zum Zeitpunkt der Bearbeitung), wie in dieser Demo auf Codepen gezeigt
Es ist sehr wichtig, dass Sie den Bildern entweder eine Klasse geben oder die Vererbung verwenden, um auf die Bilder abzuzielen, die Sie zentrieren möchten. In diesem Beispiel haben wir verwendet,
.frame img {}
damit nur Bilder als Ziel ausgewählt werden, die von einem Div mit einer Klasse von umbrochen wurden.frame
.quelle
Probieren Sie diese Lösung mit reinem CSS aus. Http://jsfiddle.net/sandeep/4RPFa/72/
Vielleicht ist es das Hauptproblem mit Ihrem HTML. Sie verwenden keine Anführungszeichen, wenn Sie c
lass
&image height
in Ihrem HTML definieren.CSS:
Wenn ich mit dem
img
Tag arbeite , bleiben 3 bis 2 Pixel Platztop
. Jetzt nehme ich abline-height
und es funktioniert.CSS:
Die
line-height
Eigenschaft wird in verschiedenen Browsern unterschiedlich gerendert. Wir müssen also verschiedeneline-height
Eigenschaftsbrowser definieren .Überprüfen Sie dieses Beispiel: http://jsfiddle.net/sandeep/4be8t/11/
Überprüfen Sie dieses Beispiel auf
line-height
Unterschiede in verschiedenen Browsern: Unterschiede in der Eingabehöhe in Firefox und Chromequelle
Ich bin mir bei Internet Explorer nicht sicher, aber unter Firefox und Chrome sollte der folgende CSS-Inhalt funktionieren , wenn Sie einen
img
in einemdiv
Container haben. Zumindest für mich funktioniert es gut:quelle
display:table-cell;
% nicht als Breite akzeptiert wirdLösung mit einer Tabelle und Tabellenzellen
Manchmal sollte es gelöst werden, indem es als Tabelle / Tabellenzelle angezeigt wird. Zum Beispiel ein schneller Titelbildschirm. Dies wird auch von W3 empfohlen. Ich empfehle Ihnen, diesen Link mit dem Namen Zentrieren eines Blocks oder Bildes von W3C.org zu überprüfen.
Die hier verwendeten Tipps sind:
Persönlich bin ich nicht einverstanden, Helfer für diesen Zweck einzusetzen.
quelle
Ein einfacher Weg, der für mich funktioniert:
Es funktioniert sehr gut für Google Chrome. Probieren Sie dies in einem anderen Browser aus.
quelle
Zum Zentrieren eines Bildes in einem Container (es könnte sich um ein Logo handeln) neben einem Text wie diesem:
Grundsätzlich wickeln Sie das Bild
quelle
Wenn Sie mit pixelgroße Margen leben können, fügen Sie einfach
font-size: 1px;
auf die.frame
..frame
Denken Sie jedoch daran, dass Sie jetzt auf 1em = 1px den Rand auch in Pixel festlegen müssen.http://jsfiddle.net/feeela/4RPFa/96/
Jetzt ist es nicht mehr in Opera zentriert…
quelle
Ich hatte das gleiche Problem. Das funktioniert bei mir:
quelle
Sie können dies verwenden:
quelle
Mit
table
undtable-cell
Methode erledigen Sie den Job, insbesondere weil Sie auch auf einige alte Browser abzielen. Ich erstelle ein Snippet für Sie, mit dem Sie es ausführen und das Ergebnis überprüfen können:quelle
Ich habe mit der Verwendung von Polstern für die Ausrichtung der Mitte herumgespielt. Sie müssen die Größe des Außencontainers der obersten Ebene definieren, die Größe des Innencontainers sollte jedoch geändert werden, und Sie können die Auffüllung auf verschiedene Prozentwerte einstellen.
jsfiddle
quelle
Die beste Lösung ist das
quelle
Verwende das hier:
Und Sie können variieren
font-size
.quelle
Möchten Sie ein Bild ausrichten, das nach einem Text / Titel steht und beide sich in einem Div befinden?
Siehe JSfiddle oder Run Code Snippet.
Stellen Sie nur sicher, dass Sie an allen Elementen (div, img, title usw.) eine ID oder eine Klasse haben.
Bei mir funktioniert diese Lösung in allen Browsern (für mobile Geräte müssen Sie Ihren Code anpassen mit: @media).
quelle