В попытке сделать мои сайты более отзывчивыми, я пытаюсь научиться плавно определять элементы. Сегодня я столкнулся с ситуацией, которую я наконец исправил, но я не понимаю, почему исправление сработало, и я бы хотел.
Я не могу дать ссылку на сайт (NDA), но я выложил несколько примеров страниц с соответствующими элементами:
НЕПРАВИЛЬНО: http://cruxwire.com/wrong.html
ПРАВО: http://cruxwire.com/right.html
То, что у меня есть, это три деления, всплывшие слева. Я пытаюсь добавить к ним отступ (в процентах) и использую target / context = result, а затем * 100 (потому что это процент.)
Моя копия «Отзывчивого веб-дизайна» Этана Маркотта говорит «При настройке гибкого заполнения для элемента ваш контекст - это ширина самого элемента». Я дал элементам div ширину 20%. Поскольку родительский элемент имеет размер 945 пикселей, ширина каждого элемента div составляет 189 пикселей. Я хотел добавить отступ в 20 пикселей, поэтому 20/189 = 0.1058201058201058. Я добавил отступ к каждому div 10.58201058201058%.
В итоге каждому диву присваивается отступ в 100px, а не 20px. В конце концов я понял, что заполнение вычисляется на основе ширины родительского элемента, а не самого 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>
RIGHT:
<!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>