2015-03-03 2 views
0

Есть ли способ для липких учесть другие стики на странице?положение липкое автоматическое «верхнее» положение

Например:

body { 
 
    display: flex; 
 
    min-height: 2000px; 
 
    flex-direction: column; 
 
} 
 
#header { 
 
    height: 40px; 
 
    flex: 0 0 auto; 
 
    position: sticky; 
 
    top: 0; 
 
    background: yellow; 
 
} 
 
#footer { 
 
    flex: 0 0 auto; 
 
    height: 20px; 
 
} 
 
#main { 
 
    display: flex; 
 
    flex: auto; 
 
    background: blue; 
 
} 
 
#side { 
 
    width: 200px; 
 
    background: red; 
 
} 
 
#side > div { 
 
    position: sticky; 
 
    top: 0px; 
 
}
<div id="header">header</div> 
 
<div id="main"> 
 
    <div id="side"> 
 
    <div>side</div> 
 
    </div> 
 
    <div id="content"> 
 
    content 
 
    </div> 
 
</div> 
 
<div id="footer">footer</div>

Обратите внимание, что если я прокручиваю вниз заголовок будет перекрывать боковую панель, потому что они имеют одинаковую top позицию.

Чтобы исправить я должен сделать верхнее расположение боковой панели принимает значение высоты заголовка

body { 
 
    display: flex; 
 
    min-height: 2000px; 
 
    flex-direction: column; 
 
} 
 
#header { 
 
    height: 40px; 
 
    flex: 0 0 auto; 
 
    position: sticky; 
 
    top: 0; 
 
    background: yellow; 
 
} 
 
#footer { 
 
    flex: 0 0 auto; 
 
    height: 20px; 
 
} 
 
#main { 
 
    display: flex; 
 
    flex: auto; 
 
    background: blue; 
 
} 
 
#side { 
 
    width: 200px; 
 
    background: red; 
 
} 
 
#side > div { 
 
    position: sticky; 
 
    top: 40px; 
 
}
<div id="header">header</div> 
 
<div id="main"> 
 
    <div id="side"> 
 
    <div>side</div> 
 
    </div> 
 
    <div id="content"> 
 
    content 
 
    </div> 
 
</div> 
 
<div id="footer">footer</div>

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

ответ

0

Думаю, вам нужно будет использовать javascript для этого. Сначала нужно получить высоту заголовка, а затем установить верхнее положение вашего бокового div, используя это значение. Я не знаю, как это сделать, я боюсь.

Если вы используете JQuery он просто использует метод .height(), если вы не можете использовать это:

var clientHeight =  document.getElementById('myDiv').clientHeight; 

var offsetHeight = document.getElementById('myDiv').offsetHeight; 

Метод смещения получает высоту с любым отступов и границ.

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