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

如何在Tamagui中通过容器hover切换子元素显隐与高亮?

在Tamagui中实现容器hover时的文本显示/高亮效果

Tamagui的样式系统和传统CSS存在差异,直接用常规CSS选择器可能无法被正确解析,你需要用Tamagui支持的嵌套伪类语法或variants特性来实现需求。以下是两种可行方案:

方案1:使用styled组件嵌套伪类

先创建带hover状态的容器组件,通过父组件的:hover伪类控制子文本的样式:

import { View, Text, styled } from 'tamagui'

// 定义带hover效果的容器
const HoverContainer = styled(View, {
  // 容器基础样式(可根据需求调整)
  padding: 12,
  cursor: 'pointer',

  // hover时控制子元素样式
  '&:hover #hidden': {
    display: 'none',
  },
  '&:hover #notHidden': {
    color: '$blue10', // 替换为你需要的高亮颜色
    fontWeight: 'bold',
  },
})

// 使用组件
export default function YourComponent({ text }) {
  return (
    <HoverContainer>
      <Text color="$white1" fontSize="$4" id="notHidden">
        {text}
      </Text>
      <Text color="$white1" fontSize="$4" id="hidden">
        {text}
      </Text>
    </HoverContainer>
  )
}

方案2:使用Tamagui的variants和hoverStyle(推荐)

这种方式更贴合Tamagui的最佳实践,通过variants定义状态,自动绑定hover事件:

import { View, Text, styled } from 'tamagui'

const HoverContainer = styled(View, {
  padding: 12,
  cursor: 'pointer',

  // 定义状态变体
  variants: {
    isHovered: {
      true: {
        '& #hidden': { display: 'none' },
        '& #notHidden': { color: '$blue10', fontWeight: 'bold' },
      },
    },
  },

  // 自动将hover状态映射到isHovered变体
  hoverStyle: {
    isHovered: true,
  },
})

export default function YourComponent({ text }) {
  return (
    <HoverContainer>
      <Text color="$white1" fontSize="$4" id="notHidden">
        {text}
      </Text>
      <Text color="$white1" fontSize="$4" id="hidden">
        {text}
      </Text>
    </HoverContainer>
  )
}

注意事项

  • 你原代码中的fos是笔误,Tamagui中字体大小属性为fontSize
  • Tamagui的样式编译器只会解析组件内部定义的样式规则,外部CSS文件中的选择器可能无法作用到组件内部的Tamagui元素

内容的提问来源于stack exchange,提问作者Alexey Kostyuhin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:27:05