Ответ 1
.outer {
position: relative;
width: %;
}
.inner {
position: fixed;
width: inherit;
}
Это должно сделать трюк.
Представьте себе:
<div class="outer">
<div class="inner">
</div>
</div>
Где:
.outer
является частью структуры столбцов, а его ширина является процентильной и, следовательно, жидкостью..inner
представляет элемент позиции fixed
, который должен заполнить 100% ширину элемента .outer
. Однако его положение по вертикали остается неизменным, поэтому fixed
.Ive попытался реализовать этот макет со следующим CSS:
.outer {
position: relative;
width: %;
}
.inner {
position: fixed;
width: 100%;
}
Однако .inner
не вычисляет свою ширину в процентах от своего родителя relative
. Вместо этого он заполняет всю ширину окна/документа. Попытка любых свойств left
или right
приводит к тем же свойствам игнорирования родителя.
Есть ли способ обойти это?
.outer {
position: relative;
width: %;
}
.inner {
position: fixed;
width: inherit;
}
Это должно сделать трюк.
position: fixed
всегда относится к окну/браузеру, поэтому его нельзя использовать для решения вашей проблемы. Фиксированное позиционирование удаляет элемент из естественного порядка DOM и, следовательно, больше не остается в вашем внешнем div, поэтому он берет полную ширину браузера, а не вашего контейнера. Вам нужно position: absolute
разместить .inner
относительно .outer
. Вы сможете расположить свой элемент так же, как и его ширина, в div .outer
.
Используйте это:
.inner { позиция: фиксированная; Слева направо: 0; право: 0;
}
Фиксированные элементы принимают только абсолютные значения как ширину. Если ваш родительский контейнер является текучим (ширина в процентах), вам необходимо установить ширину фиксированного элемента динамически. Вам нужно получить ширину контейнера для упаковки и установить его на липкий элемент.
CSS
.outer {width: 25%;}
.inner {position: fixed;}
JS
var fixedWidth = $('.outer').css('width');
$('.inner').css('width', fixedWidth);
Кроме того, вы можете добавить прослушиватель событий в случае изменения размера окна.
JS
window.addEventListener('resize', resize);
function resize() {
var fixedWidth = $('.outer').css('width');
$('.inner').css('width', fixedWidth);
}
Вы можете взглянуть на этот jsfiddle, который я сделал, что иллюстрирует исправление вашей проблемы, вы можете использовать этот код точно так же, как и он делает то, что вы хотите.
position:fixed
всегда относится к окну просмотра/браузера, а не к предкам.
Как насчет того, чтобы использовать что-то вроде этого fiddle?
.outer {
width: 20%;
height: 1200px;
margin-left: 5%;
float: left;
}
.inner {
height: 200px;
position: fixed;
top: 0;
background: orange;
right: 75%;
left: 5%;
}