Как предотвратить прокрутку # href вниз до раздела/идентификатора страницы, но при этом использовать :target для других действий

Я новичок в HTML/CSS/SCSS, но пытаюсь создать одну страницу, которая выглядит так, как будто она меняет страницы, но на самом деле просто использует display: none и display: block.

Я получил это с помощью следующего кода:

// Hide all sections by default
section {
  display: none;
}

// Initially display nav, hero, footer, portfolio, contact sections
#nav-section,
#hero-section,
#footer-section,
#portfolio-section,
#contact-section {
  display: block;
}

// Show about, coding, or scs sections when targeted
#about-section:target,
#coding-section:target,
#scs-section:target {
  display: block;
}

// Hide portfolio and contact when about, coding, or scs are targeted
#about-section:target ~ #portfolio-section,
#about-section:target ~ #contact-section,
#coding-section:target ~ #portfolio-section,
#coding-section:target ~ #contact-section,
#scs-section:target ~ #portfolio-section,
#scs-section:target ~ #contact-section {
  display: none;
}

// Show portfolio and contact when either is targeted
#portfolio-section:target,
#contact-section:target,
#portfolio-section:target ~ #contact-section,
#contact-section:target ~ #portfolio-section {
  display: block;
}

// Ensure other sections are hidden when portfolio or contact is targeted
#portfolio-section:target ~ #about-section,
#portfolio-section:target ~ #coding-section,
#portfolio-section:target ~ #scs-section,
#contact-section:target ~ #about-section,
#contact-section:target ~ #coding-section,
#contact-section:target ~ #scs-section {
  display: none;
}
<p><a href = "#about-section">About Me</a></p>
<p><a href = "#portfolio-section">My Portfolio</a></p>
<p><a href = "#coding-section">Coding Examples</a></p>
<p><a href = "#scs-section">SCS Scheme</a></p>
<p><a href = "#contact-section">Contact Me</a></p>

Все работает нормально, но, очевидно, клик по-прежнему переходит в эту часть страницы. Обратите внимание, у меня есть большое изображение героя.

Можно ли как-нибудь решить эту проблему без JavaScript? Я пытаюсь понять, возможно ли это только в HTML/CSS/SCSS.

Я попытался изменить навигационные ссылки на несвязанные идентификаторы, например с #coding-section на #coding, и обновить SCSS с:

#coding-section:target \~ #portfolio-section,

к

#coding:target \~ #portfolio-section,

но это не сработало для меня.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью JavaScript, как описано в этом вопросе: Запретить прокрутку браузера до элемента, когда в URL-адресе присутствует хэш, но сохранить его в URL-адресе.

Чтобы сделать это без JavaScript, вы можете сместить целевую позицию прокрутки элемента, используя scroll-margin (в частности scroll-margin-top). Вы можете установить это значение, чтобы браузер прокручивал страницу до верха. Чтобы выбрать значение, вы можете либо использовать JS для расчета высоты всего содержимого над разделами, либо установить фиксированное значение, которое больше, чем когда-либо было бы это содержимое (например, 500vh).

Это по-прежнему вызовет прокрутку, но теперь браузер будет прокручиваться до верхней части страницы. В зависимости от вашего макета и потребностей установка другого значения для scroll-margin может работать лучше.

section {
    scroll-margin-top: 100vh;
}
<h1>My Website</h1>

<div>
    <a href = "#one">One</a>
    <a href = "#two">Two</a>
    <a href = "#three">Three</a>
</div>

<section id = "one">
    One
</section>
<section id = "two">
    Two
</section>
<section id = "three">
    Three
</section>

<div style = "height: 200vh;"></div>

вау, это сработало, весь чертов искусственный интеллект в мире не мог дать мне это простое решение. В итоге я использовал CSS, он не работал в одном разделе, но после увеличения его до 1000vh он заработал. спасибо, отличное решение!

user26332401 11.07.2024 12:13

Другие вопросы по теме