【发布时间】:2016-04-15 09:16:45
【问题描述】:
我正在开发一个使用 react.js 和 sass 作为样式的 webapp(所以我所有的样式文件都是 .scss)。我有一个当前样式的文本框:
input[type=text] {
text-align: center;
font: inherit;
border: 6px solid #999999;
padding: 5px 5px;
font-size: 15px;
box-shadow: 0 1px 1px #DDD;
width: 223px;
outline: none;
display: block;
color: #7B8585;
margin: 0 auto 20px;
}
在某些时候,我的应用想要更改边框颜色。这就是我所拥有的:
var borderStyle;
if (gradient) {
borderStyle = {
'borderImage': '-webkit-linear-gradient(left, #0083c5 0%, #0083c5 33%, #ec4a26 66%, #ec4a26 100%)',
};
}
稍后,输入组件:
<input type="text" style={borderStyle} onChange={this.handleChange} />
目前我看到的是一个白色边框,边框的每个角落都有一个很小的红蓝色渐变图像。我试过使用borderColor,显然它根本不适用于渐变。我是否遗漏了一些明显的东西,或者无法做一个简单的边框渐变?
所需的结果是从左到右的渐变(因此左边框完全是蓝色,右边完全是红色,上下边框具有从蓝到红的过渡)。
针对Harry的回答,我改成如下代码:
if (gradient) {
borderStyle = {
borderImage: 'linear-gradient(to right, #0083c5 0%, #0083c5 33%, #ec4a26 66%, #ec4a26 100%)',
borderImageSlice: 1
};
}
在react docs for inline styles 中指定。
但是,当我检查元素时,我定义的 borderImageSlice 属性丢失了;只有borderImage 在那里,我仍然在边框的角落只有微小的渐变。
【问题讨论】:
-
最终输出应该是什么样子?对于提供的当前渐变,左边缘(和左边框)将是蓝色的,它将向右变化,这样右边缘将是全红色。那是你要的吗?如果这是所需的输出,那么您只缺少一个额外的设置。
-
你在正确的轨道上,但你的渐变语法是错误的。
-
@HenrikAndersson:对于 webkit 特定的线性渐变,语法没有错。它会按原样工作。
-
编辑了主帖以阐明我想要的输出;从左到右的蓝色->红色渐变。此外,它在 Chrome 中运行,但可以很好地支持任何浏览器。
标签: javascript html css reactjs border