CSS สำหรับเคอร์เซอร์โลภ (ลากและวาง)


170

ฉันมี webapp JavaScript ที่ผู้ใช้ต้องการคว้าพื้นหลังเพื่อย้ายทั้งหน้าจอไปรอบ ๆ ดังนั้นฉันต้องการให้เคอร์เซอร์เปลี่ยนเมื่อพวกเขาลอยอยู่เหนือพื้นหลัง -moz-grabและ-moz-grabbingCSS เคอร์เซอร์ที่เหมาะสำหรับการนี้ แน่นอนพวกเขาทำงานเฉพาะใน Firefox ... มีเคอร์เซอร์ที่เทียบเท่ากับเบราว์เซอร์อื่นหรือไม่? ฉันต้องทำอะไรที่กำหนดเองได้เล็กน้อยกว่าเคอร์เซอร์ CSS มาตรฐานหรือไม่

คำตอบ:


106

ฉันคิดว่าmoveอาจเป็นค่าเคอร์เซอร์มาตรฐานที่ใกล้เคียงที่สุดสำหรับสิ่งที่คุณทำ:

ย้าย
บ่งชี้บางสิ่งบางอย่างที่จะถูกย้าย


1
ฉันเห็นไอคอนย้ายคิดว่าไอคอนคว้านั้นดีกว่า แต่ตอนนี้คุณได้ชี้ให้เห็นว่า w3c พิจารณาว่าเคอร์เซอร์ "บ่งบอกถึงสิ่งที่จะถูกย้าย" มันสมเหตุสมผลที่สุด ขอบคุณ
ที่

2
@at: คุณสามารถระบุเคอร์เซอร์หลายรายการในรายการที่คั่นด้วยจุลภาคและตัวแทนผู้ใช้ควรใช้อันแรกที่เข้าใจ ดังนั้นคุณสามารถใช้ -moz * อันและ "ย้าย" เป็นทางเลือก
mu สั้นเกินไป

14
@muistooshort คุณแน่ใจหรือไม่ว่าเครื่องหมายจุลภาคยังคงใช้ได้ ฉันใช้cursor:move; cursor:-webkit-grab; cursor:-moz-grab; cursor:grab;กับที่ต้องการมากที่สุดล่าสุด
Bob Stein

2
@ BobStein-VisiBone: ฉันคิดว่าอาจมีความสับสนอยู่ที่นั่นสองสามปีที่ผ่านมา AFAIK รายการเครื่องหมายจุลภาคใช้งานได้หากคุณระบุหลายรูปแบบเช่น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
ด้วยเหตุผลบางอย่างการ 'โลภ' จะปรากฏเฉพาะเมื่อฉันปล่อยเมาส์ ความคิดใด ๆ ว่าทำไมถึงเป็นแบบนี้?
Jona

@ เพียงแค่ฉันเดาว่าคุณไม่ได้เพิ่มgrabbableคลาสลงในองค์ประกอบใด ๆ ที่สามารถคว้าได้และคุณกำลังสลับชั้นเมื่อพวกเขาถูกลาก
Emile Bergeron

1
คำตอบเพิ่มเติมที่ดีขอบคุณสำหรับการเพิ่มบิต "โลภ" พิเศษ สัมผัสที่ดี :)
scotself

1
สำหรับทุกคนที่มีปัญหาในการแก้ปัญหานี้ฉันต้องตั้งค่าgrabเคอร์เซอร์:hoverแทนตัวเลือกธรรมดานั่นคือ.grabbable:hoverในตัวอย่างด้านบน
Markus Amalthea Magnuson

@Jona เพิ่มสไตล์เหล่านี้ให้กับผู้ปกครอง<ul>แทนที่จะเป็น<li>ในกรณีของฉันแก้ไขปัญหาได้
Arthur Tarasov

52

CSS3 grabและได้รับอนุญาตในขณะนี้ค่าgrabbing 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's

9
@ user2230470 มันแตกต่างกันในสองจุดสำคัญ: อันดับแรกให้ภาพเคอร์เซอร์สำหรับเบราว์เซอร์ที่ไม่รองรับgrabแต่เป็นภาพเคอร์เซอร์ ประการที่สองเป็นแนวปฏิบัติที่ดีที่สุดที่จะมีไวยากรณ์มาตรฐานหลังจากค่านำหน้าผู้ขาย
Volker E.

จริงๆ?! มาทำไม นอกจากนี้ที่ฉันสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการปฏิบัติมาตรฐานคล้ายกับ

8
@ user2230470 - เพราะในกรณีที่เบราว์เซอร์รองรับ 2 พฤติกรรมที่อาจมีการใช้คำนำหน้าเล็กน้อยก่อนที่จะสรุปมาตรฐาน (และอาจทำหน้าที่แตกต่างกัน) คุณต้องการให้ใช้มาตรฐานหนึ่ง ... และนิยามอะไรก็ตาม LAST เป็นหนึ่งในเบราว์เซอร์ที่จะใช้ ดังนั้นมาตรฐานหนึ่งควรมีอายุการใช้งาน
Jimbo Jonny

3
เป็นimages/grab.curURL ตัวอย่างสำหรับรูปภาพที่ฉันต้องการให้โฮสต์บนเว็บเซิร์ฟเวอร์ของฉันหรือเป็นสิ่งที่วิเศษ 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 เคอร์เซอร์ Property @ 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

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


0

เคอร์เซอร์มือปิดไม่ใช่ 16x16 หากคุณต้องการมันในขนาดเดียวกันที่นี่คุณมีทั้งสองแบบในขนาด 16x16 พิกเซล

เปิดมือ มือปิด

หรือถ้าคุณต้องการเคอร์เซอร์ดั้งเดิม:

https://www.google.com/intl/th_ALL/mapfiles/openhand.cur https://www.google.com/intl/th_ALL/mapfiles/closedhand.cur

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.