カーソルをつかむためのCSS(ドラッグ&ドロップ)


170

画面全体を移動するためにユーザーが背景を取得する必要があるJavaScript Webアプリケーションがあります。そのため、背景の上にカーソルを置いたときにカーソルが変化するようにします。CSSのカーソルは、このために理想的です。もちろん、それらはFirefoxでのみ機能します...他のブラウザに対応するカーソルはありますか?標準のCSSカーソルよりも少しカスタムする必要がありますか?-moz-grab-moz-grabbing

回答:


106

moveはおそらくあなたがやっていることに最も近い標準カーソル値になると思います:

move
何かを移動することを示します。


1
移動アイコンを見て、グラブアイコンの方がいいと思いました。しかし、あなたが指摘したように、w3cはカーソルが「何かが移動されることを示している」と見なしているので、最も理にかなっています。ありがとう。
に。

2
@at:コンマ区切りのリストで複数のカーソルを指定できます。ユーザーエージェントは、最初に認識したものを使用する必要があります。したがって、-moz *を使用して、「移動」をフォールバックとして使用できます。
muが短すぎる

14
@muistooshortあなたはコンマリストがまだ機能することを確信していますか?私はcursor:move; cursor:-webkit-grab; cursor:-moz-grab; cursor:grab;最後に最も好んで使用しています。
ボブスタイン

2
@ BobStein-VisiBone:数年前に混乱があったと思います。あなたは複数指定している場合私の知る限りでは、コンマリストは、作品のフォーマットが好きなcursor: url(example.svg#linkcursor), url(hyper.cur), pointer複数の可能な値ではなく。アプローチが必要かもしれませんね。
muは短すぎます

417

他の誰かがこの質問に遭遇した場合、これはおそらくあなたが探していたものです:

.grabbable {
    cursor: move; /* fallback if grab cursor is unsupported */
    cursor: grab;
    cursor: -moz-grab;
    cursor: -webkit-grab;
}

 /* (Optional) Apply a "closed-hand" cursor during drag operation. */
.grabbable:active {
    cursor: grabbing;
    cursor: -moz-grabbing;
    cursor: -webkit-grabbing;
}

44
何らかの理由で、マウスを離したときにのみ「グラブ」が表示されます。これはなぜですか?
ジョナ2016年

@Jona私の推測では、grabbableグラブできる要素にクラスを追加しておらず、ドラッグされているときにクラスを切り替えています。
エミールベルジェロン

1
余分な「グラブ」ビットを追加してくれてありがとう。いい感じです。:)
scotself

1
このソリューションで問題が発生した場合は、プレーンセレクターではなく、上の例のようにgrabカーソルを設定する必要がありました。:hover.grabbable:hover
Markus Amalthea Magnuson

@Jona が私の場合<ul><li>はなく親にこれらのスタイルを追加することで問題が解決しました
Arthur Tarasov

52

CSS3 grabgrabbingに許可された値cursor。カスタムカーソルファイルを含むブラウザー間の互換性3にいくつかのフォールバックを提供するには、完全なソリューションは次のようになります。

.draggable {
    cursor: move; /* fallback: no `url()` support or images disabled */
    cursor: url(images/grab.cur); /* fallback: Internet Explorer */
    cursor: -webkit-grab; /* Chrome 1-21, Safari 4+ */
    cursor:    -moz-grab; /* Firefox 1.5-26 */
    cursor:         grab; /* W3C standards syntax, should come least */
}

.draggable:active {
    cursor: url(images/grabbing.cur);
    cursor: -webkit-grabbing;
    cursor:    -moz-grabbing;
    cursor:         grabbing;
}

アップデート2019-10-07:

.draggable {
    cursor: move; /* fallback: no `url()` support or images disabled */
    cursor: url(images/grab.cur); /* fallback: Chrome 1-21, Firefox 1.5-26, Safari 4+, IE, Edge 12-14, Android 2.1-4.4.4 */
    cursor: grab; /* W3C standards syntax, all modern browser */
}

.draggable:active {
    cursor: url(images/grabbing.cur);
    cursor: grabbing;
}

1
あなたの投稿はJ.Steveの複製です

9
@ user2230470これは2つの重要な点が異なります。1つ目はgrab、がサポートしていないブラウザにカーソル画像を提供しますが、カーソル画像を提供します。次に、ベンダーが値をプレフィックスした後に標準構文を使用することがベストプラクティスです。
Volker E.

本当に?!どうして?また、そのような標準的なプラクティスについての詳細情報はどこにありますか?

8
@ user2230470-ブラウザが2つの動作をサポートする場合、接頭辞付きのものが標準的なものの最終化の少し前に実装されている可能性があるため(つまり、異なる動作をする可能性があるため)、標準的なものを使用する必要があります... LASTは、ブラウザーが使用するものです。したがって、標準的なものが最後になります。
神保ジョニー

