使用CSS3渐变来模拟应用border-radius后Illustrator中的“内发光”效果

16

我正在试图深入了解CSS3渐变(尤其是径向渐变),在这个过程中,我认为我给自己设置了一个相对艰巨的挑战。

在Adobe Illustrator中,我创建了以下“按钮”样式:

Button style screenshot

为了创建这个图片,我创建了一个带有背景颜色rgb(63,64,63)#3F403F 的矩形,然后设置了15像素的边框半径。

然后,我对它应用了25%不透明度,8px模糊,白色从中心到外侧的“内发光”。 最后,我对其应用了3pt白色描边。(如果上面的图片不足以说明问题,我告诉你所有这些细节是为了让你复制我的效果。)

因此,我的问题是:

是否可能使用CSS重新创建此“按钮”,而无需使用图像?

我知道Internet Explorer的“限制”(出于实验目的,我不关心它),我也知道webkit中存在一个小的“错误”,会不正确地呈现具有背景颜色、边框半径和边框(与背景颜色不同的颜色)的元素 - 它会让背景颜色渗透到曲线角。

到目前为止,我最好的尝试还相当糟糕,但供参考的代码如下:

section#featured footer p a
{
    color: rgb(255,255,255);
    text-shadow: 1px 1px 1px rgba(0,0,0,0.6);
    text-decoration: none;
    padding: 5px 10px;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
    border: 3px solid rgb(255,255,255);
    background: rgb(98,99,100);

    background: -moz-radial-gradient(
        50% 50%, 
        farthest-side, 
        #626364, 
        #545454
    );
    background: -webkit-gradient(
        radial, 
        50% 50%,
        1px,
        50% 50%,
        5px,
        from(rgb(98,99,100)),
        to(rgb(84,84,84))
    );
}

基本上很糟糕。非常感谢任何提示或建议,在此提前表示感谢!

4个回答

38

看起来你想要创建一个渐变来复制这个效果:

"我接着使用25%的不透明度、8px模糊、白色从中心应用了一个'内发光'."

你可以使用内阴影(inset box-shadow)完全实现此效果。例如:

-moz-box-shadow: inset 0 0 8px rgba(0,0,0, 0.25);
-webkit-box-shadow: inset 0 0 8px rgba(0,0,0, 0.25);

1
谢谢 :),还需要添加box-shadow以应用于IE。 - Mhmd

2

没有额外的标记:

径向渐变很难控制,而且在不同的浏览器中的工作方式与线性渐变有很大的区别。而且,与内部发光不同,它们实际上是圆形的,而不是匹配你的盒子的大多数矩形轮廓。

由于允许使用盒子阴影的每个浏览器也允许使用rgba和多重背景,我会使用两个线性渐变的组合,堆叠并使用rgba颜色-一个水平和一个垂直。以下是一些示例(用所需的颜色替换我的颜色):

section#featured footer p a {
  background-color: #000;
  background-image: -moz-linear-gradient(
    left, 
    rgba(255,255,255,.5), 
    rgba(255,255,255,0) 10%, 
    rgba(255,255,255,0) 90%, 
    rgba(255,255,255,.5)
  ), -moz-linear-gradient(
    top, 
    rgba(255,255,255,.5), 
    rgba(255,255,255,0) 10%, 
    rgba(255,255,255,0) 90%, 
    rgba(255,255,255,.5)
  );
  background-image: -webkit-gradient(
    /* webkit's syntax for the same horizontal gradient */
    ), -webkit-gradient(
    /* webkit's syntax for the same vertical gradient */
    );
} 

嘿,你有这个的实时预览吗?我很想看看它是如何工作的...我只是复制粘贴无法让它工作。谢谢! - Ian Storm Taylor

1

您还可以在叠加的 div 上创建从白色到透明的径向渐变。我使用了这个很棒的 CSS3 生成工具,它为您提供了所有必要的 CSS3,以实现跨浏览器兼容性。

http://www.colorzilla.com/gradient-editor/

希望这能帮助到某些人!

0

我必须说...你的问题非常吸引我,所以我开始着手解决它。

我找到了一个解决方案,但它使用了嵌套的<span>标签,这有点不太好看,但它与你的图片几乎完全相同。

以下是HTML代码:

<a href="/" class="dark-button"><span>Carry on reading&nbsp;&nbsp;&rarr;</span></a>

注意在<a>标签内部嵌套了<span>标签。非断行空格只是为了让箭头在图片中有相同的空间。

以下是CSS代码:

a.dark-button { 
    font: 11pt/11pt "Helvetica Neue", Helvetica, Arial, sans-serif; 
    font-weight: 100; 
    color: white; 
    text-decoration: none; 
    background-color: #555; 
    border: 3px solid white; 
    -moz-border-radius: 15px; padding: 5px 3px; 
    text-shadow: 1px 1px 2px #111;
}
    a.dark-button span { 
        background-color: #666; 
        padding: 2px 12px; 
        -moz-border-radius: 15px;
        -moz-box-shadow: 0 0 1px #666, 0 0 2px #666, 0 0 3px #666, 0 0 4px #666, 0 0 5px #666, 0 0 7px #666; 
    }

基本上为了实现内部发光效果,我通过在内部元素上添加一个外部阴影(以投影的形式)来实现。希望这样说得清楚。

要在网页上查看效果,请访问:http://ianstormtaylor.com/experiments/css-buttons

玩得开心!


哦,你还需要为Safari添加-webkit前缀。不过就像你说的,Safari会让边框半径有些微小偏差。 - Ian Storm Taylor
不要这样做... Dan 提供了一个更好、更快的方法来获得你想要的东西。 - Ian Storm Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接