'How to specify custom mouse cursor with JSX style
How can I specify a custom mouse cursor using a JSX inline style?
This works fine:
<Component
style={{ cursor: 'crosshair' }}
/>
but I cannot seem to get anything along the lines of
<Component
style={{ cursor: 'url(images/special.cur)' }}
/>
to work. Elsewhere I am successfully getting static images from the same location
<img
src="images/example.png"
/>
so I believe the server is set up properly.
I've tried Chrome, Firefox, and IE 11.
I know must be doing something fundamentally wrong. How do I do this?
Thanks very much!
EDIT
(StackOverflow seems not to approve of the continued comment thread so let me address Josh's latest point as an edit instead.)
Yes, a plain HTML element gets the custom cursor. I agree it must be a syntax problem, but what is the correct syntax for cursor: url(file)
in JSX? That is what I'm trying to figure out. Thanks again!
<body>
<input style="cursor: url(images/special.cur),auto;" type="img" src="images/example.png" />
<div id="container"></div>
...
</body>
where the <input>
gets my special cursor and the "container" <div>
is where my React components are rendered.
I also realize that I hadn't mentioned before that I am using React-Bootstrap components for my interface. I know that Bootstrap adds lots of styles but I wouldn't think they would "win" in this case, would they?
Solution 1:[1]
I believe I figured this out. There were two things wrong, and Josh pointed one of them out. Sorry if anyone wasted much time on this, but for the record:
The basic problem is that I used an online image converter to convert an image to .cur format and I now believe it returns corrupt or at least inadequate .cur files.
When I tried .png format instead with a fallback value as Josh suggested, I can make custom cursors work on Chrome and Firefox. I will have to find some better tool to make a proper .cur file for IE still as it only supports the .cur (and .ani) formats. I was able to use another .cur file I found online somewhere which does work with IE as documented.
[I know that I said I was able to use my "inadequate" .cur file with plain HTML outside of React; I must have been trying too many things at once. Today I can't make that work either. Sorry for the misleading reply.]
So JSX doesn't require anything special other than a valid cursor image file and a fallback built-in cursor.
<Component
style={{ cursor: 'url(images/special.png),auto' }}
/>
Thanks.
Solution 2:[2]
For anyone else who finds this off Google, here is everything you need to do:
- Put the cursor image in your public (not src) folder
- Add
style={{cursor: 'url(cursor.png),auto'}}
to your component
Full example:
public/
- cursor.png
- 404.html
- favicon.ico
- etc
src/
- App.js
App.js:
import React from 'react';
function App() {
return (
<div style={{cursor: 'url(cursor.png), auto'}}>
Mouse over me for your custom cursor!
</div>
);
}
export default App;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | carl |
Solution 2 | Dr-Bracket |