Jak zmienić rozmiar div, aby był największym możliwym kwadratem w jego kontenerze przy użyciu CSS? Jeśli nie jest to możliwe z CSS, jak to zrobić z JavaScript?Zmiana rozmiaru div na największy możliwy kwadrat w kontenerze
Jeśli pojemnik ma height > width
, chciałbym rozmiar kwadratu do width x width
. Jeśli kontener ma numer width > height
, chciałbym, aby rozmiar kwadratu wynosił height x height
.
Po zmianie wymiarów kontenera wymiary dziecka powinny odpowiednio się dostosować.
Znalazłem this answer, aby pomóc w utrzymaniu proporcji dziecka. Takie podejście nie działa, gdy szerokość kontenera jest większa niż wysokość, ponieważ dziecko przepełnia element macierzysty, jak pokazano w poniższym fragmencie.
.flex {
display: flex;
}
.wide,
.tall {
flex: none;
border: 3px solid red;
}
.wide {
width: 150px;
height: 100px;
}
.tall {
width: 100px;
height: 150px;
}
div.stretchy-wrapper {
width: 100%;
padding-bottom: 100%;
position: relative;
background: blue;
}
div.stretchy-wrapper>div {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
color: white;
font-size: 24px;
text-align: center;
}
<div class="flex">
<div class="wide">
<div class="stretchy-wrapper">
<div>Wide container</div>
</div>
</div>
<div class="tall">
<div class="stretchy-wrapper">
<div>Tall container</div>
</div>
</div>
</div>
Można zrobić obliczenia wielkości w CSS (https://developer.mozilla.org/en-US/docs/Web/CSS/calc), ale nie będzie być w stanie wykryć zmiany rozmiaru elementu, potrzebowałbyś do tego JS, ponieważ zasadniczo prosisz o spełnienie warunków, zanim coś się stanie, a CSS nie ma tego rodzaju logiki. – Slime
Który div chcesz, aby był kwadratowy? co jest nie tak z twoim obecnym przykładem? – Stickers
Chcę, aby potomek div (niebieskie okienko) .stretchy-wrapper był kwadratowy, co to jest. W tym przykładzie niebieskie pole w szerokim pojemniku przepełnia rodzic, który można zobaczyć za pomocą granicy. –