У меня есть оболочка с некоторым заполнением, затем у меня есть плавающий относительный div с процентной шириной (40%).
Внутри плавающего относительного div у меня есть фиксированный div, размер которого я хотел бы иметь такой же, как у его родительского элемента. Я понимаю, что фиксированный div удаляется из потока документа и, как таковой, игнорирует заполнение оболочки.
HTML
<div id="wrapper">
<div id="wrap">
Some relative item placed item
<div id="fixed"></div>
</div>
</div>
CSS
body {
height: 20000px
}
#wrapper {
padding: 10%;
}
#wrap {
float: left;
position: relative;
width: 40%;
background: #ccc;
}
#fixed {
position: fixed;
width: inherit;
padding: 0px;
height: 10px;
background-color: #333;
}
Вот обязательная скрипка: http://jsfiddle.net/C93mk/489/
Кто-нибудь знает, как это сделать?
Я изменил скрипку, чтобы показать более подробную информацию о том, чего я пытаюсь достичь, извините за путаницу: http://jsfiddle.net/EVYRE/4/
calc
forright
иleft
. Посмотрите на jsfiddleКак насчет этого ?
$( document ).ready(function() { $('#fixed').width($('#wrap').width()); });
Используя jquery, вы можете установить любую ширину :)
РЕДАКТИРОВАТЬ: Как сказано в комментариях dream, использование JQuery только для этого эффекта бессмысленно и даже контрпродуктивно. Я сделал этот пример для людей, которые используют JQuery для других вещей на своих страницах и рассматривают возможность его использования и для этой части. Приносим извинения за неудобства, вызванные моим ответом.
источник
Попробуйте добавить преобразование к родительскому элементу (ничего делать не нужно, может быть нулевой перевод) и установите фиксированную ширину дочернего элемента на 100%.
body{ height:20000px } #wrapper {padding:10%;} #wrap{ float: left; position: relative; width: 40%; background:#ccc; transform: translate(0, 0); } #fixed{ position:fixed; width:100%; padding:0px; height:10px; background-color:#333; }
<div id="wrapper"> <div id="wrap"> Some relative item placed item <div id="fixed"></div> </div> </div>
источник
Вы можете использовать абсолютное позиционирование, чтобы прикрепить нижний колонтитул к основанию родительского div. Я также добавил 10px padding-bottom к обертке (соответствует высоте нижнего колонтитула). Абсолютное позиционирование относительно родительского div, а не вне потока, поскольку вы уже дали ему относительный атрибут позиции.
body{ height:20000px } #wrapper {padding:10%;} #wrap{ float: left; padding-bottom: 10px; position: relative; width: 40%; background:#ccc; } #fixed{ position:absolute; width:100%; left: 0; bottom: 0; padding:0px; height:10px; background-color:#333; }
http://jsfiddle.net/C93mk/497/
источник
человек, ваш контейнер составляет 40% ширины родительского элемента
но когда вы используете position: fixed, ширина зависит от ширины области просмотра (документа) ...
подумав, я понял, что ваш родительский элемент имеет 10% отступов (слева и справа), это означает, что ваш элемент имеет 80% от общей ширины страницы. поэтому ваш фиксированный элемент должен иметь 40% на основе 80% общей ширины
поэтому вам просто нужно изменить свой #fixed класс на
#fixed{ position:fixed; width: calc(80% * 0.4); height:10px; background-color:#333; }
если вы используете sass, postcss или другой компилятор css, вы можете использовать переменные, чтобы не нарушать макет при изменении значения отступа родительского элемента.
вот обновленная скрипка http://jsfiddle.net/C93mk/2343/
Надеюсь, это поможет, с уважением
источник
Помимо последней версии jsfiddle , вы упустили одну вещь:
#sidebar_wrap { width:40%; height:200px; background:green; float:right; } #sidebar { width:inherit; margin-top:10px; background-color:limegreen; position:fixed; max-width: 240px; /*This is you missed*/ }
Но как это решит вашу проблему? Просто, давайте сначала объясним, почему больше, чем ожидалось.
Фиксированный элемент
#sidebar
будет использовать размер ширины окна в качестве основы для получения своего собственного размера, как и любой другой фиксированный элемент, как только этот элемент определенwidth:inherit
и#sidebar_wrap
имеет 40% в качестве значения ширины, затем будет вычислятьсяwindow.width * 40%
, тогда, когда ширина вашего окна больше, чем ваша.container
ширина,#sidebar
будет больше чем#sidebar_wrap
.Таким образом, вы должны установить максимальную ширину в вашем
#sidebar_wrap
, чтобы не было больше, чем#sidebar_wrap
.Проверьте этот jsfiddle, который показывает рабочий код и лучше объяснит, как это работает.
источник
Удалите
Padding: 10%;
или используйте пиксели вместо процентов для.wrap
см. пример: http://jsfiddle.net/C93mk/493/
HTML:
<div id="wrapper"> <div id="wrap"> Some relative item placed item <div id="fixed"></div> </div> </div>
CSS:
body{ height:20000px } #wrapper {padding:10%;} #wrap{ float: left; position: relative; width: 200px; background:#ccc; } #fixed{ position:fixed; width:inherit; padding:0px; height:10px; background-color:#333; }
источник