Установите фиксированный div на 100% ширину родительского контейнера
у меня есть обертка с некоторым дополнением, затем у меня есть плавающий относительный 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/
7 ответов:
вы можете использовать поля для .оберните контейнер вместо прокладки для .обертка:
body{ height:20000px } #wrapper { padding: 0%; } #wrap{ float: left; position: relative; margin: 10%; width: 40%; background:#ccc; } #fixed{ position:fixed; width:inherit; padding:0px; height:10px; background-color:#333; }
как о этой?
$( document ).ready(function() { $('#fixed').width($('#wrap').width()); });С помощью jQuery вы можете установить любую ширину :)
EDIT: как указано dream в комментариях, использование JQuery только для этого эффекта бессмысленно и даже контрпродуктивно. Я сделал этот пример для людей, которые используют JQuery для других вещей на своих страницах и рассматривают возможность использования его для этой части. Я приношу извинения за любые неудобства, которые вызвал мой ответ.
вы можете использовать абсолютное позиционирование, чтобы прикрепить нижний колонтитул к основанию родительского div. Я также добавил 10px padding-bottom к обертке (соответствует высоте нижнего колонтитула). Абсолютное позиционирование относительно родительского div, а не вне потока, так как вы уже дали ему относительный атрибут position.
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; }
попробуйте добавить преобразование к родителю (не нужно ничего делать, может быть нулевой перевод) и установить фиксированную ширину ребенка на 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>
на вершине вашего последнего 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 что показывает рабочий код и лучше объяснить, как это работает.
man ваш контейнер составляет 40% от ширины родительского элемента
но когда вы используете position: fixed, ширина основана на ширине видового экрана(документа)...
подумав, я понял, что ваш родительский элемент имеет 10% заполнение(слева и справа), это означает, что ваш элемент имеет 80% от общей ширины страницы. таким образом, ваш фиксированный элемент должен иметь 40% на основе 80% от общей ширины
Так что вам просто нужно изменить свой # фиксированный класс на
#fixed{ position:fixed; width: calc(80% * 0.4); height:10px; background-color:#333; }Если вы используете sass, postcss или другой компилятор css, вы можете использовать переменные, чтобы избежать нарушения макета при изменении значения заполнения родительского элемента.
вот обновленная скрипка http://jsfiddle.net/C93mk/2343/
надеюсь, это поможет, с уважением
удалить
Padding: 10%;или использовать px вместо процентов на.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; }
Comments