为了使我的网站更具响应性,我正在尝试学习如何流畅地定义元素。今天我遇到了一个我终于修复的情况,但我不明白为什么修复工作,我想。
我无法链接到该网站 (NDA),但我已经提供了一些包含相关元素的示例页面:
错误:http ://cruxwire.com/wrong.html 正确:http://cruxwire.com/right.html
我所拥有的是向左浮动的三个 div。我正在尝试向它们添加填充(以百分比形式)并使用 target/context=result,然后使用 *100(因为它是百分比。)
我的 Ethan Marcotte 的响应式网页设计副本说:“在元素上设置灵活填充时,您的上下文是元素本身的宽度。” 我给了 div 的 20% 的宽度。由于父元素是945px,所以每个div的像素宽度是189px。我想添加 20px 的填充,所以 20/189=0.1058201058201058。我为每个 10.58201058201058% 的 div 添加了一个填充。
这最终为每个 div 提供了 100 像素的填充,而不是 20 像素。我最终意识到填充是根据父元素的宽度计算的,而不是 div 本身。
我的解决方案是在每个现有的 div 周围放置一个额外的 div,这样我就可以将宽度应用于一个,将填充应用于另一个,这样就解决了问题。
为什么填充计算相对于其父元素而不是其自身元素?
我怎样才能做到这一点而不必添加额外的 div?
你可以在这篇文章链接的页面上看到代码,我也在下面添加了它。
错误的:
<!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>
正确的:
<!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>