Dans un effort pour rendre mes sites web plus réactifs, j'essaie d'apprendre à définir les éléments de manière fluide. Aujourd'hui, je suis tombé sur une situation que j'ai finalement résolu, mais je ne comprends pas pourquoi la solution a fonctionné, et j'aimerais le faire.Largeur et rembourrage relatifs sur le même élément - design web réactif
Je ne peux pas créer un lien vers le site (NDA), mais je l'ai mis quelques exemples de pages avec les éléments en question:
MAL: http://cruxwire.com/wrong.html DROIT: http://cruxwire.com/right.html
Ce que j'est trois divs flottaient à gauche. J'essaie d'ajouter un remplissage (en pourcentage) et j'utilise target/context = result, puis * 100 (parce que c'est un pourcentage.)
Ma copie de Responsive Web Design par Ethan Marcotte dit " Lorsque vous définissez un remplissage flexible sur un élément, votre contexte est la largeur de l'élément lui-même. " J'ai donné aux divs une largeur de 20%. Puisque l'élément parent est 945px, la largeur en pixels de chaque div est de 189px. Je voulais ajouter un padding de 20px, donc 20/189 = 0.1058201058201058. J'ai ajouté un rembourrage à chaque div de 10.58201058201058%.
Cela finit par donner à chaque div un remplissage de 100px, pas 20px. J'ai finalement réalisé que le rembourrage était calculé en fonction de la largeur de l'élément parent, et non du div lui-même.
Ma solution était de mettre un div supplémentaire autour de chaque div existant, pour que je puisse appliquer la largeur à l'un et le rembourrage à l'autre, et qui a résolu le problème ..
J'ai deux questions:
Pourquoi le remplissage est-il calculé par rapport à son élément parent plutôt qu'à son propre élément?
Comment puis-je faire cela sans avoir à ajouter les divs supplémentaires?
Vous pouvez voir le code sur les pages liées à dans ce post, et je l'ai ajouté ci-dessous aussi bien.
Merci, Kim
MAL:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>WRONG</title>
<style>
#main { width:945px; margin:0 auto; padding:40px 0; background-color:blue; }
#slideshow { background-color:green; }
.threecolumn { float:left; width:20%; padding:10.58201058201058%; background-color:yellow; } /* 20px/189px */
.slide { position:relative; margin:0 1%; background-color:red; }
p { background-color:white; margin:0; padding:0; }
</style>
</head>
<body>
<div id="main">
<div id="slideshow">
<h1>WRONG</h1>
<div class="threecolumn slide">
<p>According to Firebug, this element has 100px padding.</p>
</div>
<div class="threecolumn slide">
<p>According to Firebug, this element has 100px padding.</p>
</div>
<div class="threecolumn slide">
<p>According to Firebug, this element has 100px padding.</p>
</div>
<div style="clear:both;"></div>
</div>
</div>
</body>
</html>
DROIT:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>RIGHT</title>
<style>
#main { width:945px; margin:0 auto; padding:40px 0; background-color:blue; }
#slideshow { background-color:green; }
.threecolumn { float:left; width:20%; margin:0 1%; background-color:yellow; }
.slide { position:relative; padding:10.58201058201058%; background-color:red; } /* 20px/189px */
p { background-color:white; margin:0; padding:0; }
</style>
</head>
<body>
<div id="main">
<div id="slideshow">
<h1>RIGHT</h1>
<div class="threecolumn">
<div class="slide">
<p>According to Firebug, this element has 20px padding.</p>
</div>
</div>
<div class="threecolumn">
<div class="slide">
<p>According to Firebug, this element has 20px padding.</p>
</div>
</div>
<div class="threecolumn">
<div class="slide">
<p>According to Firebug, this element has 20px padding.</p>
</div>
</div>
<div style="clear:both;"></div>
</div>
</div>
</body>
</html>
Raison de la downvote? – AlienWebguy