Как сделать активную ссылку, используя только одну страницу и якорь (#)

-2

Я создал эту страницу, используя bootstrap, и я просто хочу использовать одну страницу, но с якорями, которые переводят пользователя в разные места. Когда я нажимаю, например, "Instagram", при щелчке ссылка становится красной, а URL-адрес изменен на index.html#instagram, можно ли сообщить сайту, что ссылка Instagram должна быть активирована (следовательно, красное все время, пока пользователь не нажмет другую ссылку в меню).

Обновление: теперь я вижу, что если я нажимаю "Instagram", а затем, когда страница прокручивается до Instagram, и я снова нажимаю Instagram, ссылка активируется (красная). Но я хочу, чтобы он был активирован сразу при нажатии, а не во второй раз.

Вот мой сайт: http://www.atleconsulting.se/skbd/

  • 0
    Вам необходимо использовать :target селектор.
  • 0
    Привет, как я могу использовать это? Можете ли вы дать мне пример?
Показать ещё 4 комментария

3 ответа

1

Когда у вас есть #some-value, вы можете получить к нему доступ, используя CSS на этом ID используя псевдо-селектор :target. Хорошим примером будет:

a:target {background: red;}
<a href="#one" id="one">One</a>
<a href="#two" id="two">Two</a>
<a href="#three" id="three">Three</a>
  • 0
    Это не верно. Этот пример работает, потому что ваш целевой узел такой же, как якорь, который ссылается на него, что не имеет смысла в практическом приложении.
0

Сделайте свое меню в переключатели, а затем поставьте метки привязки внутри переключателей. Использовать :checked для стилизации текущей выбранной ссылки.

Я не проверял это, и у меня не будет времени до тех пор, пока позже, но я предсказываю, что распространение рекламы может быть препятствием.

0

Там нет реального чистого решения CSS, которое поддерживает ваш описанный вариант использования. Самое близкое, что нужно было бы использовать :visited но это будет стиль всех якорей, которые были соблюдены, а не только активный фрагмент.

a:visited { color: red; }
<a href="#foo">Foo</a>
<a href="#bar">Bar</a>

<p></p>
<p></p>
<p></p>
<p id="foo">Foo</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p id="bar">Bar</p>

Вам нужно будет использовать какой-то JavaScript для достижения того, чего вы хотите:

// delegate all click events to this handler...
document.addEventListener('click', function(e) {
  
  // ...we only care about clicks on 'a' elements
  if (e.target.tagName.toLowerCase() === 'a') {

    // remove all applied '.active' classes
    Array.prototype.forEach.call(document.querySelectorAll('.active'), function(el) {
      el.classList.remove('active');
    });
    
    // add an '.active' class to style the anchor
    e.target.classList.add('active');  
  }
});
.active { color: red; }
<a href="#foo">Foo</a>
<a href="#bar">Bar</a>

<p>.</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p id="foo">Foo</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p id="bar">Bar</p>

Обратите внимание, что этот пример фактически не проверяет, соответствует ли фрагмент документа вашему якорю href, и не будет ли он окрашивать вашу ссылку, если вы хотите напрямую просмотреть фрагмент.

  • 0
    Привет, я вижу, что это работает на вашем примере, но на моем сайте это не работает. Я добавил .active часть в свой Style.css, и я добавил jquery внутри index.html (внутри тегов <script>) и используя часть <p id = "xxx">. Но это все равно не работает: atleconsulting.se/skbd
  • 0
    Я вижу, что класс .active установлен на ваших .active , но ваш набор правил .active переопределяется более конкретными наборами правил, поэтому ваш стиль не применяется. Увеличьте специфичность вашего селектора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню