CSSのみを使用してリンクを無効にする方法は?


844

CSSを使用してリンクを無効にする方法はありますか?

呼び出されたクラスがcurrent-pageあり、このクラスへのリンクを無効にして、クリックしてもアクションが発生しないようにしたい。


42
グーグルの多くの後、私はこの質問に対して完璧な答えを得ましたcss-tricks.com/pointer-events-current-nav
RSK

1
リンクを使用する必要があるかどうかは、表現上の価値よりも意味論的です。CSSで無効にするのではなくhidden、任意のHTML要素に適用可能な属性を利用して無効にする必要があります。次に、CSSを使用して、たとえばa[hidden]アンカーを選択し、それに応じてスタイルを設定できます。
16

@amnですが、ブラウザーが非表示の属性を持つ要素を表示するとは思わないので、スタイリングは無効になります。
user1794469 2017年

1
@ user1794469彼らはあなたが使用して、CSSで、それらを指示する場合はdisplay: block、インスタンスまたはのためのいくつかの他の値のために、display。ただしhidden、常に適用できるわけではありません。無関係な要素が対象であり、質問からリンクを無効にする必要がある理由が明確ではありません。これはおそらくXY問題のケースです。
午前

回答:


1348

答えはすでに質問のコメントにあります。より見やすくするために、私はこのソリューションをここにコピーしています:

.not-active {
  pointer-events: none;
  cursor: default;
  text-decoration: none;
  color: black;
}
<a href="link.html" class="not-active">Link</a>

ブラウザのサポートについては、https://caniuse.com/#feat=pointer-eventsを参照してください。IEをサポートする必要がある場合は、回避策があります。この答えを見てください

警告:pointer-events非SVG要素のCSSでの使用は実験的なものです。この機能は、CSS3 UIドラフト仕様の一部でしたが、多くの未解決の問題により、CSS4に延期されました。


36
また、これはリンクにタブで移動してから入力することを避けません。
Jono

4
少しスタイルを設定すると、ユーザーは無効になっていることがわかります。不透明度を
追加

4
これは、IE 11を含むすべての最新ブラウザーで機能するようになりました。IE10以下のサポートが必要な場合は、このようなJavaScriptポリフィルを使用できます。
Keavon 14

26
重要な注意:これにより、実際のリンク自体ではなく、クリックのみが無効になります。タブ+ Enterを使用してリンクを「クリック」することもできます。
Pikamander2 2014

11
の使用pointer-events: none;は完璧ではありません。また、表示title="…"やツールチップに必要なホバーなどの他のイベントを無効にします。JSソリューションの方が(event.preventDefault();CSS を使用して)優れており、CSS(cursor: default; opacity: 0.4;)とリンクが無効になっている理由を説明するツールチップを見つけました。
Quinn Comendant、2015

140

.disabled {
  pointer-events: none;
  cursor: default;
  opacity: 0.6;
}
<a href="#" class="disabled">link</a>


ディスプレイをインラインブロック(またはインライン以外のもの)に設定する必要がある場合があります。
dev_masta 16

素敵な、しかし用心ポインタ・イベントブラウザのサポート(すなわち<IE11):caniuse.com/#search=pointer-events
ダレン

1
スタイルについては、に変更pointer-events:none;してみてくださいpointer-events:unset;。その後、カーソルをに変更できますcursor:not-allowed;。これは、ユーザーに何が起こっているかについてより良い手がかりを与えます。現在のところ、FF、Edge、Chrome、Opera、Braveで機能しているようです。
Sablefoste 2017

@Sablefoste Chrome 60ではそれは機能しません。カーソルは確かnot-allowedにですが、リンクはクリック可能なままです。
soupdog

122

CSSは、何かのスタイルを変更するためにのみ使用できます。おそらく純粋なCSSでできる最善の方法は、リンクを完全に隠すことです。

あなたが本当に必要なのはいくつかのJavaScriptです。ここでは、jQueryライブラリを使用して必要な操作を行う方法を示します。

$('a.current-page').click(function() { return false; });

