Я работаю над выдвижной панелью (по этой ссылке). В уроке я вижу, как я могу добиться выдвижной панели с правой стороны, используя фиксированный дисплей, но я хочу, чтобы панель отображалась ниже верхней черной панели навигации, в отличие от фиксированной панели, перекрывающей всю вертикальную высоту. Есть ли способ установить «верх» на значение относительно высоты панели навигации?
<html>
<head>
<title>CssTest</title>
<style>
.main{
display: flex;
flex-direction: column;
}
.top {
background-color: black;
display: flex;
justify-content: flex-start;
}
.a {
background-color: brown;
}
.b {
background-color: coral;
}
.content{
display: flex;
flex-direction: row;
background-color: darkgoldenrod;
justify-content: flex-start;
}
.content-panel{
position: fixed;
background-color: darkorange;
top:0;
bottom:0;
right:0;
width: 30em;
/*
transform: translateX(0%);
transition: .3s ease-out;
*/
}
</style>
</head>
<body>
<div class = "main">
<div class = "top">
<div class = "a">AAAAAAAA</div>
<div class = "b">BBBBBBBB</div>
</div>
<div class = "content">
<div class = "content-main">content</div>
<div class = "content-panel">
this is panel area.
</div>
</div>
</div>
</body>
</html>





Вы должны делать это только в том случае, если у вас есть фиксированный заголовок, который всегда виден. В противном случае это будет выглядеть странно, если пользователь прокрутит страницу вниз.
Если ваша навигационная панель заголовка всегда имеет одинаковую высоту, просто установите фиксированное верхнее значение.
Если нет, единственный способ - использовать javascript. В этом примере значение top панели будет установлено в нижней части заголовка при загрузке страницы.
window.onload = function () {
var headerNaV = document.querySelector(".top");
var contentPanel = document.querySelector(".content-panel");
contentPanel.style.top = headerNaV.offsetHeight + headerNaV.offsetTop + "px";
}.main{
display: flex;
flex-direction: column;
}
.top {
background-color: black;
display: flex;
justify-content: flex-start;
}
.a {
background-color: brown;
}
.b {
background-color: coral;
}
.content{
display: flex;
flex-direction: row;
background-color: darkgoldenrod;
justify-content: flex-start;
}
.content-panel{
position: fixed;
background-color: darkorange;
top:0;
bottom:0;
right:0;
width: 30em;
/*
transform: translateX(0%);
transition: .3s ease-out;
*/
}<html>
<head>
<title>CssTest</title>
</head>
<body>
<div class = "main">
<div class = "top">
<div class = "a">AAAAAAAA</div>
<div class = "b">BBBBBBBB</div>
</div>
<div class = "content">
<div class = "content-main">content</div>
<div class = "content-panel">
this is panel area.
</div>
</div>
</div>
</body>
</html>
Насколько мне известно, вы не можете присвоить фиксированному элементу относительные значения, которые применяются только к position: absolute (принимая родительский элемент за относительную ссылку). Кроме того, проблема с высотой по вертикали, по-видимому, связана не с верхним атрибутом, а с комбинацией верхнего и нижнего, когда оба установлены на 0, это заставляет фиксированный элемент покрывать весь экран. Я предлагаю удалить нижний: 0 или изменить его на автоматический, а затем присвоить вашей панели соответствующее значение высоты.