Чи можливо зробити тег HTML якоря не клікальним / пов’язаним за допомогою CSS?


132

Наприклад, якщо у мене це є:

<a style="" href="page.html">page link</a>

Чи можу я скористатися атрибутом style, який зробить його таким чином, щоб посилання не було доступним для натискання і не переніме на сторінку.html?

Або мій єдиний варіант просто не загортати "посилання на сторінку" у тег прив’язки?

Редагувати: Я хочу зазначити, чому я хочу це зробити, щоб люди могли дати кращі поради. Я намагаюся налаштувати свою програму, щоб розробник міг вибрати, який тип навігаційного стилю вони хочуть.

Отже, у мене є список посилань, і одне завжди вибирається, а всі інші - ні. Для посилань, які не вибрані, я, очевидно, хочу, щоб вони були нормальними якорними тегами, які можна натискати. Але для вибраного посилання деякі люди вважають за краще, щоб це посилання залишалося доступним для натискання, а іншим подобається робити його неможливим.

Тепер я міг легко просто програмно не обернути теги якоря навколо вибраного посилання. Але я вважаю, що це буде елегантніше, якщо я завжди зможу перегорнути вибране посилання на щось на зразок:

<a id="current" href="link.html">link</a>

а потім дозволити розробнику керувати стилем посилання через CSS.



3
Якщо ви не хочете, щоб його натискали, можливо, скористайтеся <span>натомість?
Девід каже повернути Моніку

Я мав би погодитися з Девідом. Не порушуйте парадигми інтерфейсу користувача. Сподівання користувача полягає в тому, що посилання можна клацати. Якщо його не можна натиснути, то це насправді не посилання?
mrtsherman

Перевірте stackoverflow.com/questions/2091168/disable-a-link-using-css, щоб отримати ще кілька можливих відповідей.
Олівер

Так, це жахлива ідея. Читачі на екрані все ще побачать посилання як посилання, тому що це посилання. Пошукові системи теж. Насправді все, що розуміє HTML. Не робіть цього. У цьому немає нічого «елегантного».
Пол Д. Уейт

Відповіді:


267

Ви можете використовувати цей css:

.inactiveLink {
   pointer-events: none;
   cursor: default;
}

А потім призначте клас своєму html-коду:

<a style="" href="page.html" class="inactiveLink">page link</a>

Це робить посилання не клікабельним, а стиль курсору - стрілкою, а не рукою, як це має посилання.

або використовувати цей стиль у html:

<a style="pointer-events: none; cursor: default;" href="page.html">page link</a>

але я пропоную перший підхід.


Я можу підтвердити це на версії Ubuntu Firefox / Chrome. Цікаво, чи буде він працювати на IE у Windows.
ДжонМерліно

3
Ключовим в цьому розчині: pointer-events. Тут посилання на таблицю сумісності
masegaloeh

@JohnMerlino: не працює в IE9. Дивіться більше за посиланням masegaloeh до таблиці сумісності
Howie

Застереження: використання закладок для переміщення фокусу на зв'язок і з допомогою Enter , щоб активувати посилання все одно буде працювати
wtho

Я не думаю, що курсор: за замовчуванням не потрібно. Поки у вас є події-вказівники: жоден, здається, працює.
kloddant

51

Це не так просто зробити з CSS, оскільки це не поведінкова мова (тобто JavaScript), єдиним простим способом було б використання події OnClick JavaScript на вашому якорі та повернення його як хибне, це, мабуть, найкоротший код ви можете використовувати для цього:

<a href="page.html" onclick="return false">page link</a>

2
@Mike Цей натискання не робить нічого, але кнопка все ще виглядає натиснутою.
acostache

1
@acostache, використовуючи style = "cursor: default;" має допомогти з покажчиком
Джон

4
Питання було: "використання CSS", тож це гарна, але не правильна відповідь.
Роман Хольцнер

Краще використовувати css, а не onclick = "return false" з 3 основних причин: 1- За допомогою css ви можете змінити курсор миші за замовчуванням на стрілку за замовчуванням. 2- Це нав'язливий js. 3- Це фактично повертає значення, ви не хочете повертати помилкові кожен раз, коли натискаєте на посилання.
Дієго Унануе

11

