You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CSS in JS中为<input type="image">定义常态与悬停图片?

当然可以实现啦!

你遇到的问题核心是CSS in JS里伪类的写法错误,我帮你梳理清楚并修正代码:

首先,你代码里的&amp;:hover是转义后的字符,在CSS in JS的语法中,应该直接写&:hover就可以了,不需要转义成&amp;,这是导致语法错误的关键原因。

另外,<input type="image">本身带有默认的边框和内边距,想要完美切换图片,还需要处理这些默认样式,同时要显式设置按钮的宽高来匹配图片尺寸。下面是修正后的完整代码示例(以常用的styled-components为例):

import styled from 'styled-components';

// 定义样式化的谷歌登录按钮
const GoogleSignInBtn = styled.input`
  margin: 40px;
  border: none; /* 去掉input默认边框 */
  padding: 0; /* 去掉默认内边距 */
  width: 191px; /* 匹配你的图片宽度 */
  height: 46px; /* 匹配你的图片高度 */
  cursor: pointer; /* 鼠标悬停显示指针,提升交互体验 */
  background: url(/btn_google_signin_light_normal_web.png) no-repeat center/contain;

  /* 悬停状态切换图片 */
  &:hover {
    background: url(/btn_google_signin_light_focus_web.png) no-repeat center/contain;
  }

  /* 可选:加上点击状态的图片切换 */
  &:active {
    background: url(/btn_google_signin_light_pressed_web.png) no-repeat center/contain;
  }
`;

// 使用组件
<GoogleSignInBtn type="image" alt="使用谷歌登录" />

额外注意事项:

  • 必须显式设置宽高:<input type="image">默认会根据图片尺寸渲染,但有时候会受父元素或全局样式影响,显式设置能保证按钮尺寸和图片完全匹配。
  • 背景图片属性:加上no-repeat center/contain可以避免图片重复显示,同时让图片在按钮容器内居中且完整展示。
  • 如果用其他CSS in JS方案(比如Emotion),写法逻辑是一致的,核心都是正确使用&:hover伪类。

内容的提问来源于stack exchange,提问作者It'sNotMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:16:05