3
images/grab.cur、私は私のウェブサーバ上でホストする必要があることをイメージするための例のURL、またはいくつかの魔法のIEのものということでしょうか?
Jon z

11

CSSカーソルより「よりカスタム」とは、あるタイプのプラグインを意味しますが、CSSを使用して独自のカーソルを完全に指定できます。私はこのリストがあなたが望むものを持っていると思います:

.alias {cursor: alias;}
.all-scroll {cursor: all-scroll;}
.auto {cursor: auto;}
.cell {cursor: cell;}
.context-menu {cursor: context-menu;}
.col-resize {cursor: col-resize;}
.copy {cursor: copy;}
.crosshair {cursor: crosshair;}
.default {cursor: default;}
.e-resize {cursor: e-resize;}
.ew-resize {cursor: ew-resize;}
.grab {cursor: grab;}
.grabbing {cursor: grabbing;}
.help {cursor: help;}
.move {cursor: move;}
.n-resize {cursor: n-resize;}
.ne-resize {cursor: ne-resize;}
.nesw-resize {cursor: nesw-resize;}
.ns-resize {cursor: ns-resize;}
.nw-resize {cursor: nw-resize;}
.nwse-resize {cursor: nwse-resize;}
.no-drop {cursor: no-drop;}
.none {cursor: none;}
.not-allowed {cursor: not-allowed;}
.pointer {cursor: pointer;}
.progress {cursor: progress;}
.row-resize {cursor: row-resize;}
.s-resize {cursor: s-resize;}
.se-resize {cursor: se-resize;}
.sw-resize {cursor: sw-resize;}
.text {cursor: text;}
.url {cursor: url(https://www.w3schools.com/cssref/myBall.cur),auto;}
.w-resize {cursor: w-resize;}
.wait {cursor: wait;}
.zoom-in {cursor: zoom-in;}
.zoom-out {cursor: zoom-out;}
<h1>The cursor Property</h1>
<p>Hover mouse over each to see how the cursor looks</p>

<p class="alias">cursor: alias</p>
<p class="all-scroll">cursor: all-scroll</p>
<p class="auto">cursor: auto</p>
<p class="cell">cursor: cell</p>
<p class="context-menu">cursor: context-menu</p>
<p class="col-resize">cursor: col-resize</p>
<p class="copy">cursor: copy</p>
<p class="crosshair">cursor: crosshair</p>
<p class="default">cursor: default</p>
<p class="e-resize">cursor: e-resize</p>
<p class="ew-resize">cursor: ew-resize</p>
<p class="grab">cursor: grab</p>
<p class="grabbing">cursor: grabbing</p>
<p class="help">cursor: help</p>
<p class="move">cursor: move</p>
<p class="n-resize">cursor: n-resize</p>
<p class="ne-resize">cursor: ne-resize</p>
<p class="nesw-resize">cursor: nesw-resize</p>
<p class="ns-resize">cursor: ns-resize</p>
<p class="nw-resize">cursor: nw-resize</p>
<p class="nwse-resize">cursor: nwse-resize</p>
<p class="no-drop">cursor: no-drop</p>
<p class="none">cursor: none</p>
<p class="not-allowed">cursor: not-allowed</p>
<p class="pointer">cursor: pointer</p>
<p class="progress">cursor: progress</p>
<p class="row-resize">cursor: row-resize</p>
<p class="s-resize">cursor: s-resize</p>
<p class="se-resize">cursor: se-resize</p>
<p class="sw-resize">cursor: sw-resize</p>
<p class="text">cursor: text</p>
<p class="url">cursor: url</p>
<p class="w-resize">cursor: w-resize</p>
<p class="wait">cursor: wait</p>
<p class="zoom-in">cursor: zoom-in</p>
<p class="zoom-out">cursor: zoom-out</p>

ソース:CSSカーソルプロパティ@ W3Schools


5

独自のカーソルを作成し、を使用してそれらをカーソルとして設定するcursor: url('path-to-your-cursor');か、Firefoxのカーソルを見つけてコピーすることができます(ボーナス:すべてのブラウザで一貫した見栄え)。


5

遅くなるかもしれませんが、ドラッグアンドドロップで機能する次のコードを試すことができます。

.dndclass{
    cursor: url('../images/grab1.png'), auto; 

}

.dndclass:active {
    cursor: url('../images/grabbing1.png'), auto;
}

上のURLで下の画像を使用できます。PNG透過画像であることを確認してください。そうでない場合は、Googleからダウンロードしてください。

ここに画像の説明を入力してください ここに画像の説明を入力してください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.