Так .. Можна за допомогою css

<a class="disable-me" href="page.html">page link</a>

.disable-me {
    pointer-events: none;
}

Це найчистіший спосіб, але один нюанс: він підтримується тільки на IE11 + caniuse.com
pixelfreak

8

Або чисто HTML та CSS без подій:

<div style="z-index: 1; position: absolute;">
    <a style="visibility: hidden;">Page link</a>
</div>
<a href="page.html">Page link</a>

1
-1 тому, що це досить складний / заплутаний спосіб вирішення проблеми. Він також насправді не робить те, що задає питання (зробіть посилання неактивним). Він просто покриває посилання невидимим елементом. Відповідь Дієго набагато чіткіша.
розробник

@developering Я думаю, що відповідь Дієго також краща, і її слід проголосувати вище і прийняти. Однак, коли я писав цю відповідь (3 роки тому) pointer-events, майже не було підтримки браузера.
Пол

@Paulpro Я начебто подумав, що так було. Вибачте за скарга! Просто хочу переконатися, що найсвіжіша відповідь знаходиться вгорі. Дякуємо за відповідь.
розробник

6

CSS був покликаний впливати на презентацію, а не на поведінку.

Ви можете використовувати деякі JavaScript.

document.links[0].onclick = function(event) {
   event.preventDefault();
};

5

Більш ненав'язливий спосіб (припускаючи, що ви використовуєте jQuery):

HTML:

<a id="my-link" href="page.html">page link</a>

Javascript:

$('#my-link').click(function(e)
{
    e.preventDefault();
});

Перевагою цього є чистий поділ між логікою та поданням. Якщо одного дня ви вирішите, що це посилання зробить щось інше, вам не доведеться возитися з розміткою, просто JS.


4
Ви знаєте, що можете легко записати код jQuery, щоб зробити те саме, що запустилося б трохи швидше: document.getElementById('my-link').onclick = function(){ return false; };
Пол,

1
Я думаю, що більшість людей хочуть (і повинні) використовувати якісь рамки для полегшення розвитку. Автор не вказав жодного обмеження продуктивності, але jQuery мінімізовано та gzipped лише 31 Кб. Я думаю, що вигода значно переважає вартість.
pixelfreak

2
Серйозно? Те, що браузер не підтримує onclick або getElementById. Гаразд, тому IE 2 не підтримує onclick, але він також не підтримує CSS ... і я дуже сумніваюся, що ваш код jQuery там буде працювати і в IE 2.
Пол

1
Різниця в швидкості може бути невеликою, але ні, якщо ви не можете часу на завантаження бібліотеки jQuery. Я дійсно не думаю, що це гарна ідея використовувати заохочувати використання jQuery, коли вам це не потрібно, тому що люди стають залежними від нього і забувають, як писати Javascript без нього.
Пол

4
@PaulPRO Ця дискусія суперечлива без вимог автора. Кожна основа має своє призначення. Якщо він не вільно володіє JS і просто робить маму-n-pop веб-сайт і йому потрібно маніпулювати деяким елементом DOM, йому було б набагато простіше використовувати фреймворк. Ваша небажання використовувати будь-які рамки смішна. PHP написано на C. Чи означає це, що ви повинні писати C, а не використовувати PHP? iOS має UIKit, Core Data, Quartz тощо. У Flash є багато загально використовуваних сторонніх бібліотек. Знову ж таки, кожен фреймворк має своє призначення. Пурист, не вбудований власний менталітет нікому не допоможе.
pixelfreak


0

Це можна зробити в css, і це дуже просто. змінити "a" на "p". Ваше "посилання на сторінку" ні до чого не призводить, якщо ви хочете зробити це нетикувальним.

Коли ви скажете вашому css зробити курсор на цьому конкретному "p", скажіть це так:

(для цього прикладу я дав ідентифікатор "p" "приклад"

#example
{
  cursor:default;
}

Тепер ваш курсор залишиться таким самим, як у всій сторінці.


-1
<a href="page.html" onclick="return false" style="cursor:default;">page link</a>

Для цього не потрібно додавати окремої відповіді, ваш коментар до відповіді від @KaranK досить, подумав. Будь ласка, уникайте дублюваних відповідей.
MAChitgarha
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.