Có thể tạo thẻ neo HTML không thể nhấp / liên kết bằng CSS không?


132

Ví dụ: nếu tôi có cái này:

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

Có bất cứ điều gì tôi có thể sử dụng cho thuộc tính style sẽ làm cho nó để liên kết không thể nhấp được và sẽ không đưa tôi đến page.html không?

Hoặc, là tùy chọn duy nhất của tôi chỉ đơn giản là không bọc 'liên kết trang' trong thẻ neo?

Chỉnh sửa: Tôi muốn nêu lý do tại sao tôi muốn làm điều này để mọi người có thể cung cấp lời khuyên tốt hơn. Tôi đang cố gắng thiết lập ứng dụng của mình để nhà phát triển có thể chọn loại kiểu điều hướng mà họ muốn.

Vì vậy, tôi có một danh sách các liên kết và một liên kết hiện luôn được chọn và tất cả các liên kết khác không có. Đối với các liên kết không được chọn, rõ ràng tôi muốn chúng là các thẻ neo có thể nhấp bình thường. Nhưng đối với liên kết đã chọn, một số người thích liên kết đó vẫn có thể nhấp trong khi những người khác muốn làm cho liên kết đó không thể nhấp được.

Bây giờ tôi có thể dễ dàng chỉ lập trình không bọc một thẻ neo xung quanh liên kết đã chọn. Nhưng tôi cho rằng nó sẽ thanh lịch hơn nếu tôi luôn có thể bọc liên kết đã chọn trong một cái gì đó như:

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

và sau đó cho phép nhà phát triển kiểm soát kiểu liên kết thông qua CSS.



3
Nếu bạn không muốn nhấp vào nó, có thể sử dụng <span>thay thế?
David nói phục hồi Monica

Tôi sẽ phải đồng ý với David. Đừng phá vỡ mô hình UI. Kỳ vọng của người dùng là các liên kết có thể được nhấp vào. Nếu nó không thể được bấm thì nó không thực sự là một liên kết phải không?
mrtsherman

Kiểm tra stackoverflow.com/questions/2091168/disable-a-link-USE-css để biết thêm câu trả lời có thể.
Oliver

Vâng, đây là một ý tưởng khủng khiếp. Trình đọc màn hình vẫn sẽ xem liên kết dưới dạng liên kết, vì đó là liên kết. Công cụ tìm kiếm cũng vậy. Trong thực tế, bất cứ điều gì hiểu HTML. Đừng làm điều này. Không có gì "thanh lịch" về nó.
Paul D. Chờ

Câu trả lời:


267

Bạn có thể sử dụng css này:

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

Và sau đó gán lớp cho mã html của bạn:

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

Nó làm cho liên kết không thể nhấp và kiểu con trỏ là một mũi tên, không phải là bàn tay như các liên kết có.

hoặc sử dụng kiểu này trong html:

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

nhưng tôi đề nghị cách tiếp cận đầu tiên.


Tôi có thể xác nhận điều này hoạt động trên phiên bản Ubuntu / Chrome của Ubuntu. Tự hỏi nếu nó sẽ hoạt động trên IE trên Windows.
JohnMerlino

3
Chìa khóa trong giải pháp này là : pointer-events. Ở đây liên kết cho bảng tương thích
masegaloeh

@JohnMerlino: không hoạt động trong IE9. Xem thêm tại liên kết của masegaloeh với bảng tương thích
Howie


Tôi không nghĩ con trỏ: mặc định là cần thiết. Miễn là bạn có các sự kiện con trỏ: không, điều đó dường như hoạt động.
kloddant

51

Điều đó không dễ thực hiện với CSS, vì nó không phải là ngôn ngữ hành vi (tức là JavaScript), cách dễ dàng duy nhất là sử dụng sự kiện OnClick JavaScript trên neo của bạn và trả về nó là sai, đây có thể là mã ngắn nhất bạn có thể sử dụng cho điều đó:

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

2
@Mike Điều này làm cho nhấp chuột không làm gì, nhưng nút vẫn trông có thể nhấp.
acostache

1
@acostache bằng cách sử dụng style = "con trỏ: mặc định;" sẽ giúp với con trỏ
John

4
Câu hỏi là: "sử dụng CSS", vì vậy đây là một câu trả lời hay, nhưng không phải là câu trả lời đúng.
Roman Holzner

Tốt hơn là sử dụng css thay vì onclick = "return false" vì 3 lý do chính: 1- Với css, bạn có thể thay đổi con trỏ chuột liên kết mặc định thành mũi tên mặc định. 2- Đó là js gây khó chịu. 3- Điều đó thực sự trả về một giá trị, bạn không muốn trả về false mỗi khi bạn nhấp vào liên kết.
Diego Unanue

