对于Material-UI按钮组件,我希望“focus”样式看起来与“focusVisible”样式相同。意思是,我希望它有相同的涟漪效果,可见,如果按钮是以编程方式或鼠标聚焦,就像按钮是以tab键聚焦一样。
我找到的一种解决办法是在元素聚焦之前对其调用DispatchEvent(new window.event(“keydown”))
,从而使键盘成为最后使用的输入类型。这将产生使按钮看起来像我想要的那样的效果,直到onMouseLeave事件(来自MUI
我已经想好了如何像这样更改组件的焦点样式:
import React from "react"
import { withStyles } from "@material-ui/core/styles"
import Button from "@material-ui/core/Button"
const styles = {
root: {
'&:focus': {
border: "3px solid #000000"
}
}
}
const CustomButtonRaw = React.forwardRef((props, ref) => {
const { classes, ...rest } = props
return <Button classes={{root: classes.root}} {...rest} ref={ref}/>
}
const CustomButton = withStyles(styles, { name: "CustomButton" })(CustomButtonRaw)
export default CustomButton
所以,当按钮处于“焦点”状态时,我可以对它应用一些样式。(例如,我使用了边框)。但我不知道如何使样式应用。我试着把类名'mui-visiblefocus'放在按钮上,但似乎没有效果。如果按钮处于visibleFocus状态,是否有一些方法可以获得将被应用的样式?
ButtonBase
(Button
委托给它)有一个action prop,它提供了设置按钮焦点可见状态的功能。
ButtonBase
为此利用了UseImpirativeHandle钩子。要利用它,您可以向action
道具传递一个ref,然后您可以稍后调用actionRef.Current.FocusVisible()
。
但是,这本身是不够的,因为ButtonBase会监听几个鼠标和触摸事件来启动/停止纹波。如果您使用DisableTouchRipple
道具,它将阻止ButtonBase尝试基于这些事件启动/停止ripple。
不幸的是,disabletouchripple
会阻止按钮上的单击和触摸动画。可以通过显式添加另一个您控制的TouchRipple
元素来恢复这些元素。下面的示例将onmousedown
和onmouseup
作为概念验证进行处理,但理想的解决方案将处理buttonbase
处理的所有不同事件。
下面是一个工作示例:
import React from "react";
import Button from "@material-ui/core/Button";
import TouchRipple from "@material-ui/core/ButtonBase/TouchRipple";
const FocusRippleButton = React.forwardRef(function FocusRippleButton(
{ onFocus, onMouseDown, onMouseUp, children, ...other },
ref
) {
const actionRef = React.useRef();
const rippleRef = React.useRef();
const handleFocus = (event) => {
actionRef.current.focusVisible();
if (onFocus) {
onFocus(event);
}
};
const handleMouseUp = (event) => {
rippleRef.current.stop(event);
if (onMouseUp) {
onMouseUp(event);
}
};
const handleMouseDown = (event) => {
rippleRef.current.start(event);
if (onMouseDown) {
onMouseDown(event);
}
};
return (
<Button
ref={ref}
action={actionRef}
disableTouchRipple
onFocus={handleFocus}
onMouseDown={handleMouseDown}
onMouseUp={handleMouseUp}
{...other}
>
{children}
<TouchRipple ref={rippleRef} />
</Button>
);
});
export default function App() {
return (
<div className="App">
<FocusRippleButton variant="contained" color="primary">
Button 1
</FocusRippleButton>
<br />
<br />
<FocusRippleButton
variant="contained"
color="primary"
onFocus={() => console.log("Some extra onFocus functionality")}
>
Button 2
</FocusRippleButton>
</div>
);
}
我有一个样式化的组件: 当安装使用它的组件时,我想
我对材料设计的纽扣样式感到困惑。我想要得到彩色凸起的按钮,像在附加的链接。,像“强制停止”和“卸载”按钮下看到的用法部分。是否有可用的样式或我需要定义它们? http://www.google.com/design/spec/components/buttons.html#按钮-用法 我找不到默认按钮样式。 示例: 如果我尝试通过添加 所有的样式都消失了,如触摸动画,阴影,圆角等。
我试图得到分页从材料UI,但我想中心的箭头和页数的按钮。 我试图通过创建
我不知道如何在材质UI中居中放置按钮。这是我的代码: 我怎样才能使我的按钮居中?
如何在单击按钮后聚焦文本字段。我尝试使用自动对焦,但没有成功:示例沙盒
我一直在试图找出如何样式的材料ui TextField组件。 我的类创建如下: 我的问题是,我似乎无法让文本字段的颜色变成白色。我似乎能够将样式应用于整个文本字段(因为宽度样式工作等)...但是我认为问题是我没有将样式应用到链的更下游和实际输入中。 我曾试图寻找其他关于传递输入道具的答案,但没有成功。 我已经尽了我最大的努力,但我想我需要问问是否有人知道我做错了什么。 它现在看起来是什么样子