Есть ли способ поместить якорь в css?
У меня фиксированная высота заголовка 50px. В моем теле у меня много якорей. Проблема в том, что когда я нажимаю ссылки, указывающие на привязки, ящик появляется под моим фиксированным заголовком, и я теряю 50 пикселей содержимого (мне нужно прокручивать 50 пикселей для чтения содержимого под заголовком).
Есть ли способ поместить якорь в 50 пикселей? Мое тело заполнено большим количеством ящиков (div) с разницей между ними, поэтому я не могу установить пустой div из 50px, а затем закрепить после него.
HTML:
<div id="header"></div>
<div id="content">
<div class="box" id="n1"></div>
<div class="box" id="n2"></div>
<div class="box" id="n3"></div>
</div>
CSS
#header{
height: 40px;
width: 100%;
margin: 0px;
padding: 0px;
position: fixed;
text-align: center;
z-index:2;
}
#content{
padding-top: 50px;
margin: 0px;
}
.box {
width: 80%;
margin-left: auto;
margin-right: auto;
vertical-align : top;
padding: 1.4%; /* Keep it in percent (%) */
margin-bottom: 30px;
min-height: 200px;
}
Ответы
Ответ 1
Если заголовок действительно исправлен, поместите свои якоря в прокручиваемый div. Затем div, содержащий якорь, будет прокручиваться вместо всей страницы. Посетите скрипку и нажмите на anchor1. Он идет на якорь2. И так далее.
http://jsfiddle.net/mrtsherman/CsJ3Y/3/
css - установить переполнение, скрытое в теле, чтобы предотвратить прокрутку по умолчанию. Используйте абсолютную позицию позиции в новой области содержимого с верхним и нижним набором. Это заставляет его растягиваться, чтобы соответствовать оставшемуся окну окна просмотра.
body { overflow: hidden; }
#header { position: fixed; top: 0; left: 0; width: 100%; height: 50px; background: gray; border: 1px solid black; }
#content {
overflow: scroll;
position: absolute;
top: 50px;
bottom: 0px;
width: 100%;
border: 1px solid blue;
}
html
<div id="header">header</div>
<div id="content">
<div>
Page Content <br />
<a id="a1" href="#anchor2" name="anchor1">Anchor 1</a>
<a id="a2" href="#anchor1" name="anchor2">Anchor 2</a>
</div>
</div>
Ответ 2
Если вы используете jQuery, вы используете эту функцию:
function scrollToAnchor() {
if($(".jquery-anchor").length > 0 && document.URL.indexOf("#") >= 0){
var anchor = document.URL.split("#")[1];
$(".jquery-anchor").each(function() {
if($(this).attr("name") == anchor) {
$("html,body").animate({
scrollTop: $(this).offset().top - 50},
'slow');
}
});
}
}
затем добавьте класс "jquery_anchor" к вашему якорю
Ответ 3
Для решения Pure CSS просто используйте другой div с oposited margin:)
<style>
.anchor {
margin-top: -50px;
margin-bottom: 50px;
}
</style>
<div id="n1" class="anchor"></div>
<div class="box"></div>
Ответ 4
Это старая нить, я знаю, но, возможно, у других людей есть тот же вопрос.
Опция устанавливает верхнее дополнение для каждого привязанного div следующим образом:
.box {padding-top: 50px; ... }...}
Теперь ваш анкерный свиток достигнет поля без каких-либо пустых контейнеров раньше, а добавление, добавляемое в CSS, даст вам пространство для показа содержимого прямо под заголовком.