Je veux que ma div adapte sa hauteur à toujours égale à sa largeur. La largeur est percental. Lorsque la largeur du parent diminue, la case doit diminuer en conservant son rapport de format.
Comment faire c'est CSS?
Pour obtenir ce que vous cherchez, vous pouvez utiliser le viewport-length lengthvw
.
Voici un exemple rapide que j'ai fait sur jsfiddle .
HTML:
<div class="square">
<h1>This is a Square</h1>
</div>
CSS:
.square {
background: #000;
width: 50vw;
height: 50vw;
}
.square h1 {
color: #fff;
}
Je suis sûr qu'il y a beaucoup d'autres façons de faire mais cette façon m'a semblé la meilleure.
Fonctionne sur presque tous les navigateurs.
Vous pouvez essayer de donner padding-bottom
sous forme de pourcentage.
<div style="height:0;width:20%;padding-bottom:20%;background-color:red">
<div>
Content goes here
</div>
</div>
La div externe crée un carré et la div interne en contient le contenu. Cette solution a fonctionné pour moi plusieurs fois.
Voici un jsfiddle
HTML
<div class='square-box'>
<div class='square-content'>
<h3>test</h3>
</div>
</div>
CSS
.square-box{
position: relative;
width: 50%;
overflow: hidden;
background: #4679BD;
}
.square-box:before{
content: "";
display: block;
padding-top: 100%;
}
.square-content{
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
color: white;
text-align: center;
}
C'est aussi simple que de spécifier un fond de remplissage de la même taille que la largeur en pourcentage. Donc, si vous avez une largeur de 50%, utilisez simplement cet exemple ci-dessous
id or class{
width: 50%;
padding-bottom: 50%;
}
Voici un jsfiddle http://jsfiddle.net/kJL3u/2/
Version modifiée avec un texte réactif : http://jsfiddle.net/kJL3u/394
Une autre méthode consiste à utiliser un 1x1.png transparent avec width: 100%
, height: auto
dans un div
et un contenu parfaitement positionné:
html:
<div>
<img src="1x1px.png">
<h1>FOO</h1>
</div>
css:
div {
position: relative;
width: 50%;
}
img {
width: 100%;
height: auto;
}
h1 {
position: absolute;
top: 10px;
left: 10px;
}
C'est ce que je suis venu avec. Voici n violon .
Premièrement, j'ai besoin de trois éléments d'emballage pour une forme carrée et un texte centré.
<div><div><div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat
volutpat.</div></div></div>
Ceci est la feuille de style. Il utilise deux techniques, une pour formes carrées et une pour texte centré .
body > div {
position:relative;
height:0;
width:50%; padding-bottom:50%;
}
body > div > div {
position:absolute; top:0;
height:100%; width:100%;
display:table;
border:1px solid #000;
margin:1em;
}
body > div > div > div{
display:table-cell;
vertical-align:middle; text-align:center;
padding:1em;
}