Я не уверен, как лучше всего задать / найти этот вопрос:
Когда вы нажимаете якорную ссылку, она переносит вас в тот раздел страницы, где связанная область теперь находится ОЧЕНЬ ВЕРХНЕЙ страницы. Я хочу, чтобы якорная ссылка отправляла меня в эту часть страницы, но мне нужно немного места вверху. То есть, я не хочу, чтобы он отправлял меня в связанную часть с ним в ОЧЕНЬ ВЕРХНЕМУ, я бы хотел, чтобы там было около 100 пикселей.
Имеет ли это смысл? Это возможно?
Отредактировано для отображения кода - это просто тег привязки:
<a href="#anchor">Click me!</a>
<p id="anchor">I should be 100px below where I currently am!</p>
javascript
html
css
anchor
Дэймон
источник
источник
Ответы:
Это позволит браузеру выполнить работу по переходу к привязке за нас, а затем мы будем использовать эту позицию для смещения.
РЕДАКТИРОВАТЬ 1:
Как было указано @erb, это работает только в том случае, если вы находитесь на странице во время изменения хеша. Вход на страницу с
#something
уже в URL не работает с приведенным выше кодом. Вот еще одна версия, чтобы справиться с этим:Примечание: Для того, чтобы использовать JQuery, можно просто заменить
window.addEventListener
с$(window).on
в примерах. Спасибо @Neon.РЕДАКТИРОВАТЬ 2:
Как отмечают некоторые, приведенное выше не удастся, если вы нажмете одну и ту же ссылку привязки два или более раз подряд, потому что нет
hashchange
события для принудительного смещения.Это решение является слегка измененной версией предложения от @Mave и для простоты использует селекторы jQuery.
JSFiddle для этого примера находится здесь
источник
example.com/#anchor
сexample.com/about/
.$('a[href^="#"]').on('click', function() { offsetAnchor(); });
. Таким образом, еслиhref
изa
элемента начинается с#
, вы вызываете ту же функцию.$(window).on("hashchange",
наwindow.addEventListener("hashchange",
Работая только с css, вы можете добавить отступ к закрепленному элементу (как в решении выше). Чтобы избежать ненужных пробелов, вы можете добавить отрицательное поле той же высоты:
Я не уверен, что это лучшее решение в любом случае, но мне оно подходит.
источник
position: relative
свойство css. Итак, это было бы какposition: relative; top: -50px;
Еще лучшее решение:
Просто разместите
<a>
тег с абсолютным позиционированием внутри относительно позиционированного объекта.Работает при входе на страницу или через изменение хеша на странице.
источник
href="#anchor"
in it будет указывать туда, вместо того, чтобы указывать на<p>
элемент напрямую. Но одно предупреждение: используйтеid
вместоname
HTML5, см .: stackoverflow.com/questions/484719/html-anchors-with-name-or-idВот ответ 2020 года на это:
Потому что это широко поддерживается !
источник
Лучшее решение
источник
Это будет работать без jQuery и при загрузке страницы.
источник
Чтобы создать ссылку на элемент, а затем «расположить» этот элемент на произвольном расстоянии от верха страницы, используя чистый CSS, вам придется использовать
padding-top
, таким образом элемент по-прежнему располагается в верхней части окна, но он появляется , видимо, должен быть расположен на некотором расстоянии от верхней части обзора-порта, например:CSS:
Демо JS Fiddle .
Чтобы использовать простой подход JavaScript:
Демо JS Fiddle .
источник
Это должно работать:
Просто измените .top-49 на то, что соответствует вашей якорной ссылке.
источник
Если вы используете явные имена привязок, например,
тогда в css вы можете просто установить
Это будет работать, если ваши теги привязки HREF также не указывают атрибут NAME.
источник
Ответ Эрика великолепен, но вам действительно не нужен этот тайм-аут. Если вы используете jQuery, вы можете просто дождаться загрузки страницы. Поэтому я предлагаю изменить код на:
Это также избавляет нас от этого произвольного фактора.
источник
попробуйте этот код, он уже имеет плавную анимацию при нажатии на ссылку.
источник
Самое простое решение:
CSS
HTML
источник
Вариант решения Томаса: CSS element> element selectors может быть здесь полезен:
CSS
HTML
Щелчок по ссылке переместит позицию прокрутки на 100 пикселей выше, где бы ни располагался элемент с классом
paddedAnchor
.Поддерживается в браузерах, отличных от IE, и в IE, начиная с версии 9. Для поддержки IE 7 и 8
<!DOCTYPE>
необходимо объявить a .источник
Я просто нашел для себя простое решение. Было верхнее поле 15 пикселей
HTML
CSS
источник
Использование только css и отсутствие проблем с закрытым и не кликабельным контентом раньше (суть в событиях указателя: нет):
CSS
HTML
источник
Поместите это в стиль:
и используйте этот класс в отдельном
div
теге перед ссылками, например:или используйте этот php-код для тега эхо-ссылки:
источник
Я знаю, что это немного поздно, но я нашел кое-что очень важное, чтобы вставить в ваш код, если вы используете Bootstrap Scrollspy. ( http://getbootstrap.com/javascript/#scrollspy )
Это сводило меня с ума на несколько часов.
Смещение для шпиона прокрутки ДОЛЖНО соответствовать window.scrollY, иначе вы рискуете:
источник
На основе решения @Eric Olson просто немного измените, чтобы включить элемент привязки, который я хочу конкретно использовать
источник
Просто у меня такая же проблема. У меня есть пиксель навигатора, и я хочу, чтобы ангкор запускался под навигатором. Решение
window.addEventListener...
не работает для меня, потому что я установил свою страницу такимscroll-behavior:smooth
образом, чтобы она устанавливала смещение, а не прокручивала до angkor.setTimeout()
работа , если время обделяя для прокрутки до конца , но он все еще не очень хорошо. поэтому моим решением было добавить абсолютный div в angkor с помощьюheight:[the height of the nav]
иbottom:100%
. в этом случае этот div заканчивался в верхней части элемента angkor и начинался с позиции, в которой вы выбираете angkor для прокрутки. теперь все, что я делаю, это устанавливаю ссылку angkor на этот абсолютный div, и работа выполнена :)источник
Я столкнулся с аналогичной проблемой, и я решил ее, используя следующий код
источник
источник