2015-06-28 7 views
1

Веб-страница имеет родительский контейнер с 4 дочерними контейнерами. Эскиз:Процент CSS не работает правильно

--------------- 
| Child 0 | 
|-------------| 
| Child 1 | 
|-------------| 
| Child 2 | 
|-------------| 
| Child 3 | 
--------------- 

CSS

.Parent { 
    float: right; 
    height: 300px; 
    width: 25%; 
} 
.Child { 
    height: 22%; 
    margin-bottom: 4%; 
} 

Javascript

var pParent = document.getElementById("id"); 
pParent.className = "Parent"; 
for(var k = 0; k < 4; ++k) { 
    var pChild = document.createElement("div"); 
    pChild.className = "Child"; 
    pParent.appendChild(pChild); 
}   

В 4 ребенка контейнеры должны соответствовать отлично в родительском контейнере:

4 * 22% + 3 * 4% = 100% или

4 * 22% 300px + 3 * 4% 300px = 300px где

4 является число дочерних контейнеров и

3 количество пространств/полях между дочерними контейнерами

Но они не. В зависимости от размера браузера дочерние контейнеры могут быть очень маленькими или даже перемещаться за пределами родительского контейнера. Может ли кто-нибудь помочь мне в том, что мне не хватает?

Спасибо!

+0

«4 * 22% + 3 * 4% = 100%» неверно, это было бы «4 * 22% + 4 * 4% = 104%». Присвоить разницу в размере 3% –

+0

@Manoj: Существует едва ли HTML, только тело и div с id = "id". – user3144699

ответ

1

Ваше предположение «4 * 22% + 3 * 4% = 100%» неверно, это было бы «4 * 22% + 4 * 4% = 104%», потому что край применяется для каждого из детей. Попробуйте это,

.Parent { 
    float: right; 
    height: 300px; 
    width: 25%; 
} 
.Child { 
    height: 22%; 
    margin-bottom: 3%; 
} 

В качестве альтернативы, если вы хотите иметь margin-bottom: 4% для первых трех детей и ни для последнего это сделать,

.Parent { 
     float: right; 
     height: 300px; 
     width: 25%; 
    } 
    .Child { 
     height: 22%; 
     margin-bottom: 4%; 
    } 
.Parent:last-child{ 
     height: 22%; 
     margin-bottom: none; 
} 
+0

Спасибо за ваш ответ. Я пробовал это раньше, но это не имело никакого эффекта. Моя проблема заключалась в том, что я не знал, что источником для вычисления поля всегда является ширина родителя. Таким образом, с этой информацией поведение браузера имеет смысл. – user3144699

+0

добро пожаловать! –

0

Ваша проблема представляет собой сочетание нескольких ошибок:

  1. Простая математика - крайность появляется 4 раза, а не 3. (22 + 4) * 4 = 104.
  2. margin-bottom: xx% - вы ожидаете, что это будет процент от родительской высоты, но на самом деле ширина родителя является источником для вычисления поля, даже для margin-bottom.
+0

Спасибо Amit, я не знал, что источником для вычисления поля всегда является родительская ширина. Таким образом, с этой информацией поведение браузера имеет смысл. – user3144699

0

margin-bottom рассчитано на ширину, вы можете посмотреть на flexboxes.

+0

Спасибо Ryszard, я не знал, что источником для вычисления поля всегда является родительская ширина. Таким образом, с этой информацией поведение браузера имеет смысл. – user3144699

Смежные вопросы