Sfat rapid Cum să manipulați aspectul cursorului cu ajutorul CSS

În acest sfat rapid, vom învăța cum să personalizăm aspectul cursorului cu CSS. Vom schimba cursorul în săgeți pentru a facilita navigarea într-o prezentare de diapozitive. Pentru ao înțelege mai bine, vom trece prin două exemple separate.

Notă: scopul acestui articol nu este de a acoperi în mod exhaustiv cursor sintaxa proprietății. Pentru o examinare mai amănunțită, asigurați-vă că verificați resursele de la sfârșitul tutorialului.

Exemplul nr. 1

Pentru primul exemplu, vom discuta despre schimbarea imaginii cursorului în funcție de poziția mouse-ului.

Iată demo-ul pe care îl vom construi în acțiune:

1. HTML-ul

Începem cu o imagine simplă:

2. CSS

Apoi, definim două clase CSS care dețin imaginile cursorului:

.cursor-prev cursor: url (cursor-prev.cur), auto; / * IE & Edge * / cursor: url (cursor-prev.svg) 16 16, auto; / * Restul browserelor * / .cursor-next cursor: url (cursor-next.cur), auto; / * IE & Edge * / cursor: url (cursor-next.svg) 16 16, auto; / * Restul browserelor * /

Observați că pentru fiecare regulă specificăm două declarații de cursor. Prima declarație a fiecărei reguli vizează browser-ele Microsoft, iar cea de-a doua vizează alte browsere. Toate valorile indică o imagine, cu auto ca valoare de rezervă.  

Merită menționat faptul că putem specifica mai multe adrese URL sau imagini personalizate. Un browser va încerca să le încarce pe baza ordinii definite în valori. Cu alte cuvinte, inițial va încerca să se încarce prima imagine. Dacă imaginea nu este disponibilă dintr-un anumit motiv, ea va încerca să încarce a doua imagine și așa mai departe. În cele din urmă, dacă niciuna dintre imagini nu există, se va folosi cuvântul cheie de rezervă.

Înainte de a merge mai departe, să evidențiem câteva limitări curente (și în funcție de testele mele) și să explicăm de ce am stabilit două declarații separate:

  • Browserele Microsoft suportă doar formatele CUR și ANI.
  • Browserele Microsoft nu permit setarea originii imaginii cursorului. Dacă se întâmplă acest lucru, imaginea cursorului și restul proprietății sunt ignorate. În cazul nostru, pentru browserele non-Microsoft, am setat originea imaginii în centru (imaginile sunt 32x32).

3. JavaScript-ul

Când toate materialele paginii sunt gata, init funcția este executată. 

În interiorul acestei funcții, recuperăm mai întâi lățimea imaginii.

Apoi, de fiecare dată când plasăm cursorul peste imagine, facem următoarele lucruri:

  • Obțineți coordonatele X ale indicatorului mouse-ului în raport cu imaginea - nu în raport cu fereastra browserului.
  • Eliminați toate clasele din imagine.
  • Adăugați clasa potrivită pentru imagine, în funcție de poziția mouse-ului. Dacă poziția mouse-ului depășește jumătatea lățimii imaginii, adăugăm -Cursor următor clasa, în caz contrar cursor-prev clasa este adăugată.

Codul responsabil pentru acest comportament este următorul:

window.addEventListener ("încărcare", init); funcția init () const img = document.querySelector ("img"); const width = img.getBoundingClientRect (); const jumătateImgWidth = lățime / 2; img.addEventListener ("mousemove", funcția (e) const xPos = e.pageX - img.offsetLeft; this.classList.remove ("cursor-prev" this.classList.add ("cursor-next"); altceva this.classList.add ("cursor-prev");); 

Exemplul # 2

Pentru al doilea exemplu, vom folosi demo-ul construit într-o postare anterioară. Aruncati o privire:

Aici, poziția și aspectul săgeților de navigare arată astfel:

Să le personalizăm pentru o navigare mai ușoară. Fiecare dintre săgeți trebuie să acopere jumătate din lățimea caruselului și înălțimea lor ar trebui să fie egală cu înălțimea caruselului. În plus, vom profita de cursor proprietate pentru a seta icoanele săgeților.

Iată CSS-ul cerut:

.owl-carousel .owl-nav [clasa * = owl-] poziție: absolută; top: 0; fund: 0; lățime: 50%; marja: 0;  carusel .owl-nav .owl-prev stânga: 0; cursor: url (cursor-prev.cur), mutați; cursor: url (cursor-prev.svg) 16 16, mutați;  .carusel .owl-nav .owl-next dreapta: 0; cursor: url (cursor-next.cur), mutați; cursor: url (cursor-next.svg) 16 16, mutați;  .carusel .owl-nav svg display: nici unul; 

Observați că imaginile cursor provin din exemplul nostru anterior. Singura diferență este că specificăm mișcare valoarea cheie ca rezervă în cazul în care imaginea asociată nu poate fi încărcată.

Iată rezultatul:

Provocarea dvs. (în cazul în care alegeți să o acceptați)

Această tehnică funcționează bine în exemplul nostru, în afară de un singur lucru. Săgețile de navigare sunt stivuite deasupra textului diapozitivelor, ceea ce ne împiedică să facem clic pe butoanele de chemare la acțiune. 

În mod normal, o soluție simplă ar putea fi adăugarea unui rezultat pozitiv z-index la acel text (și dați-i poziție: relativă). Cu toate acestea, această soluție nu va funcționa deoarece textul și săgețile sunt în diferite contexte de stivuire (utilizați inspectorul de browser pentru ao vedea). 

Din nou, problema apare pentru demo-ul nostru. În proiectele dvs., structura dvs. poate diferi (de exemplu, aveți doar imagini sau textul este sub imagine) și este posibil să nu vă confruntați cu această problemă. În plus, probabil veți folosi un alt carusel cu un marcaj diferit.

În orice caz, o modalitate de a rezolva problema este via JavaScript. Deci, de fiecare dată când cursorul personalizat se află în limitele butonului / textului țintă, săgeata asociată primește un negativ z-index sau dispare. 

Încercați să vă dați seama acest remediu și postați-vă soluția în comentarii!

Concluzie

În acest sfat rapid, am abordat cum să manipulam aspectul cursorului cu CSS. După cum am văzut, acest lucru poate fi dificil deoarece nu toate browserele acceptă aceeași sintaxă, dar prin adăugarea de stiluri către cursor putem îmbunătăți experiența utilizatorului.

Citirea în continuare

  • Definiția cursor proprietate în Modul de bază de interfață utilizator CSS Nivel 3 (CSS3 UI)
  • Utilizarea valorilor URL pentru proprietatea cursorului
  • Cum de a face miniaturi multi-previzualizare cu evenimente mouse-ul JavaScript