2015-06-10 3 views
1

Я пытаюсь создать структуру, похожую на панели. Это то, что я пробовал: FIDDLEКак браузер отображает HTML

<div id='main'> 
    <div id='firstp'>Panel 1</div> 
    <div id='secondp'>Panel 2 
     <div id='slide'>Panel 3</div> 
    </div> 
</div> 

и CSS является

#main{ 
    width: 300px; 
    height: 300px; 
    border: 1px solid black; 
} 
#firstp{ 
    width: 20%; 
    height: 100%; 
    border: 1px solid blue; 
    display: inline-block; 
} 
#secondp{ 
    width: 20%; 
    height: 100%; 
    border: 1px solid red; 
    display: inline-block; 
    position: relative; 
    background-color: red; 
} 
#slide{ 
    width: 100%; 
    height: 100%; 
    position: absolute; 
    border: 1px solid green; 
    background-color: green; 
} 

Я хотел бы знать, как браузер отображает HTML при разборе. Как мы видим, есть три панели: Panel 3 является дочерним по отношению к Panel 2, видно сверху Panel 2. Принимая во внимание, что по требованию Panel 2 должен быть сверху Panel 3 и говорить, когда я нажимаю какую-либо кнопку на панели 2, панель 3 должна скользить за панель 2 и поступать вправо на правой стороне панели 2. Надеюсь, я сделал себе ясность. Пожалуйста помоги.

+1

Простой. Когда он достигает закрывающего тега, он знает, что он может отображать все содержащееся в нем. – Jamiec

+0

ok..but почему не пока рендеринг дочерних элементов div должен отображаться ниже родительского div? –

+1

Im не уверен, что я следую вашему вопросу – Jamiec

ответ

0

Если вы хотите, чтобы панель 2 была сверху панели 3, вам необходимо применить что-то вроде z-index:-1;.

Я изменил ваш fiddle, чтобы показать эту работу.

Панель 3 находится за панелью 2 по мере того, как вы просили, и есть кнопка, которая при нажатии преобразует панель вправо. Вы можете легко скрыть это, чтобы скрыть всю панель и сделать некоторые классные вещи jQuery, чтобы сделать слайд-переход приятнее.

Просто старайтесь помнить, что если вы не скажете иначе, дети обычно появятся перед их родителями.

+0

Отлично! Это помогло ... Спасибо :) –

+0

Просто примечание. Когда я попытался дать панели 2 более высокое значение z-индекса, чем панель 3, то она не работает. Панель 3 находится поверх панели 2 .. См. Это http://jsfiddle.net/gg76pb1g/17/ –

-2
#main{ 
    width: 300px; 
    height: 300px; 
    border: 1px solid black; 
} 
#main>div{ 
    width: 20%; 
    height: 100%; 
    border: 1px solid blue; 
    display: inline-block; 
} 
#main>div{ 
    width: 20%; 
    height: 100%; 
    border: 1px solid red; 
    display: inline-block; 
    position: relative; 
    background-color: red; 
} 
#slide{ 
    width: 100%; 
    height: 100%; 
    position: absolute; 
    border: 1px solid green; 
    background-color: green; 
} 
+1

На что это ответ? Вам нужен, по крайней мере, какой-то текст, описывающий, каковы ваши изменения и как это изменение отвечает на вопрос. – Jamiec

+0

@shaik Я думаю, у вас есть проблема. –

0

Речь идет не об рендеринге браузера, а в том, что ваш CSS делает детей выше высоты родителя.

Поскольку вы исправили высоту родителя, но вы сказали, что #slide в высоту 100%, но есть еще один ребенок #secondp, который является текстовым узлом Panel 2. Так технически, #secondp имеет высоту 100% + height of Panel 2, следовательно, переполнение.

Чтобы исправить это, поместите текстовый узел Panel 2 внутри элемента, а затем установить высоту этого элемента (я использовал 10%), а затем отрегулировать высоту #slide быть 100% - specified height of the new element.

Вот пример:

Fiddle

HTML:

<div id='main'> 
    <div id='firstp'>Panel 1</div> 
    <div id='secondp'> 
     <div id="slide1">Panel 2</div> 
     <div id='slide'>Panel 3</div> 
    </div> 
</div> 

CSS:

#main{ 
    width: 300px; 
    height: 300px; 
    border: 1px solid black; 
} 

#firstp{ 
    width: 20%; 
    height: 100%; 
    border: 1px solid blue; 
    display: inline-block; 
    vertical-align: top; 
    box-sizing: border-box; 
} 

#secondp{ 
    width: 20%; 
    height: 100%; 
    border: 1px solid red; 
    display: inline-block; 
    position: relative; 
    background-color: red; 
    box-sizing: border-box; 
} 

#slide{ 
    width: 100%; 
    height: 90%; 
    position: relative; 
    border: 1px solid green; 
    background-color: green; 
    box-sizing: border-box; 
} 

#slide1 { 
    height: 10%; 
} 

Вы также заметите, что я добавил vertical-align: top к firstp Aswell, в противном случае это будет не так.

Кроме того, я добавил box-sizing: border-box, чтобы предотвратить пересечение границы с родителем.

+0

Оцените ответ, но мое требование немного отличается. Ваша общая скрипка не отображает ожидаемое поведение. Сожалею! –

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