Behalten Sie das Seitenverhältnis von einem div mit der CSS
Ich möchte erstellen Sie eine div
das ändern der Breite/Höhe des Fensters Breite ändert.
Gibt es keine CSS3-Regeln, die erlauben würde, die Höhe zu ändern, nach der Breite, , während das Seitenverhältnis beibehalten?
Ich weiß, ich kann über JavaScript, aber ich würde lieber mit nur CSS.
Ich schrieb über die verschiedenen Ansätze in meinem CSS-Tricks-Artikel auf Skalierung ansprechende Animationen
Ich habe diese Q&Eine sehr spät, aber ich muss Kommentar. Es ist zwar sehr diszipliniert und innerhalb der SO Regeln, die jeder zu beantworten, versuchen Sie Ihr bestes, um zu befriedigen, die "nur CSS" die Nachfrage von der Frage, ist es ziemlich überraschend, dass-mit Ausnahme des Antwort von user007 unten auf der Seite, niemand hat erwähnt das offensichtliche: keine zuverlässige CSS-only Lösung existiert, die dieses problem erfordert Javascript. Ein Neuling kommen auf diese Seite, könnte wertvolle Zeit beim wechseln von einem Satz von vor - /Nachteile zu einem anderen, bevor die Glühbirne geht aus: CSS-only nicht aus.
Ich schrieb ein kleines tool, welches es einfach macht, um eine Vorschau, und berechnen Sie die Seitenverhältnisse, aspectrat.io. Es erzeugt auch die entsprechenden CSS/Sass - /Less-code, den Sie kopieren und in Ihre Projekte. Hoffe, dass die Menschen es nützlich finden.
siehe dieses Beispiel: w3schools.com/howto/howto_css_aspect_ratio.asp ..... arbeitete mich
Diese Frage ist für die Einstellung der Höhe basiert auf Breite. Wenn Sie brauchen, im Gegenteil, check out Einstellung-Element Breite auf Höhe Via CSS.
Ich habe diese Q&Eine sehr spät, aber ich muss Kommentar. Es ist zwar sehr diszipliniert und innerhalb der SO Regeln, die jeder zu beantworten, versuchen Sie Ihr bestes, um zu befriedigen, die "nur CSS" die Nachfrage von der Frage, ist es ziemlich überraschend, dass-mit Ausnahme des Antwort von user007 unten auf der Seite, niemand hat erwähnt das offensichtliche: keine zuverlässige CSS-only Lösung existiert, die dieses problem erfordert Javascript. Ein Neuling kommen auf diese Seite, könnte wertvolle Zeit beim wechseln von einem Satz von vor - /Nachteile zu einem anderen, bevor die Glühbirne geht aus: CSS-only nicht aus.
Ich schrieb ein kleines tool, welches es einfach macht, um eine Vorschau, und berechnen Sie die Seitenverhältnisse, aspectrat.io. Es erzeugt auch die entsprechenden CSS/Sass - /Less-code, den Sie kopieren und in Ihre Projekte. Hoffe, dass die Menschen es nützlich finden.
siehe dieses Beispiel: w3schools.com/howto/howto_css_aspect_ratio.asp ..... arbeitete mich
Diese Frage ist für die Einstellung der Höhe basiert auf Breite. Wenn Sie brauchen, im Gegenteil, check out Einstellung-Element Breite auf Höhe Via CSS.
InformationsquelleAutor jackb | 2009-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe einen Weg gefunden, dies zu tun mit CSS, aber Sie müssen aufpassen, denn es kann sich ändern, je nach Strömung Ihre eigene web-site. Ich habe es getan, um das einbetten von Videos mit einem Konstanten Seitenverhältnis innerhalb einer Flüssigkeit Breite Teil meiner web-site.
Sagen, Sie haben ein eingebettetes video wie dieses:
Könnte man dann platzieren Sie diese alle in einem div mit einem "video" - Klasse. Dieses video Klasse wird wohl sein, das flüssige element in Ihre website so, dass, von selbst, es hat keine direkte Höhe Beschränkungen, aber wenn Sie die Größe des Browsers ändert es in der Breite nach, um den Fluss der web-site. Das wäre das element, das Sie werden wahrscheinlich versuchen, Ihre embedded-video-in, während die Aufrechterhaltung einer bestimmten Seitenverhältnis des Videos.
Um dies zu tun, legte ich ein Bild, bevor Sie das eingebettete Objekt innerhalb des "video" - Klasse div.
!!! Der wichtige Teil ist, dass das Bild im richtigen Seitenverhältnis, die Sie pflegen wollen. Auch, stellen Sie sicher, dass die Größe des Bildes ist MINDESTENS so groß wie die kleinsten erwarten Sie das video (oder was auch immer Sie für den Unterhalt der A. R.), um basierend auf Ihr layout. Dadurch vermeiden Sie mögliche Probleme in der Auflösung des Bildes, wenn es im Verhältnis verkleinert. Zum Beispiel, wenn Sie wollten, um ein Seitenverhältnis von 3:2 nicht nur mit einem 3px durch 2px Bild. Es kann funktionieren, unter gewissen Umständen, aber ich habe es noch nicht getestet, und es wäre wahrscheinlich eine gute Idee, um zu vermeiden.
Sollte man wohl schon haben Sie eine minimale Breite wie diese definiert für die fluid-Elemente Ihrer Website. Wenn nicht, ist es eine gute Idee dies zu tun, um zu vermeiden, hacken-Elemente aus oder überlagern, wenn das Browserfenster zu klein wird. Es ist besser, eine scroll-Leiste an einem gewissen Punkt. Die kleinsten in der Breite eine Webseite bekommen, ist irgendwo um ~600px (einschließlich einer festen Spaltenbreite), weil die Auflösungen kommen nicht kleiner, es sei denn, Sie sind den Umgang mit Handy-freundliche Websites. !!!
Benutze ich ein komplett transparentes png aber ich glaube nicht wirklich, dass es am Ende ausmachen, wenn Sie es richtig machen. Wie diese:
Nun sollten Sie in der Lage, hinzufügen von CSS die der folgenden ähnelt:
Stellen Sie sicher, Sie entfernen auch eine explizite Höhe und Breite Erklärung innerhalb des object-und embed-tags, die kommen in der Regel mit copy/Paste embed code.
Wie es funktioniert, hängt von der position, die Eigenschaften der video-Klasse element und das Element, das Sie möchten, halten die einen bestimmten Aspekt-Verhältnis. Es nutzt dabei die Möglichkeit ein Bild weiterhin das richtige Seitenverhältnis bei der Größenänderung in einem element. Es erzählt, was es sonst noch im video-element class im vollen Umfang zu nutzen-Vorteil von der Immobilien-zur Verfügung gestellt von der " dynamic image von zwingt seine Breite/Höhe bis zu 100% der video-Klasse element wird angepasst, indem das Bild.
Ziemlich cool, eh?
Möglicherweise haben Sie zu spielen, um mit ihm ein bisschen, um es mit Ihrem eigenen design, aber das funktioniert eigentlich überraschend gut für mich. Das Allgemeine Konzept ist es.
InformationsquelleAutor forgo
Hinzufügen Web_Designer Antwort, die
<div>
wird eine Höhe (völlig aus der bottom-padding) von 75% von der Breite ist es - element enthalten. Hier ist eine gute Zusammenfassung: http://mattsnider.com/css-using-percent-for-margin-and-padding/. Ich bin mir nicht sicher, warum dies so sein soll, aber das ist, wie es ist.Wenn Sie möchten, dass Ihre div eine Breite andere als 100%, müssen Sie eine weitere Verpackung-div-Element auf, die zum festlegen der Breite:
Ich verwendet etwas ähnliches, um Elliot ' s image-trick vor kurzem, mir zu erlauben, verwenden Sie CSS-Medienabfragen, um zu dienen eine andere logo-Datei je nach Geräte-Auflösung, aber immer noch proportionales skalieren als
<img>
würde natürlich tun (ich habe das logo als Hintergrundbild ein transparentes .png mit dem richtigen Seitenverhältnis). Aber Web_Designer die Lösung würde mich retten eine http-Anforderung.InformationsquelleAutor nabrown
Elliot inspirierte mich zu dieser Lösung - danke:
aspectratio.png
ist eine komplett transparente PNG-Datei mit der Größe Ihres bevorzugten Aspekt-ratio, in meinem Fall 30x10 Pixel.HTML -
CSS3
Bitte beachten Sie:
background-size
ist ein css3-feature, das möglicherweise nicht mit Ihrem Ziel-Browsern. Sie können die Interoperabilität (f.e. auf caniuse.com).InformationsquelleAutor florianb
Wie gesagt in hier auf w3schools.com und etwas bekräftigt in diesem akzeptierte Antwort, Polsterung Werte als Prozentsätze (Hervorhebung von mir):
Ergo, ein korrektes Beispiel für eine responsive DIV, hält ein Seitenverhältnis von 16:9 ist wie folgt:
CSS
HTML
Demo auf JSFiddle
InformationsquelleAutor Marc A
Gründen auf Ihre Lösungen, die ich gemacht habe einige trick:
Wenn Sie es verwenden, Ihre HTML wird nur
Verwenden es auf diese Weise machen:
CSS:
und js (jQuery)
Diese Sie stellen nur attr
data-keep-ratio
auf Höhe/Breite und das ist es.data-keep-ratio
nichtkeep-ratio
bekommen und es Wert ist, mit$(this).data('keep-ratio');
dein code funktioniert jetzt und vielleicht wird die Arbeit für immer, aber es ist nicht standard und können Browser nicht mehr zu unterstützen es jederzeit in der Zukunft
Mit JS hier wird Ursache eine schlechte Nachricht!
InformationsquelleAutor pie6k
Können Sie mit einem svg. Stellen Sie die container/wrapper position relative, setzen Sie die svg zunächst als staticly positioniert und setzen Sie dann absolut positionierten Inhalt (top: 0; left:0; right:0; bottom:0;)
Beispiel mit 16:9-Proportionen:
Bild.svg: (kann inline in src)
CSS:
HTML:
Beachten Sie, dass die inline-svg scheint nicht zu funktionieren, aber Sie können urlencode der svg und Betten Sie ihn in den img-src-Attribut wie dieses:
InformationsquelleAutor Maciej Krawczyk
Als @web-tiki zeigen bereits einen Weg, um
vh
/vw
ich brauche auch einen Mittelpunkt in den Bildschirm, hier ist ein code-snippet für 9:16 portrait.translateY
halten, dieses Zentrum in den Bildschirm.calc(100vw * 16 /9)
wird erwartet, dass die Höhe für 9/16.(100vw * 16 /9 - 100vh)
ist der überlauf Höhe, also, ziehen Sie sichoverflow height/2
halten Sie auf Bildschirm zentrieren.Für Landschaft und halten 16:9, Sie Einsatz zeigen
Verhältnis 9/16 ist einfach zu ändern, keine Notwendigkeit, um vordefinierte
100:56.25
oder100:75
.Wenn Sie sicherstellen möchten, dass die Höhe der ersten, schalten Sie die Breite und Höhe, z.B.height:100vh;width: calc(100vh * 9 /16)
für 9:16 portrait.Wenn Sie möchten, angepasst für verschiedene Bildschirm-Größe, Sie können auch Interesse
@media (orientation: portrait)
/@media (orientation: landscape)
portrait
/landscape
zu ändern das Verhältnis.InformationsquelleAutor wener
SCSS ist die beste Lösung in meinem Fall; mit einem data-Attribut :
Beispiel :
Quelle
[data-aspect-ratio]
Attribut-Selektor in CSS.InformationsquelleAutor gordie
können sagen, Sie haben 2 divs die outher div ist ein container, und das innere können eine beliebige element, das Sie brauchen, zu halten Ihr Verhältnis (img-oder einem youtube-iframe oder was auch immer )
html sieht wie folgt aus :
können sagen, Sie brauchen, um das Verhältnis von "element"
ratio => 4 zu 1 oder 2 zu 1 ...
css sieht wie folgt aus
Auffüllung, angegeben in %, bezogen auf die Breite, nicht die Höhe.
..
also im Grunde genommen ist es egal, was Ihre Breite ist es, die Höhe wird immer so berechnet, dass . die halten das Verhältnis .
InformationsquelleAutor aeid
Ich habe dieses Problem schon einige Male, also habe ich eine JS Lösung für Sie. Dies ist im Grunde passen Sie die Höhe des domElement nach der Breite des Elements durch die ratio, die Sie angeben. Sie können es verwenden, wie folgt:
<div ratio="4x3"></div>
Bitte beachten Sie, dass, da es die Einstellung der Höhe des Elements, das element sollte entweder ein
display:block
oderdisplay:inline-block
.https://github.com/JeffreyArts/html-ratio-component
Die Frage explizit nach einer Lösung gefragt, die nicht auf Javascript angewiesen.
InformationsquelleAutor user007
Wenn Sie wollen, um zu passen ein Platz im inneren des viewport entweder im portrait-oder landscape-Ansicht (so groß wie möglich, aber nichts kleben außen), Umschalten zwischen
vw
/vh
auf die Ausrichtungportrait
/landscape
:InformationsquelleAutor MoonLite
Können Sie die flux-layout (FWD).
https://en.wikipedia.org/wiki/Adaptive_web_design
Wird es skalieren und zu pflegen, das layout, es ist ein bisschen Komplex, aber es ermöglicht eine Seite zu verkleinern ohne drücken der Inhalt wie (RWD).
Sieht es aus wie reaktionsschnell Weg, aber es ist zu skalieren. https://www.youtube.com/watch?v=xRcBMLI4jbg
Finden Sie die CSS-Skalierung Formel hier:
http://plugnedit.com/pnew/928-2/
InformationsquelleAutor user1410288
Sagen, dass Sie zu pflegen Width: 100px und Höhe: 50px (d.h., 2:1)
Genau dies tun die Mathematik:
InformationsquelleAutor Syed
Habe ich eine neue Lösung.
Haupt-Seitenverhältnis
Dies ist jedoch bezogen auf den gesamten viewport. Also, wenn Sie ein div, dass 30% der viewport-Breite, die Sie verwenden können, 30vw statt, und da Sie wissen, die Breite, die Sie wiederverwenden in der Höhe mit calc und vw Gerät.
InformationsquelleAutor Eshwaren Manoharen
Wenn die gesamte container-Struktur war der Prozentsatz basiert, wäre dies das Standardverhalten ist, können Sie ein mehr konkretes Beispiel?
Unten ist ein Beispiel, was ich meine, wenn Sie Ihre gesamte übergeordnete Hierarchie war %, alle browser-Fenster Einstellung arbeiten würde, ohne zusätzliche js/css, ist das nicht eine Möglichkeit, mit Ihrem layout?
InformationsquelleAutor Nick Craver