Ich versuche, die Größe eines Bilds mit einem Prozentsatz von sich selbst zu ändern. Zum Beispiel möchte ich das Bild nur um die Hälfte verkleinern, indem ich es auf 50% verkleinere. Beim Anwenden width: 50%;
wird jedoch die Größe des Bilds auf 50% des Containerelements geändert (das übergeordnete Element, das <body>
beispielsweise das ist).
Die Frage ist, kann ich die Größe des Bildes mit einem Prozentsatz von sich selbst ändern, ohne Javascript oder Server-Seite zu verwenden? (Ich habe keine direkten Informationen über die Bildgröße)
Ich bin mir ziemlich sicher, dass Sie dies nicht tun können, aber ich möchte nur sehen, ob es nur intelligente CSS-Lösungen gibt. Vielen Dank!
width: <number>%
. Ich glaube nicht, dass es einen Weg gibt, das zu tun!Antworten:
Ich habe 2 Methoden für dich.
Methode 1. Demo auf jsFiddle
Bei dieser Methode wird die Bildgröße nur visuell geändert, nicht die tatsächlichen Abmessungen im DOM. Der visuelle Status nach der Größenänderung wird in der Mitte der Originalgröße zentriert.
html:
CSS:
Hinweis zur Browserunterstützung : Die Browser-Statistiken wurden inline angezeigt
css
.Methode 2. Demo auf jsFiddle
html:
CSS:
Hinweis:
img.normal
undimg.fake
ist das gleiche Bild.Hinweis zur Browserunterstützung: Diese Methode funktioniert in allen Browsern, da alle Browser
css
die in der Methode verwendeten Eigenschaftenunterstützen.Die Methode funktioniert folgendermaßen:
#wrap
und#wrap img.fake
fließen haben#wrap
hatoverflow: hidden
so, dass seine Dimensionen mit dem inneren Bild identisch sind (img.fake
)img.fake
ist das einzige Element im Inneren#wrap
ohneabsolute
Positionierung, damit der zweite Schritt nicht unterbrochen wird#img_wrap
hat eineabsolute
Positionierung im Inneren#wrap
und erstreckt sich in der Größe auf das gesamte Element (#wrap
)#img_wrap
es die gleichen Abmessungen wie das Bild hat.width: 50%
aufimg.normal
, ist seine Größe50%
von#img_wrap
, und damit50%
von der ursprünglichen Bildgröße.quelle
transform:scale()
Lösung hat jedoch ein großes Problem. Es interagiert nicht gut mit dem CSS-Box-Modell. Damit meine ich , dass es nicht mit ihm interact tut überhaupt , so dass Sie das Layout bekommen , die alles falsch aussieht. Siehe: jsfiddle.net/kahen/sGEkt/8HTML:
CSS:
Dies muss eine der einfachsten Lösungen sein, die den Containerelement-Ansatz verwenden.
Bei Verwendung des Containerelementansatzes ist diese Frage eine Variation dieser Frage . Der Trick besteht darin, das Containerelement das untergeordnete Bild verkleinern zu lassen, sodass es eine Größe hat, die der des nicht skalierten Bildes entspricht. Wenn Sie also die
width
Eigenschaft des Bildes als Prozentwert festlegen, wird das Bild relativ zu seiner ursprünglichen Skalierung skaliert.Einige der anderen Schrumpffolien-Enabling Eigenschaften und Eigenschaftswerte sind:
float: left/right
,position: fixed
undmin/max-width
, wie in der verknüpften Frage erwähnt. Jeder hat seine eigenen Nebenwirkungen,display: inline-block
wäre aber eine sicherere Wahl. Matt hatfloat: left/right
in seiner Antwort erwähnt, aber er hat es fälschlicherweise zugeschriebenoverflow: hidden
.Demo auf jsfiddle
Bearbeiten: Wie von Trojanern erwähnt , können Sie auch das neu eingeführte intrinsische und extrinsische CSS3-Größenmodul nutzen :
HTML:
CSS:
Zum Zeitpunkt des Schreibens unterstützen dies jedoch nicht alle gängigen Browserversionen .
quelle
<img src="https://www.google.com/images/srpr/logo11w.png"/>
CSS:img { display: inline-block; width: 15%; }
figure
istwidth: fit-content;
ab sofort. Die Browserunterstützung ist heute auch viel besser.Versuchen Sie
zoom
EigenschaftBearbeiten: Anscheinend unterstützt FireFox keine
zoom
Eigenschaft. Du solltest benutzen;für FireFox.
quelle
Eine andere Lösung ist zu verwenden:
Es wird nicht überprüft, da das
src
Attribut erforderlich ist, aber es funktioniert (außer bei jeder Version von IE, dasrcset
es nicht unterstützt wird).quelle
Dies ist tatsächlich möglich, und ich habe zufällig festgestellt, wie zufällig ich meine erste groß angelegte Responsive Design-Site entworfen habe.
Der Überlauf: versteckt gibt dem Wrapper trotz des schwebenden Inhalts Höhe und Breite, ohne den Clearfix-Hack zu verwenden. Sie können Ihren Inhalt dann mithilfe von Rändern positionieren. Sie können den Wrapper div sogar zu einem Inline-Block machen.
quelle
Dies ist ein sehr alter Thread, aber ich habe ihn gefunden, als ich nach einer einfachen Lösung gesucht habe, um die Bildschirmaufnahme der Netzhaut (hochauflösend) auf einem Display mit Standardauflösung anzuzeigen.
Es gibt also eine reine HTML-Lösung für moderne Browser:
Dies teilt dem Browser mit, dass das Bild doppelt so groß ist wie die beabsichtigte Anzeigegröße. Die Werte sind proportional und müssen nicht die tatsächliche Größe des Bildes widerspiegeln. Man kann auch 2w 1px verwenden, um den gleichen Effekt zu erzielen. Das src-Attribut wird nur von älteren Browsern verwendet.
Der schöne Effekt davon ist, dass es auf der Netzhaut oder dem Standarddisplay dieselbe Größe anzeigt und auf letzterem schrumpft.
quelle
Diese Lösung verwendet js und jquery und ändert die Größe nur basierend auf den Bildeigenschaften und nicht auf der Grundlage des übergeordneten Elements. Die Größe eines einzelnen Bilds oder einer Gruppe kann mithilfe von Klassen- und ID-Parametern geändert werden.
Weitere Informationen finden Sie hier: https://gist.github.com/jennyvallon/eca68dc78c3f257c5df5
quelle
Dies ist ein nicht schwerer Ansatz:
quelle
Tatsächlich skalieren die meisten Antworten hier das Bild nicht wirklich auf die Breite von sich selbst .
Wir müssen eine Breite und Höhe von auto für das
img
Element selbst haben, damit wir mit seiner Originalgröße beginnen können.Danach kann ein Containerelement das Bild für uns skalieren.
Einfaches HTML-Beispiel:
Und hier sind die CSS-Regeln. In diesem Fall verwende ich einen absoluten Container:
Sie können die Bildpositionierung mit Regeln wie anpassen
transform: translate(0%, -50%);
.quelle
Ich denke, Sie haben Recht, soweit ich weiß, ist dies mit reinem CSS einfach nicht möglich (ich meine nicht Cross-Browser).
Bearbeiten:
Ok, meine Antwort hat mir nicht sehr gut gefallen, also habe ich ein wenig gerätselt. Ich hätte vielleicht eine interessante Idee gefunden, die helfen könnte. Vielleicht ist es doch möglich (obwohl nicht die schönste Sache überhaupt):
Bearbeiten: Getestet und funktioniert in Chrome, FF und IE 8 & 9. . In IE7 funktioniert es nicht.
jsFiddle Beispiel hier
html:
CSS:
quelle
inline-block
die Breite#img_wrap
nicht nur von der inneren HTML-Breite ab, sondern auch von der Breite des Kontextcontainers.