css textbox 边框去掉_CSS的box-shadow创建边框,实现一个相框效果,会了吗

b9b2e67a806ed9427b9023dd1a3b21b3.png

box-shadow最常见的用法:

box-shadow : x轴偏移 y轴偏移 颜色

如果提供第三个和第四个可选值

box-shadow : x轴偏移 y轴偏移 模糊半径 扩散半径 颜色

内阴影:inset(可选值)

因为box-shadow本来用于展现阴影,因此可以有外阴影和内阴影

box-shadow : x轴偏移 y轴偏移 模糊半径 扩散半径 颜色 inset

栗子一:

下面这个输入框非常常见:

<form action="">
        <input type="text" placeholder="有什么话要说?">
    </form>
<style>
    input {
        width: 100px;
        border: none;/*去掉输入框本来就有的黑边框*/
        outline: none;/*去掉输入框本来的点击聚焦之后的外边线样式 */
        border-bottom: 1px solid #3797a4;
        padding-bottom: 10px;
    }
</style>

145bbadeacaf0e730851cf142357bba7.png

我们打算需要输入内容的时候显示边框以提醒用户:

input {
    width: 100px;
    border: none;
    outline: none;
    border-bottom: 1px solid #3797a4;
    padding-bottom: 10px;
}
input:focus {
    border: none;
    padding-bottom: 0;
    box-shadow: 5px 5px #fcf876;
}

此时点击文本框聚焦输入时只显示外下阴影和外右阴影:

bf172358c17b63476ada8d8ecff39f88.png

这时候我们需要继续添加box-shadow属性,把它的分号改成逗号就可以添加多个属性了:

input {
    width: 100px;
    border: none;
    outline: none;
    border-bottom: 1px solid #3797a4;
    padding-bottom: 10px;
}
input:focus {
    border: none;
    padding-bottom: 0;
    box-shadow: 5px 5px #fcf876,
               -5px 5px #fcf876,
               5px -5px #fcf876,
               -5px -5px #fcf876;
}

我们给这个文本框的focus伪类加上右下左下右上左上的外阴影效果才能实现完全的边框效果:

d5f57ad3bfc43d32c3151090d197371f.png

如果只添加右下左上是不能实现的,效果如下:

input:focus {
    border: none;
    padding-bottom: 0;
    box-shadow: 5px 5px #fcf876,
               -5px -5px #fcf876;
}

715fcfed25e2b6f169d1da49c920c556.png

现在有效果了,但是这个方法太笨了,需要改造一下,我们可以利用前期说到的第四个数值(也就是对外扩散属性),但是 要记住还是需要填写第三个数值(模糊半径)来占位。

input:focus {
            border: none;
            padding-bottom: 0;
            box-shadow: 0 0 0 5px #fcf876;      
        }

此时实现的效果和上述的一样:

d5f57ad3bfc43d32c3151090d197371f.png

看到上面这个input输入框中的outline属性,我就又去了解了一下CSSoutlineborder的区别

CSSoutlineborder的区别:

1.border占用空间,outline不占用空间,不会影响元素的尺寸和位置。

<input type="text" placeholder="有什么话要说?">
<style>
    input {
        width: 100px;
        border: 10px solid black;
        outline: 10px solid #3797a4;
    }
</style>

看出效果差别了吗?

border是占了文档流空间的,但是outlineborder外层,有点类似于

c51158fe9be49739e52fe8353028822f.png

2.border 可应用于几乎所有有形的html元素,而 outline是针对链接、表单控件和ImageMap等元素设计。从而另一个区别也可以推理出,那就是: outline 的效果将随元素的 focus 而自动出现,相应的由blur 而自动消失。这些都是浏览器的默认行为,无需JavaScript配合CSS来控制。

利用这些特性,我们常用outline设置悬停的动态效果。之前一直困扰我的问题:hover加边框会导致元素定位和大小的改变,同事也会影响其他元素位置的改变,现在终于解决了。

栗子二:

我们需要给图片上面加一个内阴影覆盖上去的效果:

<div>
    <img src="img/771ddded2e738bd4f6befafead8b87d6257ff988.jpg"/>
</div>
<style>
    div{
        width: 960px;
        height: 540px;
        box-shadow: 0 0 0 50px rgba(123,104,255,0.2) inset;
    }
    img{
        width: 960px;
        height: 540px;
    }
</style>

此时并没有任何内阴影效果:

a6fb4a425a41d1ae08a81677547ceb58.png

因为图片<img>现在是置于<div>的上层,把阴影效果遮住了,我们需要改一下代码:

div{
    width: 960px;
    height: 540px;
    box-shadow: 0 0 0 50px rgba(123,104,255,0.2) inset;
}
img{
    position: relative;
    z-index: -1;
    width: 960px;
    height: 540px;
}

eb2e6c4cf75021262249f78bac0e41bd.png

这就用内阴影实现了图片美化的效果。

栗子三:

除了内阴影,另一种常用的就是双层边框了:

<img src="img/771ddded2e738bd4f6befafead8b87d6257ff988.jpg"/>
<style>
    img{
        width: 960px;
        height: 540px;
        box-shadow: 0 0 0 10px #ff9595,
                    0 0 0 30px white,
                   40px 40px #32e0c4,
                   -40px -40px #32e0c4;
    }
</style>

box-shadow属性里面有多个阴影属性,按照css代码顺序越在前面的,越置于上层

此时就有了照相相框的效果:

a3f2339b9b4ae650e8cfaff8498d2439.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值