21
デフォルトの動作を防ぐことを忘れないでくださいfunction(ev){ ev.preventDefault(); ev.stopPropagation(); return false;
ldiqual

5
@イディクアル、return falseそれをします
nickf

1
return falsehref属性が属性を使用して設定されている場合にのみ機能します
Justin

また、このバージョンを使用して、:hoverや:focusなどの他のポインターイベントを維持しながらクリックを無効にすることができます。トップ回答!
チャーリータプマン

これはすべてのブラウザで機能しますが、リンクをクリックすることのみを無効にしました。多くのユーザーは、コンテキストメニューから、またはマウスの中央ボタンを使用してリンクを開くことに慣れていることに注意してください。
Alexandru Severin 2017

33

CSSはそれを行うことができません。CSSはプレゼンテーション専用です。オプションは次のとおりです。

  • タグにhref属性を含めないでください<a>
  • JavaScriptを使用して、を含むアンカー要素を見つけ、それに応じclasshrefまたはonclick属性を削除します。jQueryはそれを支援します(NickFは、似ているがより良い方法を行う方法を示しました)。

30
不正解です-ポインタイベント:なし。cssはそれを無効にすることができます。
pie6k 2015年

思わなかった!それとも2010年にはまだその属性は存在しなかったのでしょうか?いずれにせよ、pointer-events: noneマウスイベントを無効にできることは事実です。ただし、基になるリンクは無効になりません。Chrome 81で試したテストでは、そのようなリンクにタブで移動してReturnキーを入力することで、そのようなリンクをアクティブにすることができます。
ケビンコナー

31

ブートストラップ無効リンク

<a href="#" class="btn btn-primary btn-lg disabled" role="button">Primary link</a>

<a href="#" class="btn btn-default btn-lg disabled" role="button">Link</a>

ブートストラップ無効ボタンですが、リンクのように見えます

<button type="button" class="btn btn-link">Link</button>

19

href属性を次のように設定できますjavascript:void(0)

.disabled {
  /* Disabled link style */
  color: black;
}
<a class="disabled" href="javascript:void(0)">LINK</a>


2
@nickfはtrueですが、これは優れたソリューションであり、無効に設定されている場合、貧弱なデフォルトのIEスタイルに依存するよりも優れています。
SausageFingers

それよりも少し複雑になると思います。これがソリューションsnook.ca/archives/javascript/clear_links_to_1
Mike Gifford

12

私が使用した:

.current-page a:hover {
pointer-events: none !important;
}

そして十分ではなかった。一部のブラウザでは、リンクがまだ点滅して表示されていました。

追加する必要がありました:

.current-page a {
cursor: text !important;
}

3
a[disabled]:active { pointer-events: none !important; }良いと思います。
宮田正本


10

CSSのみにする場合は、無効化ロジックをCSSで定義する必要があります。

CSS定義のロジックを移動するには、属性セレクターを使用する必要があります。ここではいくつかの例を示します :

正確なhrefを持つリンクを無効にします。 =

次のように特定のhref値を含むリンクを無効にすることを選択できます。

<a href="//website.com/exact/path">Exact path</a>

[href="https://stackoverflow.com//website.com/exact/path"]{
  pointer-events: none;
}

パスの一部を含むリンクを無効にします。 *=

ここでは、/keyword/パスに含まれているリンクは無効になります

<a href="//website.com/keyword/in/path">Contains in path</a>

[href*="/keyword/"]{
  pointer-events: none;
}

次で始まるリンクを無効にします。 ^=

[attribute^=value]オペレータの目標、特定の値で始まる属性。Webサイトとルートパスを破棄できます。

<a href="//website.com/begins/with/path">Begins with path</a>

[href^="//website.com/begins/with"]{
  pointer-events: none;
}

これを使用して、https以外のリンクを無効にすることもできます。例えば ​​:

a:not([href^="https://"]){
  pointer-events: none;
}

次で終わるリンクを無効にします。 $=

[attribute$=value]オペレータは、特定の値で終わる、その属性をターゲットにしています。ファイル拡張子を破棄すると便利です。

<a href="/path/to/file.pdf">Link to pdf</a>

[href$=".pdf"]{
  pointer-events: none;
}

または他の属性

CSSは任意のHTML属性をターゲットにできます。可能性がありreltargetdata-customようにと...

<a href="#" target="_blank">Blank link</a>

[target=_blank]{
  pointer-events: none;
}

属性セレクターの組み合わせ

複数のルールを連鎖させることができます。すべての外部リンクを無効にしたいが、ウェブサイトを指しているリンクは無効にしたいとしましょう:

a[href*="//"]:not([href*="my-website.com"]) {
    pointer-events: none;
}

または、特定のWebサイトのPDFファイルへのリンクを無効にします。

<a href="//website.com/path/to/file.jpg">Link to image</a>

[href^="//website.com"][href$=".jpg"] {
  color: red;
}

ブラウザのサポート

属性セレクターはIE7以降でサポートされています。:not()IE9以降のセレクタ。


無効化されたセレクターを使用してリンクを無効化するにはどうすればよいですか?例:<a class="test" disabled href="3"> test </a> a:disabled {cursor:not-allowed; }
ecasper

10

CSSを使用してこれを実行できる1つの方法は、CSSをラッピングに設定して、非表示にするように設定し、div他の何かがそれを実行することです。

例えば:

<div class="disabled">
    <a class="toggleLink" href="wherever">blah</a>
    <span class="toggleLink">blah</span
</div>

のようなCSSで

.disabled a.toggleLink { display: none; }
span.toggleLink { display: none; }
.disabled span.toggleLink { display: inline; }

実際にをオフにaするにはhref、クリックイベントまたはを置き換える必要があります。

PS:明確にするために、これはかなり整然としたソリューションだと思います。SEOにとっても、それは最良ではありませんが、純粋にCSSを使用するのが最良だと思います。


8

これを試して:

<style>
.btn-disable {
    display:inline-block;
    pointer-events: none;       
}
</style>

6

ポインタ・イベントの CSSホバー/アクティブ状態、JavaScriptでクリック/タップイベント、カーソルが表示されているかどうかを含めて-プロパティは、マウス/タッチイベントにどのようにHTML要素の応答を制御することができます。

これがLink無効にする唯一の方法ではありませんが、IE10 +とすべての新しいブラウザーで機能する適切なCSSの方法です。

.current-page {
  pointer-events: none;
  color: grey;
}
<a href="#" class="current-page">This link is disabled</a>


4

インターネットで検索したところ、これ以上のものはありませんでした。基本的にボタンクリック機能を無効にするには、次のようにjQueryを使用してCSSスタイルを追加します。

$("#myLink").css({ 'pointer-events': 'none' });

次に、それを再び有効にするには、これを実行します

$("#myLink").css({ 'pointer-events': '' });

FirefoxとIE 11で確認したところ、うまくいきました。


3
これにはjQueryは必要ありません。CSSで自分で設定できます。
Bram Vanroy、16

3

あなたはこのCSSを使うことができます:

a.button,button {
    display: inline-block;
    padding: 6px 15px;
    margin: 5px;
    line-height: 1.42857143;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    -ms-touch-action: manipulation;
    touch-action: manipulation;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background-image: none;
    border: 1px solid rgba(0, 0, 0, 0);
    border-radius: 4px;
    -moz-box-shadow: inset 0 3px 20px 0 #cdcdcd;
    -webkit-box-shadow: inset 0 3px 20px 0 #cdcdcd;
    box-shadow: inset 0 3px 20px 0 #cdcdcd;
}

a[disabled].button,button[disabled] {
    cursor: not-allowed;
    opacity: 0.4;
    pointer-events: none;
    -webkit-touch-callout: none;
}

a.button:active:not([disabled]),button:active:not([disabled]) {
    background-color: transparent !important;
    color: #2a2a2a !important;
    outline: 0;
    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
}
<button disabled="disabled">disabled!</button>
<button>click me!</button>
<a href="http://royansoft.com" disabled="disabled" class="button">test</a>
<a href="http://royansoft.com" class="button">test2</a>


2

ソリューションを投稿してくださった皆さんに感謝し、複数のアプローチを組み合わせて、より高度なdisabled機能をいくつか提供しました。 ここに要点があります、そしてコードは以下です。

This provides for multiple levels of defense so that Anchors marked as disable actually behave as such.
Using this approach, you get an anchor that you cannot:
  - click
  - tab to and hit return
  - tabbing to it will move focus to the next focusable element
  - it is aware if the anchor is subsequently enabled


1.  Include this css, as it is the first line of defense.  This assumes the selector you use is 'a.disabled'
    a.disabled {
      pointer-events: none;
      cursor: default;
    }

 2. Next, instantiate this class such as (with optional selector):
    $ ->
      new AnchorDisabler()

これがcoffescriptクラスです:

class AnchorDisabler
  constructor: (selector = 'a.disabled') ->
    $(selector).click(@onClick).keyup(@onKeyup).focus(@onFocus)

  isStillDisabled: (ev) =>
    ### since disabled can be a class or an attribute, and it can be dynamically removed, always recheck on a watched event ###
    target = $(ev.target)
    return true if target.hasClass('disabled')
    return true if target.attr('disabled') is 'disabled'
    return false

  onFocus: (ev) =>
    ### if an attempt is made to focus on a disabled element, just move it along to the next focusable one. ###
    return unless @isStillDisabled(ev)

    focusables = $(':focusable')
    return unless focusables

    current = focusables.index(ev.target)
    next = (if focusables.eq(current + 1).length then focusables.eq(current + 1) else focusables.eq(0))

    next.focus() if next


  onClick: (ev) =>
    # disabled could be dynamically removed
    return unless @isStillDisabled(ev)

    ev.preventDefault()
    return false

  onKeyup: (ev) =>

    # 13 is the js key code for Enter, we are only interested in disabling that so get out fast
    code = ev.keyCode or ev.which
    return unless code is 13

    # disabled could be dynamically removed
    return unless @isStillDisabled(ev)

    ev.preventDefault()
    return false

こんにちは!!、答えはそうではCSSないJSか何かです!
Mehdi Dehghani 2017

1

リンクをカバーするように別の要素のサイズを変更することもできます(右のz-indexを使用)。これにより、クリックが「食べられます」。

(ブラウザーウィンドウがモバイルサイズの場合、「レスポンシブ」設計によりH2がリンクをカバーするため、突然非アクティブになったリンクに問題があったため、これを偶然発見しました。)


正しいですが、キーボードナビゲーションは対象外です。
AndFisher 2016

1

デモはこちら
これをお試しください

$('html').on('click', 'a.Link', function(event){
    event.preventDefault();
});

1
あなたのフィドルは機能しません!リンクはChromeで引き続きアクティブです。
Matt Byrne、2013年

このコードを修正するには、on()に渡される最初の2つのパラメーターを交換します。$( 'html')。on( 'click'、 'a.Link'、function(event){event.preventDefault();});
2C-B

1
こんにちは!!、答えはそうではCSSないJSか何かです!
Mehdi Dehghani 2017

0

別のトリックは、その上に非表示の要素を配置することです。これにより、ホバー効果も無効になります

.myButton{
    position: absolute;
    display: none;
}

.myButton::after{ 
    position: absolute;
    content:"";
    height:100%;
    width:100%;
    top:0;
    left:0;
}

-1

CSSでそれを行うことが可能です

.disabled{
  cursor:default;
  pointer-events:none;
  text-decoration:none;
  color:black;
}
<a href="https://www.google.com" target="_blank" class="disabled">Google</a>

で参照してください:

text-decoration: none;color: black;は必要ありませんが、リンクがプレーンテキストのように見えることに注意してください。


-1

pointer-events:none リンクを無効にします:

.disabled {
       pointer-events:none;
}
<a href="#" class="disabled">link</a>

1
これは良いことですが、もちろん、ユーザーがキーボードを使用している場合は機能しません:(
gztomas

-1

<a href="#!">1) Link With Non-directed url</a><br><br>

<a href="#!" disabled >2) Link With with disable url</a><br><br>


2
<a>タグには無効な属性がありません。
Hexodus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.