当前位置: 首页 > 知识库问答 >
问题:

在React中内联CSS样式:如何实现:悬停?

魏宸
2023-03-14

我非常喜欢React中的内联CSS模式,并决定使用它。

但是,不能使用:hover和类似的选择器。那么,在使用内联CSS样式时,实现悬停高亮显示的最佳方法是什么?

#reactjs的一个建议是使用一个可点击的组件,并像这样使用它:

<Clickable>
    <Link />
</Clickable>

可点击有一个悬停状态,并将其作为道具传递给链接。但是,可点击的(我实现它的方式)将链接包装在div中,这样它就可以设置onMouseEnteronMouseLeave。这使得事情有点复杂(例如,包装在div中的span的行为与span不同)。

有没有更简单的方法?


共有3个答案

裴成文
2023-03-14

我也处于同样的情况。非常喜欢在组件中保持样式的模式,但悬停状态似乎是最后一个障碍。

我所做的是编写一个mixin,您可以将它添加到需要悬停状态的组件中。此mixin将向组件的状态添加一个新的悬停的属性。如果用户将鼠标悬停在组件的主DOM节点上,它将被设置为true,如果用户离开元素,它将被设置回false

现在,在组件渲染函数中,可以执行以下操作:

<button style={m(
     this.styles.container,
     this.state.hovered && this.styles.hover,
)}>{this.props.children}</button>

现在,每次悬停的状态更改时,组件都会重新渲染。

我还为此创建了一个沙箱回购协议,我自己用它来测试其中一些模式。如果您想查看我的实现示例,请查看它。

https://github.com/Sitebase/cssinjs/tree/feature-interaction-mixin

危晨
2023-03-14

聚会迟到了,但有了解决办法。你可以使用“

day: {
    display: "flex",
    flex: "1",
    justifyContent: "center",
    alignItems: "center",
    width: "50px",
    height: "50px",
    transition: "all 0.2s",
    borderLeft: "solid 1px #cccccc",

    "&:hover": {
      background: "#efefef"
    },
    "&:last-child": {
      borderRight: "solid 1px #cccccc"
    }
},
谢正初
2023-03-14

我认为onMouseEnter和onMouseLe是可行的方法,但我认为不需要额外的包装器组件。以下是我如何实现它:

var Link = React.createClass({
  getInitialState: function(){
    return {hover: false}
  },
  toggleHover: function(){
    this.setState({hover: !this.state.hover})
  },
  render: function() {
    var linkStyle;
    if (this.state.hover) {
      linkStyle = {backgroundColor: 'red'}
    } else {
      linkStyle = {backgroundColor: 'blue'}
    }
    return(
      <div>
        <a style={linkStyle} onMouseEnter={this.toggleHover} onMouseLeave={this.toggleHover}>Link</a>
      </div>
    )
}

然后,您可以使用悬停状态(true/false)来更改链接的样式。

 类似资料:
  • 问题内容: 我非常喜欢React中的内联CSS模式,并决定使用它。 但是,您不能使用和类似的选择器。那么,在使用内联CSS样式时实现悬停时高亮显示的最佳方法是什么? 该有一个状态,并将其作为道具的链接。但是,(我的方式来实现它)包裹的,以便它可以设置并给它。不过,这会使事情有些复杂(例如,包裹在行为上与有所不同)。 有没有更简单的方法? 问题答案: 我处于同样的情况。确实像在组件中保留样式的模式,

  • 本文向大家介绍如何在HTML元素中使用内联CSS样式?,包括了如何在HTML元素中使用内联CSS样式?的使用技巧和注意事项,需要的朋友参考一下 使用style 属性设置内联CSS样式。以下是语法- 语法 在这里,mystyles 是一个或多个CSS属性。用分号分隔它们。 示例 您可以尝试运行以下代码以为HTML中的元素实现内联CSS样式-

  • 问题内容: 我知道将CSS样式直接嵌入到它们会影响的HTML标记中会破坏CSS的许多目的,但有时对于调试目的很有用,例如: 嵌入规则的语法是什么: 放入A标签的样式属性中?显然不是这个… …因为这将一直适用,而不是仅在悬停期间适用。 问题答案: 恐怕无法完成,伪类选择器无法内联设置,您必须在页面或样式表上进行设置。 我应该提到,从 技术上讲, 您 应该 能够按照CSS规范进行操作,但是大多数浏览器

  • 问题内容: 我有使用内联样式的标记,但是我无权更改此标记。如何仅使用CSS覆盖文档中的内联样式?我不想使用jQuery或JavaScript。 HTML: CSS: 问题答案: 覆盖内联样式的唯一方法是使用CSS规则旁边的关键字。以下是一个示例。 重要笔记: 使用不是一个好的做法。因此,您应避免同时使用内联样式。 将关键字添加到任何CSS规则后,该规则就可以 强行优先 于该元素的 所有其他CSS规

  • 问题内容: 这是_renderRow函数的一部分。我有一些按钮的基本样式,还有从行上的变量读取的样式。在此示例中,它是“#f00”,但它可以是变量,例如thisColor。如何将外部样式与嵌入式样式相结合? 像这样的东西,但这不起作用: 还是我必须将它与一个容器嵌套在TouchableHightlight内,然后将内联样式放在该元素上? 问题答案: 你的括号是错误的。如果打算继续使用数组语法,请改

  • 问题内容: 我有这样的事情: 我正在使用beautifulsoup解析html。有没有办法拉出“背景” css属性中的“ URL”? 问题答案: 您有两种选择-快速,肮脏或正确的方法。快速而肮脏的方式(如果更改标记,则很容易中断)看起来像 显然,您必须使用它才能使其与多个标签一起使用。 正确的方法是,建议有人在CSS字符串上使用正则表达式:)会很糟糕,因此使用CSS解析器。cssutils是我刚刚