Wysokość równa szerokości dynamicznej (CSS fluid layout) [duplikat]

To pytanie ma już odpowiedź tutaj:

Czy można ustawić taką samą wysokość jak szerokość (stosunek 1: 1)?

Przykład

+----------+
| body     |
| 1:3      |
|          |
| +------+ |
| | div  | |
| | 1:1  | |
| +------+ |
|          |
|          |
|          |
|          |
|          |
+----------+

CSS

div {
  width: 80%;
  height: same-as-width
}
Author: web-tiki, 2011-03-27

9 answers

Używając jQuery możesz to osiągnąć wykonując

var cw = $('.child').width();
$('.child').css({'height':cw+'px'});

Sprawdź działający przykład na http://jsfiddle.net/n6DAu/1/

 66
Author: Hussein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-05 16:05:22

[Update: chociaż odkryłem tę sztuczkę niezależnie, od tego czasu nauczyłem się, że Thierry Koblentz wyprzedził mnie. Możesz znaleźć jego 2009 Artykuł na liście Apart. Kredyt tam, gdzie kredyt jest należny.]

Wiem, że to stare pytanie, ale napotkałem podobny problem, który rozwiązałem tylko za pomocą CSS. Oto mój blog post , który omawia rozwiązanie. W poście jest live example . Kod jest reposted poniżej.

HTML:

<div id="container">
    <div id="dummy"></div>
    <div id="element">
        some text
    </div>
</div>

CSS:

#container {
    display: inline-block;
    position: relative;
    width: 50%;
}
#dummy {
    margin-top: 75%; /* 4:3 aspect ratio */
}
#element {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: silver /* show me! */
}

#container {
  display: inline-block;
  position: relative;
  width: 50%;
}

#dummy {
  margin-top: 75%;
  /* 4:3 aspect ratio */
}

#element {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: silver/* show me! */
}
<div id="container">
  <div id="dummy"></div>
  <div id="element">
    some text
  </div>
</div>
 648
Author: Nathan Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-05 05:48:42

Jest sposób na użycie CSS!

Jeśli ustawisz szerokość w zależności od kontenera nadrzędnego, możesz ustawić wysokość na 0 i ustawić wartość procentową padding-bottom, która będzie obliczana w zależności od bieżącej szerokości:

.some_element {
    position: relative;
    width: 20%;
    height: 0;
    padding-bottom: 20%;
}

To działa dobrze we wszystkich głównych przeglądarkach.

JSFiddle: https://jsfiddle.net/ayb9nzj3 /

 360
Author: Kristijan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 06:22:15

Jest to możliwe bez żadnego Javascript:)

Ten artykuł opisuje to doskonale - http://www.mademyday.de/css-height-equals-width-with-pure-css.html

HTML:

<div class='box'>
    <div class='content'>Aspect ratio of 1:1</div>
</div> 

CSS:

.box {
    position: relative;
    width:    50%; /* desired width */
}

.box:before {
    content:     "";
    display:     block;
    padding-top: 100%; /* initial ratio of 1:1*/
}

.content {
    position: absolute;
    top:      0;
    left:     0;
    bottom:   0;
    right:    0;
}

/* Other ratios - just apply the desired class to the "box" element */
.ratio2_1:before{
    padding-top: 50%;
}
.ratio1_2:before{
    padding-top: 200%;
}
.ratio4_3:before{
    padding-top: 75%;
}
.ratio16_9:before{
    padding-top: 56.25%;
}
 83
Author: Sathran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-07 12:46:19

Simple i neet : użyj jednostek vw dla responsywnej wysokości / szerokości zgodnie z szerokością viewportu.

Vw: 1 / 100. szerokość punktu widzenia. (Source MDN)

DEMO

HTML:

<div></div>

CSS dla proporcji 1: 1:

div{
    width:80vw;
    height:80vw; /* same as width */
}

Tabela do obliczania wysokości według pożądanego współczynnika kształtu i szerokości elementu.

   aspect ratio  |  multiply width by
    -----------------------------------
         1:1      |         1
         1:3      |         3
         4:3      |        0.75
        16:9      |       0.5625

Ta technika pozwala ty do:

  • Wstaw dowolną zawartość wewnątrz elementu bez użycia position:absolute;
  • brak niepotrzebnych znaczników HTML (tylko jeden element)
  • dostosuj proporcje elementów zgodnie z wysokością viewportu za pomocą jednostek vh
  • możesz utworzyć kwadrat responsywny lub inny współczynnik proporcji, który zawsze pasuje do viewportu zgodnie z wysokością i szerokością viewportu (zobacz tę odpowiedź : kwadrat responsywny zgodnie z szerokością i wysokością viewportu lub to demo )

Jednostki te są obsługiwane przez IE9 + zobacz canIuse aby uzyskać więcej informacji

 61
Author: web-tiki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29

Niezwykle prosta metoda jsfiddle

HTML

<div id="container">
    <div id="element">
        some text
    </div>
</div>

CSS

#container {
    width: 50%; /* desired width */
}

#element {
    height: 0;
    padding-bottom: 100%;
}
 53
Author: Ninjakannon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 15:53:32

Rozszerzając technikę padding top/bottom, można użyć pseudo elementu do ustawienia wysokości elementu. Użyj overflow, float i ujemnych marginesów, aby usunąć pseudo element z widoku i przepływu.

Pozwala to umieścić zawartość wewnątrz pudełka bez użycia dodatkowego pozycjonowania div I / lub CSS.

.fixed-ar {
  overflow: hidden;
}
.fixed-ar:before {
  content: "";
  float: left;
  margin-left: -10px;
  width: 10px;
  padding-top: 100%;
}
.fixed-ar-4-3:before {
  /* 100 * 3 / 4 = 75 */
  padding-top: 75%;
}
.fixed-ar-16-9:before {
  /* 100 * 9 / 16 = 56.25 */
  padding-top: 56.25%;
}
/* examples */
.fixed-ar {
  margin: 1em 0;
  max-width: 400px;
  color: #999;
  background: #EEE url(http://lorempixel.com/640/480/food/5/) center no-repeat;
  background-size: contain;
}
<div class="fixed-ar fixed-ar-4-3">4:3 Aspect Ratio</div>
<div class="fixed-ar fixed-ar-16-9">16:9 Aspect Ratio</div>
 5
Author: Salman A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-26 11:04:30

Naprawdę należy to jako komentarz do odpowiedzi Nathana, ale nie mogę tego jeszcze zrobić...
Chciałem zachować proporcje, nawet jeśli jest zbyt dużo rzeczy, aby zmieścić się w pudełku. Jego przykład rozszerza wysokość, zmieniając proporcje. Znalazłem dodanie

overflow: hidden;
overflow-x: auto;
overflow-y: auto;

Do .element pomógł. Zobacz http://jsfiddle.net/B8FU8/3111/

 4
Author: craq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 15:30:32

Width: 80vmin; wysokość: 80vmin;

CSS wykonuje 80% najmniejszego widoku, wysokości lub szerokości

Http://caniuse.com/#feat=viewport-units

 -2
Author: Andy Dickinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-04 06:17:43