CSS để lấy con trỏ (kéo và thả)


170

Tôi có một ứng dụng web JavaScript nơi người dùng cần lấy nền để di chuyển toàn bộ màn hình. Vì vậy, tôi muốn con trỏ thay đổi khi chúng di chuột qua nền. Các con trỏ CSS -moz-grab-moz-grabbinglý tưởng cho việc này. Tất nhiên, chúng chỉ hoạt động trong Firefox ... có con trỏ tương đương cho các trình duyệt khác không? Tôi có phải làm một cái gì đó tùy chỉnh hơn một chút so với con trỏ CSS tiêu chuẩn không?

Câu trả lời:


106

Tôi nghĩ movecó lẽ sẽ là giá trị con trỏ tiêu chuẩn gần nhất cho những gì bạn đang làm:

di chuyển
Chỉ ra một cái gì đó sẽ được di chuyển.


1
Tôi thấy biểu tượng di chuyển, nghĩ rằng biểu tượng lấy là tốt hơn. Nhưng bây giờ bạn đã chỉ ra w3c cho rằng con trỏ "Chỉ ra một cái gì đó sẽ được di chuyển", nó có ý nghĩa nhất. Cảm ơn.
tại.

2
@at: Bạn có thể chỉ định nhiều con trỏ trong danh sách được phân cách bằng dấu phẩy và tác nhân người dùng nên sử dụng cái đầu tiên nó hiểu. Vì vậy, bạn có thể sử dụng các -moz * và "di chuyển" làm dự phòng.
mu quá ngắn

14
@muistooshort bạn có chắc danh sách dấu phẩy vẫn hoạt động không? Tôi đang sử dụng cursor:move; cursor:-webkit-grab; cursor:-moz-grab; cursor:grab;với ưu tiên cuối cùng.
Bob Stein

2
@ BobStein-VisiBone: Tôi nghĩ rằng có thể đã có một số nhầm lẫn trên đó một vài năm trước đây. AFAIK danh sách dấu phẩy hoạt động nếu bạn chỉ định nhiều định dạng như cursor: url(example.svg#linkcursor), url(hyper.cur), pointerthay vì nhiều giá trị có thể. Tôi nghĩ rằng cách tiếp cận của bạn có thể là cần thiết.
mu quá ngắn

417

Trong trường hợp bất kỳ ai khác vấp phải câu hỏi này, đây có lẽ là điều bạn đang tìm kiếm:

.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
vì một số lý do, 'lấy' chỉ xuất hiện khi tôi thả chuột. Có ai biết vì sao lại thế này không?
Jona

@Jona tôi đoán là bạn đã không thêm grabbablelớp vào bất kỳ yếu tố nào có thể lấy được và bạn đang chuyển đổi lớp khi chúng bị kéo.
Emile Bergeron

1
câu trả lời mở rộng tốt đẹp, cảm ơn vì đã thêm bit "lấy" thêm. liên lạc tốt đẹp. :)
scotself

1
Đối với bất kỳ ai gặp rắc rối với giải pháp này, tôi phải đặt grabcon trỏ trên :hoverthay vì bộ chọn đơn giản, ví dụ như .grabbable:hovertrong ví dụ trên.
Markus Amalthea Magnuson

@Jona thêm các kiểu này cho phụ huynh <ul>thay vì <li>trong trường hợp của tôi đã giải quyết được vấn đề
Arthur Tarasov

52

CSS3 grabgrabbinghiện được phép cho các giá trị cursor. Để cung cấp một số dự phòng cho khả năng tương thích giữa nhiều trình duyệt 3 bao gồm các tệp con trỏ tùy chỉnh, một giải pháp hoàn chỉnh sẽ giống như sau:

.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;
}

Cập nhật 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
Bài đăng của bạn là một bản sao của J.Steve's

9
@ user2230470 Nó khác nhau ở hai điểm quan trọng: Thứ nhất, nó cung cấp hình ảnh con trỏ cho các trình duyệt không hỗ trợ grab, nhưng hình ảnh con trỏ. Thứ hai, đó là cách tốt nhất để có cú pháp tiêu chuẩn sau các giá trị tiền tố của nhà cung cấp.
Volker E.

có thật không?! làm thế nào mà? Ngoài ra, nơi tôi có thể tìm thêm thông tin về các thực hành tiêu chuẩn gần giống như vậy.

8
@ user2230470 - bởi vì trong trường hợp trình duyệt hỗ trợ 2 hành vi trong đó hành vi có tiền tố có thể được thực hiện một chút trước khi hoàn thành tiêu chuẩn (và do đó có thể hành động khác), bạn muốn nó sử dụng tiêu chuẩn ... và bất kỳ định nghĩa nào cũng xuất hiện LAST là trình duyệt sẽ sử dụng. Do đó, tiêu chuẩn nên đi cuối cùng.
Jimbo Jonny

3
images/grab.curmột URL ví dụ cho một hình ảnh mà tôi cần lưu trữ trên máy chủ web của mình, hay đó là một thứ IE kỳ diệu?
Jon z

11

"Nhiều tùy chỉnh" hơn các con trỏ CSS có nghĩa là một loại plugin, nhưng bạn hoàn toàn có thể chỉ định các con trỏ của riêng mình bằng CSS. Tôi nghĩ rằng danh sách này có những gì bạn muốn:

.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>

Nguồn: Thuộc tính con trỏ CSS @ W3Schools


5

Bạn có thể tạo các con trỏ của riêng mình và đặt chúng làm con trỏ bằng cách sử dụng cursor: url('path-to-your-cursor');hoặc tìm Firefox và sao chép chúng (phần thưởng: giao diện đẹp nhất quán trong mọi trình duyệt).


5

Tôi có thể bị trễ, nhưng bạn có thể thử đoạn mã sau, hoạt động với tôi cho Kéo và Thả.

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

}

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

Bạn có thể sử dụng các hình ảnh dưới đây trong URL ở trên. Hãy chắc chắn rằng đó là một hình ảnh trong suốt PNG. Nếu không, hãy tải xuống từ google.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


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.