11

Có .. Có thể sử dụng css

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

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

Đây là cách sạch nhất, nhưng một điều lưu ý: nó chỉ được hỗ trợ trên IE11 + caniuse.com
pixelfreak

8

Hoặc hoàn toàn là HTML và CSS không có sự kiện:

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

1
-1 vì đây là một cách khá phức tạp / khó hiểu để giải quyết vấn đề. Nó cũng không thực sự làm những gì câu hỏi yêu cầu (làm cho liên kết không hoạt động). Nó chỉ bao gồm các liên kết với một yếu tố vô hình. Câu trả lời của Diego sạch sẽ hơn nhiều.
phát triển

@ phát triển Tôi nghĩ rằng câu trả lời của Diego cũng tốt hơn và nên được bình chọn cao hơn và được chấp nhận. Tuy nhiên, khi tôi viết câu trả lời này (3 năm trước) pointer-eventsgần như không có trình duyệt hỗ trợ.
Paul

@Paulpro Tôi sắp xếp đó là trường hợp. Xin lỗi vì downvote! Chỉ muốn đảm bảo câu trả lời cập nhật nhất là trên đầu. Cảm ơn vì sự trả lời.
phát triển

6

CSS được thiết kế để ảnh hưởng đến việc trình bày, không phải hành vi.

Bạn có thể sử dụng một số JavaScript.

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

5

Một cách khó hiểu hơn (giả sử bạn sử dụng jQuery):

HTML:

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

Javascript:

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

Ưu điểm của việc này là sự tách biệt rõ ràng giữa logic và trình bày. Nếu một ngày nào đó bạn quyết định rằng liên kết này sẽ làm một cái gì đó khác, bạn không phải gặp rắc rối với việc đánh dấu, chỉ là JS.


4
Bạn biết rằng bạn có thể dễ dàng viết mã không phải jQuery để làm điều tương tự sẽ chạy nhanh hơn một chút: document.getElementById('my-link').onclick = function(){ return false; };
Paul

1
Tôi nghĩ rằng hầu hết mọi người muốn (và nên) sử dụng một số loại khung để dễ dàng phát triển. Tác giả đã không chỉ định bất kỳ hạn chế hiệu năng nào, nhưng jQuery đã rút gọn và được nén chỉ là 31KB. Tôi nghĩ rằng lợi ích vượt xa chi phí.
pixelfreak

2
Nghiêm túc? Trình duyệt nào không hỗ trợ onclick hoặc getEuityById. Được rồi, vì vậy IE 2 không hỗ trợ onclick, nhưng nó cũng không hỗ trợ CSS ... và tôi rất nghi ngờ mã jQuery của bạn sẽ hoạt động trong IE 2.
Paul

1
Chênh lệch tốc độ có thể nhỏ, nhưng không phải nếu bạn không thể tải xuống thư viện jQuery. Tôi thực sự không nghĩ rằng nên sử dụng khuyến khích sử dụng jQuery khi bạn không cần, vì mọi người trở nên phụ thuộc vào nó và quên cách viết Javascript mà không có nó.
Paul

4
@PaulPRO Cuộc thảo luận này không có yêu cầu của tác giả. Mỗi khung có mục đích của nó. Nếu anh ta không rành về JS và chỉ làm một trang web mẹ và cần thao tác một số phần tử DOM, anh ta sẽ dễ dàng sử dụng một khung công tác hơn. Sự miễn cưỡng của bạn trong việc sử dụng bất kỳ khuôn khổ là vô lý. PHP được viết bằng C. Điều đó có nghĩa là bạn nên viết C và không sử dụng PHP? iOS có UIKit, Core Data, Quartz, v.v. Flash có hàng tấn thư viện bên thứ 3 thường sử dụng. Một lần nữa, mỗi khung có mục đích của nó. Một tâm lý thuần túy, không xây dựng trong nhà sẽ không giúp được ai.
pixelfreak

2

Câu trả lời là:

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

0

Nó có thể được thực hiện trong css và nó rất đơn giản. thay đổi "a" thành "p". "Liên kết trang" của bạn sẽ không dẫn đến một nơi nào đó nếu bạn muốn làm cho nó không thể xem được.

Khi bạn bảo css của bạn thực hiện hành động di chuột trên "p" cụ thể này, hãy nói với nó điều này:

(ví dụ này tôi đã đưa ra ID "p" "ví dụ")

#example
{
  cursor:default;
}

Bây giờ con trỏ của bạn sẽ giữ nguyên như trên tất cả các trang.


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

Không cần phải thêm một câu trả lời riêng cho điều này, nhận xét của bạn về câu trả lời của @KaranK là đủ, nghĩ. Hãy tránh các câu trả lời trùng lặp.
MAChitgarha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.