Хитрость, на которую намекал Тим, заключается в том, чтобы использовать преимущество заполнения. Таким образом, проблема в том, что ваш браузер всегда хочет прокрутить ваш якорь точно до вершины окна. если вы установите свой якорь там, где ваш текст фактически начинается, он будет перекрыт вашей строкой меню. Вместо этого вы устанавливаете привязку к идентификатору тега контейнера <section>
или <div>
, который будет автоматически использоваться навигационной панелью. Затем вам нужно установить padding-top
для контейнера на смещение суммы, которое вы хотите, а margin-top
для контейнера на напротив из padding-top
. Теперь блок вашего контейнера и привязка начинаются точно в верхней части страницы, но содержимое внутри не начинается, пока не появится строка меню.
Если вы используете обычные якоря, вы можете сделать то же самое, используя отрицательную маржу в вашем контейнере, как указано выше, но без заполнения. Затем вы ставите обычный якорь <a target="...">
в качестве первого дочернего элемента контейнера. Затем вы вводите второй дочерний элемент с противоположным, но равным margin-top
, но с помощью селектора .container:first-child +
.
Все это предполагает, что у вашего тега <body>
уже есть поле, установленное так, чтобы оно начиналось ниже заголовка, что является нормой (в противном случае страница будет отображаться с окклюдированным текстом сразу же).
Вот пример этого в действии. С чем угодно на вашей странице с идентификатором можно связать, прикрепив # the-elements-id в конце вашего URL. Если вы сделаете все свои h-теги ad-dt-тегами с возможностью связывания идентификаторов ( Как github делает ) с каким-то скриптом, который вставляет небольшую ссылку слева от них ; добавление следующего в ваш CSS позаботится о смещении навигационной панели:
body {
margin-top: 40px;/* make room for the nav bar */
}
/* make room for the nav bar */
h1[id],
h2[id],
h3[id],
h4[id],
h5[id],
h6[id],
dt[id]{
padding-top: 60px;
margin-top: -40px;
}