Я пытаюсь исправить это div
так, чтобы он всегда прилипал к верхней части экрана, используя:
position: fixed;
top: 0px;
right: 0px;
Тем не менее, он div
находится внутри центрированного контейнера. Когда я использую position:fixed
его, он фиксирует div
относительное значение окна браузера, например, напротив правой стороны браузера. Вместо этого он должен быть зафиксирован относительно контейнера.
Я знаю, что position:absolute
это можно использовать для исправления элемента относительно div
, но когда вы прокручиваете страницу вниз, элемент исчезает и не прилипает к вершине, как с position:fixed
.
Есть ли взлом или обходной путь для достижения этой цели?
css
position
css-position
fixed
Зак Никодемус
источник
источник
Ответы:
Краткий ответ:
нет.(Теперь это возможно с помощью CSS-преобразования. См. Редактирование ниже)Длинный ответ: проблема с использованием «фиксированного» позиционирования заключается в том, что он выводит элемент из потока . таким образом, он не может быть перемещен относительно своего родителя, потому что он как будто не имеет его. Однако, если контейнер имеет фиксированную, известную ширину, вы можете использовать что-то вроде:
http://jsfiddle.net/HFjU6/1/
Изменить (03/2015):
Это устаревшая информация. Теперь возможно центрировать контент динамического размера (по горизонтали и вертикали) с помощью волшебного преобразования CSS3. Применяется тот же принцип, но вместо использования margin для смещения вашего контейнера вы можете использовать
translateX(-50%)
. Это не работает с описанным выше трюком на полях, потому что вы не знаете, сколько его смещать, если ширина не фиксирована, и вы не можете использовать относительные значения (например50%
), потому что это будет относительно родителя, а не элемента применительно к.transform
ведет себя по-разному. Его значения относятся к элементу, к которому они применяются. Таким образом,50%
fortransform
означает половину ширины элемента, а50%
для margin - половину ширины родительского элемента . Это решение IE9 +Используя код, подобный приведенному выше, я воссоздал тот же сценарий, используя полностью динамические ширину и высоту:
Если вы хотите, чтобы это было в центре, вы можете сделать это тоже:
Демонстрации:
jsFiddle: только по центру по горизонтали
jsFiddle: по центру как по горизонтали, так и по вертикали.
Оригинальный кредит предоставляется пользователю aaronk6 за указание на него в этом ответе.
источник
position:fixed
без указанияtop
илиleft
иногда работает? Некоторые браузеры отображают элемент по умолчанию там, где он обычно находится, если бы он имел нормальное расположение. stackoverflow.com/questions/8712047/…left:inherit
к элементу фиксированной позиции может заставить браузер соблюдать смещение родителя.На самом деле это возможно, и принятый ответ касается только централизации, что достаточно просто. Также вам не нужно использовать JavaScript.
Это позволит вам справиться с любым сценарием:
Установите все так, как вы хотите, если вы хотите позиционировать: absolute внутри позиции: относительный контейнер, а затем создайте новую фиксированную позицию div внутри div с помощью
position: absolute
, но не устанавливайте его свойства top и left. Затем он будет исправлен в любом месте относительно контейнера.Например:
К сожалению, я надеялся, что этот поток может решить мою проблему с помощью Android WebKit, отрисовывающего пиксели с размытыми тенями в виде полей в качестве элементов фиксированной позиции, но, похоже, это ошибка.
Во всяком случае, я надеюсь, что это помогает!
источник
Да, согласно спецификации, есть способ.
Хотя я согласен с тем, что ответ Грэма Блэквуда должен быть принят, поскольку он практически решает проблему, следует отметить, что фиксированный элемент может быть расположен относительно его контейнера.
Я случайно заметил, что при применении
к телу это сделало фиксированного потомка относительно него (вместо области просмотра). Таким образом, мои фиксированные элементы
left
иtop
свойства были теперь относительно контейнера.Поэтому я провел небольшое исследование и обнаружил, что проблема уже была рассмотрена Эриком Мейером, и даже если это показалось «уловкой», оказалось, что это часть спецификаций:
http://www.w3.org/TR/css3-transforms/
Итак, если вы примените какое-либо преобразование к родительскому элементу, он станет содержащим блоком.
Но...
Проблема в том, что реализация кажется ошибочной / креативной, потому что элементы также перестают вести себя как фиксированные (даже если этот бит не кажется частью спецификации).
Такое же поведение будет обнаружено в Safari, Chrome и Firefox, но не в IE11 (где фиксированный элемент будет оставаться фиксированным).
Еще одна интересная (недокументированная) вещь заключается в том, что, когда фиксированный элемент содержится внутри преобразованного элемента, а его свойства
top
иleft
свойства теперь будут связаны с контейнером, что касаетсяbox-sizing
свойства, его контекст прокрутки будет расширяться за границу элемента, как будто поле Размер был установлен вborder-box
. Для некоторых креативщиков это может стать игрушкой :)ТЕСТОВОЕ ЗАДАНИЕ
источник
left:
(учитывая, что это испортило)Ответ - да, до тех пор, пока вы не установите
left: 0
илиright: 0
после того, как вы установили положение div на фиксированный.http://jsfiddle.net/T2PL5/85/
Оформить заказ боковой панели Div. Это исправлено, но связано с родителем, а не с точкой обзора окна.
источник
position: sticky
это новый способ позиционирования элементов, который концептуально похож наposition: fixed
. Различие состоит в том, что элемент сposition: sticky
ведет себя как вposition: relative
пределах своего родителя, пока не будет достигнут заданный порог смещения в области просмотра.В Chrome 56 (в настоящее время бета-версия по состоянию на декабрь 2016 года, стабильная в январе 2017 года) позиция: липкая вернулась.
https://developers.google.com/web/updates/2016/12/position-sticky
Более подробная информация в Придерживайтесь ваших посадок! позиция: липкие земли в WebKit .
источник
position:sticky
отлично. Поддерживается всеми браузерами, кроме IE caniuse.com/#feat=css-stickyРЕШЕНИЕ 2019: Вы можете использовать
position: sticky
собственность.Вот пример CODEPEN, демонстрирующий использование, а также его отличие от
position: fixed
.Как это ведет себя, объяснено ниже:
Элемент с закрепленной позицией позиционируется на основе позиции прокрутки пользователя. Это в основном действует так,
position: relative
пока элемент не прокручивается за пределы определенного смещения, в этом случае он превращается в положение: исправлено. Когда он прокручивается назад, он возвращается к своей предыдущей (относительной) позиции.Это влияет на поток других элементов на странице, т.е. занимает определенное место на странице (как и
position: relative
).Если он определен внутри некоторого контейнера, он позиционируется относительно этого контейнера. Если контейнер имеет некоторое переполнение (прокрутка), в зависимости от смещения прокрутки он превращается в положение: исправлено.
Так что если вы хотите добиться фиксированной функциональности, но внутри контейнера, используйте липкую.
источник
position: sticky
. Очень помогло, спасибо!Просто возьмите верхний и левый стили из фиксированной позиции div. Вот пример
Div #content будет сидеть там, где сидит родительский div, но будет исправлен там.
источник
Я создал этот плагин jQuery для решения аналогичной проблемы, с которой я столкнулся, когда у меня был центрированный контейнер (табличные данные), и я хотел, чтобы заголовок фиксировался в верхней части страницы при прокрутке списка, но я хотел, чтобы он был привязан к табличные данные, поэтому он будет находиться там, где я поместил контейнер (по центру, влево, вправо), а также позволит ему перемещаться влево и вправо по странице при горизонтальной прокрутке.
Вот ссылка на этот плагин jQuery, который может решить эту проблему:
https://github.com/bigspotteddog/ScrollToFixed
Описание этого плагина выглядит следующим образом:
Этот плагин используется для фиксации элементов в верхней части страницы, если бы элемент прокручивался вне поля зрения по вертикали; однако, он позволяет элементу продолжать двигаться влево или вправо с горизонтальной прокруткой.
Если задана опция marginTop, элемент перестанет двигаться вертикально вверх, как только вертикальная прокрутка достигнет целевого положения; но элемент все равно будет перемещаться по горизонтали при прокрутке страницы влево или вправо. После того, как страница будет прокручена вниз, пройдя целевую позицию, элемент будет восстановлен в своей первоначальной позиции на странице.
Этот плагин был протестирован в Firefox 3/4, Google Chrome 10/11, Safari 5 и Internet Explorer 8/9.
Использование для вашего конкретного случая:
источник
Я должен был сделать это с рекламой, которую мой клиент хотел разместить за пределами области контента. Я просто сделал следующее, и это сработало как шарм!
источник
Два HTML-элемента и чистый CSS (современные браузеры)
Смотрите этот пример jsFiddle. Измените размер и посмотрите, как фиксированные элементы даже перемещаются вместе с плавающими элементами, в которых они находятся. Используйте самую внутреннюю полосу прокрутки, чтобы увидеть, как прокрутка будет работать на сайте (фиксированные элементы остаются фиксированными).
Как многие здесь уже говорилось, один ключ не устанавливает каких - либо позиционные настройки на
fixed
элементе (нетtop
,right
,bottom
илиleft
значения).Вместо этого мы помещаем все фиксированные элементы (обратите внимание, что в последнем блоке их четыре) сначала в блок, из которого они должны быть расположены, вот так:
Затем мы используем
margin-top
иmargin-left
«перемещаем» их относительно их контейнера, что-то вроде этого CSS:Обратите внимание, что, потому что
fixed
элементы игнорируют все другие элементы макета, конечный контейнер в нашей скрипке может иметь несколькоfixed
элементов, и все же иметь все эти элементы, связанные с верхним левым углом. Но это верно только в том случае, если все они размещены первыми в контейнере, так как эта сравнительная скрипка показывает, что при распределении по содержимому контейнера позиционирование становится ненадежным .Является ли обертка статической , относительной или абсолютной позицией.
источник
Вы можете попробовать мой плагин jQuery FixTo .
Применение:
источник
Другое странное решение для достижения относительной фиксированной позиции - преобразование вашего контейнера в iframe, таким образом ваш фиксированный элемент может быть зафиксирован в окне просмотра его контейнера, а не на всей странице.
источник
С чистым CSS вы не можете сделать это; по крайней мере, я этого не сделал. Однако вы можете сделать это с помощью jQuery очень просто. Я объясню мою проблему, и с небольшими изменениями вы можете использовать ее.
Поэтому для начала я хотел, чтобы у моего элемента была фиксированная вершина (сверху окна), а левый компонент наследовал от родительского элемента (потому что родительский элемент центрирован). Чтобы установить левый компонент, просто поместите ваш элемент в родительский и установите
position:relative
для родительского элемента.Затем вам нужно знать, насколько сверху находится ваш элемент, когда полоса прокрутки находится сверху (у прокручивается ноль); снова есть два варианта. Во-первых, это статическое (некоторое число), или вы должны прочитать его из родительского элемента.
В моем случае это 150 пикселей от верхней статики. Поэтому, когда вы видите 150, это то, сколько стоит элемент сверху, когда мы не прокручиваем.
CSS
JQuery
источник
Это легко (согласно HTML ниже)
Хитрость в том, чтобы НЕ использовать top или left на элементе (div) с «position: fixed;». Если они не указаны, элемент «fixed content» будет отображаться ОТНОСИТЕЛЬНО к включающему элементу (div с «position :lative;») INSTEAD OF относительно окна браузера !!!
Выше позволил мне найти закрывающую кнопку «X» в верхней части большого количества текста в div с вертикальной прокруткой. «X» стоит на месте (не перемещается с прокручиваемым текстом, и все же он перемещается влево или вправо с включенным контейнером div, когда пользователь изменяет ширину окна браузера! Таким образом, он «фиксируется» вертикально, но располагается относительно закрывающий элемент горизонтально!
Прежде чем я заработал, «X» прокручивался вверх и исчезал из поля зрения, когда я прокручивал текстовое содержимое вниз.
Извините за то, что не предоставил мою функцию javascript hideDiv (), но это излишне увеличило бы этот пост. Я решил сделать это как можно короче.
источник
Я создал jsfiddle, чтобы продемонстрировать, как это работает, используя transform.
HTML
CSS
JQuery
https://jsfiddle.net/bx6ktwnn/1/
источник
У меня та же проблема, один из членов нашей команды дает мне решение. Чтобы разрешить положение div fix и относительно другого div, наше решение состоит в том, чтобы использовать контейнер-отец, обернуть div div и scroll.
CSS
источник
источник
Да, это возможно до тех пор, пока вы не установите положение (
top
илиleft
и т. Д.) Вашегоfixed
элемента (margin
хотя вы все равно можете использовать его для установки относительной позиции). Саймон Бос написал об этом некоторое время назад .Однако не ожидайте, что фиксированный элемент прокручивается с нефиксированными родственниками.
Смотрите демо здесь .
источник
Я сделал что-то подобное некоторое время назад. Я был довольно новичком в JavaScript, так что я уверен, что вы можете сделать лучше, но вот отправная точка:
Вам нужно будет установить ширину, а затем она получит ширину окна и меняет поля каждые несколько секунд. Я знаю, что это тяжело, но это работает.
источник
Это возможно, если вы используете JavaScript. В этом случае плагин jQuery Sticky-Kit :
источник
Мой проект - это шаблон .NET ASP Core 2 MVC Angular 4 с Bootstrap 4. Добавление «наклейка» в основной компонент приложения html (т.е. app.component.html) в первой строке работало следующим образом:
Это конвенция или я слишком упрощен?
источник
При использовании
position:fixed
правила CSS и попытаться применитьtop
/left
/right
/bottom
это положение элемента относительно окна.Обходной путь должен использовать
margin
свойства вместоtop
/left
/right
/bottom
источник
Проверь это:
источник