Type to generate UI components from text


Browse thousands of MUI, Tailwind, React components that are fully customizable and responsive.

Explore Components

CSS Cursor Styling: How to Make Magical Cursors

Imagine you’re exploring a website, and your cursor changes shapes as you move around—a small but important detail guiding your digital journey. In the world of web design, the CSS cursor quietly tells a story, playing a crucial role in how we experience websites.

Picture this: You’re on a web page, moving your cursor over different things. When it turns into a hand, it’s like an invitation to click and discover what’s hidden underneath. Even though the cursor seems small on the screen, it’s like a conductor leading the way for your interactions.

The cursor is more than just an arrow; it’s like a guide, a virtual helper showing what you can do. Whether it becomes a crosshair for accuracy or a pointing hand for direction, the cursor is a small but essential part of how we see, move around, and connect with websites.

In our journey through CSS cursors, we’ll explore the art and science of cursor design. We’ll uncover why it matters and appreciate the little bit of magic it brings to our online adventures.

Example of Creating a Basic CSS Cursor in React

Creating a basic css cursor in a React component is a straightforward process thanks to the simplicity and flexibility of CSS. Let’s walk through a simple example:

// React component

import React from 'react';

import './CursorExample.css'; // Import the CSS file for styling

const CursorExample = () => {

  return (

    <div className="custom-cursor-container">

      <h2>Hover Over Me</h2>




export default CursorExample;

Now, let’s style our cursor in the accompanying CSS file (`CursorExample.css`):

/* CursorExample.css */

.custom-cursor-container {

  cursor: pointer; /* Set cursor to a hand */


/* Additional styling if needed */

.custom-cursor-container:hover {

  color: #ff6347; /* Change color on hover */


In this example, we’ve created a React component named `CursorExample`. Inside the component, we have a `div` with the class `custom-cursor-container`. The magic happens in the CSS file associated with the component. By applying the `cursor: pointer` property, we’ve transformed the default cursor into a hand when hovering over the component.

This example demonstrates the ease with which developers can enhance the user experience by customizing cursors in React applications. The flexibility of CSS allows for a quick and effective way to style cursors and make them contextually relevant to different elements on a webpage. Developers can further extend this concept to create more intricate cursor designs based on the specific needs and aesthetics of their projects.

If you are new to CSS, you could go through CSS Documentation that has detailed documentation and examples to get an understanding of the CSS, you could also refer to this free CSS tutorial course if you would like to explore the various CSS in depth with practical examples.

Exploring Cursor Types

Exploring CSS Cursor Types opens up a world of possibilities for enhancing user interactions. Let’s delve into various cursor types, accompanied by examples and use cases:


In applications where users input or edit vertical text, such as languages written vertically (e.g., traditional Japanese or Chinese), the vertical-text cursor is beneficial. It visually signifies that the user can select or edit text in a vertical orientation.

   .vertical-text-cursor {

     cursor: vertical-text;



This cursor type is handy in design applications where users need precision, like drawing tools or graphic design software. It provides a crosshair as a visual aid, making it easier for users to target specific points accurately.

   .crosshair-cursor {

     cursor: crosshair;



When an application is processing a task that requires some time, the wait cursor is displayed. This signals to the user that the system is busy and they should wait patiently. Commonly seen during loading processes or when submitting a form.

   .wait-cursor {

     cursor: wait;



Similar to the wait cursor, the progress cursor indicates ongoing activity. It is often used for lengthier processes where a percentage completion can be displayed, giving users a sense of progress during tasks like file uploads or data loading.

   .progress-cursor {

     cursor: progress;



The pointer cursor is ubiquitous for interactive elements like buttons, links, or clickable elements. It guides users that they can interact with the displayed content, enhancing the overall navigational experience.

   .pointer-cursor {

     cursor: pointer;


zoom in and zoom out:

Commonly employed in applications with maps or image galleries, the zoom-in and zoom-out cursors signal that users can dynamically adjust the visual scale. This is especially useful for exploring detailed maps or enlarging images.

   .zoom-in-cursor {

     cursor: zoom-in;


   .zoom-out-cursor {

     cursor: zoom-out;


col resize and w resize:

In applications where users need to customize the layout, the col resize and w resize cursors indicate the ability to adjust column width or resize elements horizontally. Useful for dashboard customization or similar scenarios.

   .col-resize-cursor {

     cursor: col-resize;


   .w-resize-cursor {

     cursor: w-resize;


ns resize:

In a web page containing a vertically resizable splitter, applying cursor: ns-resize; to the divider allows users to adjust the height of sections. This is particularly useful in layouts where users need to control the vertical dimensions of panes or panels.

 .ns-resize-cursor {

     cursor: ns-resize;


nwse resize:

Consider a graphics editing application where users want to resize a rectangular selection or shape. Applying cursor: nwse-resize; to the corner of the shape signals that users can adjust both width and height simultaneously, providing flexibility in shaping objects.

   .nwse-resize-cursor {

     cursor: nwse-resize;


nesw resize:

In a map application, users might want to resize a draggable rectangular overlay diagonally from the northeast to the southwest. Applying cursor: nesw-resize; to the corner of the overlay indicates that users can resize it along both the north-east and south-west directions.

   .nesw-resize-cursor {

     cursor: nesw-resize;



The e-resize cursor is used for indicating the east side of an element, suggesting that it can be resized horizontally.

Imagine a split-pane interface where users can adjust the width of a sidebar. Applying `cursor: e-resize;` to the right edge of the sidebar would signal users that they can horizontally resize it.

.resize-element {
  cursor: e-resize;


The s-resize cursor signifies the south side of an element, suggesting vertical resizing.

In a webpage with resizable panes or sections, applying `cursor: s-resize;` to the bottom edge of a section would indicate that users can vertically adjust its height.

.resize-element {
  cursor: s-resize;


The ne-resize cursor is a combination of north and east arrows, indicating the possibility of resizing the element diagonally towards the northeast.

Consider a graphics editing application. When users want to resize a shape or image diagonally towards the northeast, applying `cursor: ne-resize;` provides a visual cue for this specific resizing direction.

.resize-element {
  cursor: ne-resize;


The se-resize cursor combines south and east arrows, signaling diagonal resizing towards the southeast.

In a window management system, applying `cursor: se-resize;` to the bottom-right corner of a resizable window indicates that users can adjust both width and height simultaneously.

.resize-element {
  cursor: se-resize;


In a map application, users may want to adjust the size of a draggable map overlay. Applying `cursor: nw-resize;` to the top-left corner allows them to resize the overlay diagonally towards the northwest.

.resize-element {
  cursor: nw-resize;


The nw-resize cursor involves north and west arrows, suggesting diagonal resizing towards the northwest.

In a data table with resizable rows, applying `cursor: row-resize;` to the bottom edge of each row allows users to vertically adjust the row height for better visibility of content.

.resize-element {
  cursor: row-resize;

These use cases demonstrate how each resize cursor can be employed in different scenarios to provide a clear visual indication of the available resizing direction. By aligning the cursor style with the intended resizing action, developers can enhance the user experience and make interactive elements more intuitive and user-friendly.

Each cursor type serves a specific purpose, providing visual cues that enhance the user experience. Web developers can choose and customize these cursor types based on the context and requirements of their applications, contributing to a more intuitive and engaging interface.

Looking to design exceptional and seamless UI/UX ? Then head on to PureCode AI. PureCode.ai doubles as a vibrant marketplace, providing access to a diverse collection of over 10,000 AI-generated custom components.

Creating Custom Cursors

Creating custom cursors in CSS allows developers to add a unique touch to the user interface, making the application more visually appealing and engaging. Here’s a step-by-step guide on how to create custom cursors with popular designs like a question mark, pointing hand, and dragged item.

1. Question Mark Cursor:

Imagine you are designing an interactive tutorial or help section within a web application. Users may encounter features or functionalities that are not immediately clear. To enhance user guidance and facilitate learning, you can implement a question mark cursor.

CSS Code:

        .cursor-question {

       cursor: url('question-mark-cursor.png'), auto;


Explanation: Use the `url()` function to specify the path to an image file containing the question mark cursor. The `auto` fallback ensures that if the image is not available, the default cursor will be used.

2. Pointing Hand Cursor:

Consider a web application that includes clickable elements, such as navigation links or interactive buttons. To improve user understanding and convey clickability, you can employ a pointing hand cursor.

CSS Code:

        .cursor-pointer {

       cursor: url('pointing-hand-cursor.png'), pointer;


Explanation: Similar to the question mark cursor, replace the image path with the pointing hand cursor image. The `pointer` fallback is a common cursor type used if the image fails to load.

3. Dragged Item Cursor:

Imagine you are developing a web application that involves drag-and-drop functionality, such as rearranging elements within a list or organizing items in a dashboard. In such a scenario, utilizing the dragged item cursor becomes relevant.

CSS Code:

         .cursor-drag {

       cursor: url('dragged-item-cursor.png') 8 8, move;


Explanation: Here, the `url()` function includes the image path and also specifies the coordinates (8 8) where the dragging point is located within the image. The `move` fallback is a standard cursor for indicating draggable elements.

Capability to create custom cursors in CSS encourage Developers can explore their creativity in designing custom cursors that align with the application’s personality and theme. They can use various graphic design tools to create cursor images and then integrate them into the CSS. Custom cursors not only enhance the visual aesthetics of the application but also contribute to a more immersive and delightful user experience.

Changing cursor property on hover

One effective way to enhance user experience is by changing the cursor type dynamically when a user hovers over specific elements. This subtle yet impactful interaction provides visual feedback, indicating interactive elements. Here’s how you can achieve this using CSS:

/* CSS Code */

.button-with-custom-cursor {

  cursor: pointer; /* Set the default cursor type */


.button-with-custom-cursor:hover {

  cursor: grab; /* Change cursor type on hover to 'grab' */


In this example, we have a button with the class `button-with-custom-cursor`. The default cursor type is set to `pointer`. When a user hovers over the button, the cursor type changes to `grab`. This gives the user a visual cue that the button is interactive.

Code Explanation:

The `cursor` property in CSS is used to set the type of cursor to be displayed when pointing over an element. In the default state (without hovering), the cursor is set to `pointer`, which is a common choice for interactive elements. When the user hovers over the button (`:hover` pseudo-class), the cursor type changes to `grab`, providing a different visual indicator.

Advantages of :

  • Enhances user experience by providing visual feedback.

  • Different cursor types can convey different interactions (e.g., grabbing, zooming, etc.).

  • Easy to implement with just a few lines of CSS.


  • Choose cursor types that align with the expected user interaction.

  • Ensure that the cursor change doesn’t confuse users but rather enhances the understanding of interactive elements.

Implementing dynamic cursor changes on hover is a subtle yet effective technique to make your UI more engaging and user-friendly.

Considerations when choosing and Designing Cursors

When designing cursors for web applications, it’s crucial to consider several factors to ensure a positive user experience. Let’s delve into important considerations when choosing and designing cursors:

1. Visibility:

– Cursors should be easily visible against various backgrounds and content. Consider using contrasting colors or adding a subtle border to enhance visibility. This is particularly important in scenarios where the cursor needs to stand out, such as highlighting clickable elements.

2. Accessibility:

– Accessibility is a key aspect of cursor design. Ensure that the chosen cursor styles are accessible to users with different visual abilities. High-contrast cursors or those with distinctive shapes can improve accessibility, making it easier for all users to interact with the application.

3. Appropriateness for Contexts:

– Different contexts within an application may require different cursor styles. For instance, a zoom-in cursor might be suitable when hovering over an image, while a pointing hand cursor could indicate a clickable link. Tailor cursor designs to the specific actions or elements within the application to provide intuitive visual cues.

4. Consistency Across Themes:

– If an application supports different themes or modes, ensure that cursor designs remain consistent across these variations. Consistency contributes to a seamless user experience, preventing confusion when users switch between light and dark modes, for example.

5. Consider User Preferences:

– Some users may prefer a customized cursor experience. Providing options or settings within the application to allow users to choose from a selection of cursors or upload their own can enhance user satisfaction.

6. Performance Impact:

– Overly complex or large cursor designs may impact performance, especially on devices with limited resources. Opt for lightweight and optimized cursor designs to ensure smooth interactions without compromising application performance.

7. Testing Across Devices:

– Cursors may appear differently on various devices and screen sizes. Thoroughly test cursor designs across different devices to ensure they remain effective and visually appealing in diverse contexts.

By considering these factors, designers and developers can create cursor designs that not only align with the application’s aesthetic but also prioritize usability, accessibility, and a seamless user experience. Balancing creativity with practical considerations ensures that cursors effectively communicate user interactions without sacrificing functionality or inclusivity.

Final Thoughts

Cursors play a subtle yet integral role in shaping the user experience of web applications. This article has explored the significance of cursors, how CSS provides the tools for their customization, and various types and properties that can be leveraged to enhance the visual and interactive aspects of an application.

The cursor, often overlooked, is a vital component of user interaction. From basic designs to more complex custom creations, the cursor serves as a visual guide, providing users with cues about clickable elements and actions. CSS offers a range of properties to customize cursors, allowing designers and developers to align them with the theme and purpose of their applications.

UI/UX designers and developers, consider cursor design as an opportunity for creative expression.As you embark on your design and development journey, remember that the cursor is not just a functional pointer; it’s a subtle storyteller in the user interface. A well-designed cursor adds polish and sophistication, making interactions more intuitive and enjoyable.

Embrace the creative possibilities that cursor design offers, and witness the positive impact it can have on user engagement. By paying attention to this seemingly small detail, you elevate the overall aesthetics and user-friendliness of your web applications. Here’s to crafting captivating and user-centric interfaces, one cursor at a time.

Discover the Power of PureCode.ai

Unlock the potential of PureCode.ai, a cutting-edge developer tool that seamlessly translates design images into ready-to-use front-end code using the power of AI. As more than just a tool, PureCode.ai doubles as a vibrant marketplace, providing access to a diverse collection of over 10,000 AI-generated custom components. Dive into a world of possibilities and effortlessly apply custom themes atop popular frameworks such as Tailwind, Material-UI (MUI), and CSS3. Elevate your development experience with Purecode – where innovation meets efficiency in the realm of front-end development.

Yash Poojari

Yash Poojari