Mach ein quadratisch, wenn sich die Breite basierend auf dem Prozentsatz dynamisch ändert [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
Nate

Ich arbeite an einer Webanwendung, die ein NxN-Raster basierend auf der Auswahl von N durch den Benutzer generiert. Ich möchte, dass die Gesamtbreite des Rasters relativ ist (dh 100 % des verfügbaren Platzes), damit Benutzer auf verschiedenen Papierformaten drucken können .

Ich kann die Breite der Quadrate im Raster leicht in % berechnen (dh: 100% / N), aber ich habe Probleme bei der Berechnung der Höhe. Die Höhe einer Webseite wird immer unendlich sein, es sei denn, ich begrenze sie künstlich, was ich, wie gesagt, nicht möchte.

Wie kann ich machen die Quadrate in meinem Raster sind quadratisch im Vergleich zu rechteckig, wenn die Höhen- und Breitenbeschränkungen meines Rasters dynamisch und nicht quadratisch sind?

  • Das real Das Problem ist nicht die Größe der Quadrate: Das ist einfach (Höhe / n). Das Problem besteht darin, die Gesamthöhe des Rasters auf die gleiche Breite einzustellen. Es ist schwierig, ohne Annahmen über feste Größen zu treffen oder irgendeine Form von Skripting zu verwenden.

    – Grafikgöttlich

    16. April 2010 um 7:51 Uhr

Benutzer-Avatar
Web-Tiki

Es gibt 2 Haupttechniken, um das Seitenverhältnis eines responsiven Elements beizubehalten, indem Polsterung und vw-Einheiten verwendet werden:
(Für eine vollständige Lösung für ein reaktionsfähiges Gitter aus Quadraten können Sie diese Antwort sehen.)

Verwendung von vw-Geräten

Sie können verwenden vw Einheiten, um Ihre Elemente quadratisch und reaktionsschnell zu machen (Viewport-Einheiten auf MDN).
1vw = 1% of viewport width So können Sie die Höhe der Elemente entsprechend einstellen Breite des Ansichtsfensters (oder Höhe mit vh Einheiten).
Beispiel mit einem 4×4-Raster:

body{
  margin:0;
  display:flex;
  flex-wrap:wrap;
  justify-content:space-around;
}

div{
    width:23vw; height:23vw;
    margin:1vw 0;
    background:gold;  
}
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>

Das gleiche Verhalten kann erreicht werden, indem das Element entsprechend der Viewport-Höhe usin skaliert wird vh Einheiten.


Polsterung verwenden

Die Polsterung wird entsprechend der Breite des Containers berechnet, sodass Sie damit die Höhe des Blocks entsprechend seiner Breite festlegen können.
Beispiel mit einem 4×4-Raster:

.wrap {
    width:80%;
    margin:0 auto;
}
.wrap div {
    width:23%;
    padding-bottom:23%;
    margin:1%;
    float:left;
    background:gold;
}
<div class="wrap">
    <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</div>

  • Das ist in Ordnung, solange Sie erkennen, dass vw und vh relativ zur Größe des Ansichtsfensters sind, nicht zu einem bestimmten Container (leider)

    – frankt

    15. Oktober 2014 um 6:40 Uhr

  • @frumbert Ich habe meine Antwort mit einer Lösung bearbeitet, die auf der Breite des Containers basiert (“Padding-Technik”)

    – Web-Tiki

    15. Oktober 2014 um 7:59 Uhr

  • das ist ein toller Hack! Programmierer für den Sieg!!

    – quemeful

    11. Mai 2016 um 12:46 Uhr

Mit CSS ist es ziemlich einfach, ein Div in ein Quadrat zu verwandeln. Sie legen eine Breite fest, sagen wir 50 %. Dann fügen Sie einen padding-bottom mit dem gleichen Wert hinzu:

div {
width: 50%;
padding-bottom: 50%;
}

und es bleibt quadratisch, wenn Sie die Größe des Fensters ändern.

.

.

Sie können dies mit einem beliebigen Seitenverhältnis tun, wenn Sie möchten, dass die Box 16: 9 ist, berechnen Sie:

9/16 = 0,56

die du dann mit der Breite deines Elements multiplizierst (in diesem Fall 50 % (= 0,5)), also:

9/16*0,5= 0,28 = 28 %

  • Ich habe nach einem reinen CSS-Weg gesucht, danke!

    – Aklave1

    3. März 2017 um 0:36 Uhr

  • Funktioniert nicht in Edge. :/ jsfiddle.net/836popre/3

    – tenhobi

    15. Juni 2017 um 18:27 Uhr

  • Schöne Lösung, muss die Antwort sein.

    – MarsAndBack

    7. September 2018 um 18:05 Uhr

  • Zu Ihrer Information, ich habe diese Lösung verwendet, um einen dynamischen perfekten Kreis aufrechtzuerhalten, aber ich musste explizit festlegen height: 0 damit es überhaupt funktioniert.

    – MarsAndBack

    25. September 2018 um 0:02 Uhr

  • Leider scheint dies wann zu brechen maximale Breite eingestellt ist, dh max-width: 200px;;

    – ClayRay

    1. September 2020 um 0:13 Uhr

Dies ist ungetestet, ich weiß nicht, wie man das nur in CSS macht, ich würde jQuery verwenden.

$('div').height($('div').width());

  • Ich kannte JQuery damals nicht, aber als ich es gelernt hatte, war es einfach genug. Vielen Dank!

    – Nate

    29. Dezember 2010 um 21:56 Uhr

  • Dies schlägt fehl, wenn die Größe der Seite geändert wird.

    – Mohammed Shareef C

    5. Dezember 2020 um 12:43 Uhr

  • Ich glaube nicht, dass der Erhaltungsbereich relevant ist. Das OP möchte nicht, wie man ein Element basierend auf seiner Breite quadratisch macht. Das Ändern dieser Breite verfehlt den Zweck. -1

    – Jon P

    11. Dezember 2012 um 5:51 Uhr

1176830cookie-checkMach ein quadratisch, wenn sich die Breite basierend auf dem Prozentsatz dynamisch ändert [duplicate]

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

Privacy policy