box-shadow

news/2025/4/2 15:31:52/

box-shadow前言

box-shadow是css3的一个新属性,用来实现阴影效果,阴影分为内阴影和外阴影两个效果,可以通过逗号添加多个阴影效果。

box-shadow阴影用法

box-shadow:inset offset-x offset-y blur-radius spread-radius color,....;

 

box-shadow参数解释

@1:inset

  有inset 则为内阴影,没有insert 则为外阴影,默认为外阴影。

@2:offset-x

 横向阴影的大小,正值阴影在右边,负值阴影在左边,0的时候阴影中盒子后面,看不见的,如果有blur-radius值会有模糊效果。

@3:offset-y

纵向阴影的大小,值同offset-x。

@4:blur-radius

阴影的模糊程度,值越大,阴影越模糊。

@5:spread-radius

 阴影的扩大缩小,正值时,阴影扩大;负值时,阴影缩小,默认为0,和盒子同样大。

 

box-shadow实例应用中的探讨

内阴影的使用

.shadowdemo{
    width:120px;
    height:120px;
    background:#FAF223;
    box-shadow:inset 2px 2px 8px #065EAF;
}

 

效果如下:

inset.png

使用insert的时候offset-x,offset-y的值的意义和外阴影是相反的,正值是左边,上边。负值是右边,下边。

.shadowdemo{
    width:120px;
    height:120px;
    background:#FAF223;
    box-shadow:inset -2px -2px 8px #065EAF;
}

 

效果如下:

insetoffset.png

很想我们的立体按钮。

以此,我们可以利用box-shadow特性实现一个3D立体效果,效果如下

3dbtn.png

不够真切?你可以点击查看box-shadow的3D按钮。

代码如下:

.shadowdemo{
    display:inline-block;
    line-height:33px;
    height:36px;
    padding:0 2em;
    font-size:13px;
    background:#0C58A7;
    box-shadow:inset -3px -3px 2px #050533;
    text-decoration: none;
    color:#fff;
    border-radius: 4px;
    vertical-align:middle;
}
.shadowdemo:active{
    line-height: 39px;
    box-shadow:inset 2px 3px 2px #050533;
}
<a href="javascript:;" class="shadowdemo">我是按钮</a>

我们用:active伪类来实现按下时效果的动画,通过box-shadow的inset的内阴影的转换,形成视界上突出和凹陷的效果。这里值得讲的是height和line-height的使用,height用来定死高度,然后通过line-height的高度变化实现active时文字的下移效果,更逼真3D效果。

没有按下时:line-height=height-offsety,

按下active时:line-height=height+offsety。

外阴影的使用

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 4px 4px 8px #000;
}

效果如下:

outshadow.png

这个外阴影是我们常用的效果,蓝色的div看起来很有浮于页面的上层。

下面我们来个例子看一下spread-radius阴影扩大缩小的作用

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 4px 4px 8px 6px #000;
}

效果如下:

spread.png

这里的代码比上一个外阴影多了6px的spread-radius的扩大阴影。我们可以看到他的作用是把阴影的大小向外扩大了,左边和上边也出现了明显的阴影效果。

阴影的单位我们还可以使用rgba等有透明效果的阴影。

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 4px 4px 8px  rgba(0,0,0,0.5);
}

效果如下:

shadowrgba.png

效果明显比#000的阴影效果轻很多。阴影效果会跟随元素的圆角也会显示圆角的阴影。并且外阴影效果会和外阴影合并,内阴影效果会和内阴影合并,外阴影效果不会和内阴影效果不会合并。

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    border-radius:8px;
    box-shadow: 4px 4px 8px rgba(0,0,0,0.5),
                4px 5px 3px #05A623,
                inset 4px 4px 8px #000;
}

效果如下:

boxshaowcollapse.png

外阴影的黑色和绿色合并了,但是没有和内阴影合并,并且无论是内阴影,外阴影都是跟随了div的圆角产生了圆角效果。

box-shadow四周阴影实现

通过对box-shadow使用的理解,我们想要一个div的四周都有阴影的话,可能首先想到的是通过box-shadow的四周阴影叠加来实现。

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 6px 6px 8px rgba(0,0,0,0.8),
                -6px -6px 8px rgba(0,0,0,0.8);
}

效果如下:

boxshadowarround.png

很明显,这个四周阴影的效果很不符合预期,缺少了2个角的阴影,这种方式实现四周阴影是不行的。但是box-shadow还有一个属性spread-radius用来扩大阴影,我们可以借助它来实现四周阴影。

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 0px 0px 8px 6px rgba(0,0,0,0.8);
}

效果如下:

arroundshadow.png

这个四周阴影的效果实现的很好,这里我们offset-x,offset-y都设置为0,也就是阴影都在div后面,我们通过第4个参数spread-radius来扩大阴影的范围,让它向四周扩大6px,那么就能实现四周阴影的效果。

box-shadow单边阴影实现

box-shadow的单边阴影效果的实现同样要借助spread-radius参数来实现。

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 8px 2px 4px -2px rgba(0,0,0,0.8);
}

效果如下:

onesideboxshadow.png

实现原理很简单,右边阴影8px,下边阴影2px,我们通过spread-radius把阴影范围缩小了2px,那么下边阴影就隐藏到了div元素的后面,右边的阴影留在外面的就剩下了6px。这样单边阴影的效果就实现了,你可以根据需要选择哪个边有阴影。不过如果你细心的话可以看到下面还是有略微的阴影效果,这个是blur-radius造成的,那么我们的spread-radius要设置为 2px+6px=8px,那么下边就完全没有阴影了。

.outshadow{
    width:120px;
    height:120px;
    background:#0C58A7;
    box-shadow: 8px 2px 2px -4px rgba(0,0,0,0.8);
}

效果如下:

absoneshadow.png

仔细看这个,下面完全没有一点阴影的迹象了。

写了一个demo,你可以点击查看box-shadow单边阴影和四周阴影的效果。


http://www.ppmy.cn/news/629246.html

相关文章

《安卓》一个按钮实现全选和全不选

目的描述&#xff1a; 在一个activity上显示三个不同名字的按钮&#xff0c;并设置一个名字为全选的按钮&#xff0c;当对它点击可以选择其余所有按钮&#xff0c;再次点击则取消所选的按钮。 截图展示&#xff1a; 单个选择 点击全选后全部选择 思路整理记录&#xff1a; 1.在…

NSBox

分组和滚动视图。 NSBox、NSScrollView、和NSSplitView类用于为窗口中的视图集合或其它视图对象提供图形“附件”。您可以通过NSBox类将窗口中的元素分组&#xff0c;并为整组元素描画一个边界。NSSplitView类可以在垂直或水平方向附加一些视图&#xff0c;并为每个视图分配一定…

Gamepanel

package 巴什博奕; import javax.swing.*; import javax.swing.Timer; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.; public class…

Gamebryo引擎

Gamebryo引擎是NetImmerse引擎的后继版本&#xff0c;是由Numerical Design Limited最初开发的游戏中间层&#xff0c;在与Emergent Game Technologies公司合并后&#xff0c;引擎改名为Gamebryo Element。 简介 Gamebryo Element引擎是由C编写的多平台游戏引擎&#xff0c;他支…

使用Spark计算PV、UV

日志字段格式&#xff1a; id,ip,url,ref,cookie,time_stamp 把日志文件放到HDFS。仅取了1000行。 hadoop fs -put 1000_log hdfs://localhost:9000/user/root/input直接在Scala Shell中读取文件并计算PV。 scala> val textFile sc.textFile("hdfs://localhost:900…

Android使用OkHttp实现登录注册功能

客户端 在客户端,这里将登录和注册放在了同一个界面,在账号和密码两个EditText中输入内容后,按下LOGIN按钮,进行登录;按下REGISTER按钮,进行注册。 在写代码之前,先添加OkHttp的依赖: implementation com.squareup.okhttp3:okhttp:3.4.1//这里3.4.1是笔者使用的okhttp版…

一步步实现 仿制Android LOL多玩盒子(一) 概览

一、起源 最近比较闲&#xff0c;玩LOL的时候感觉 Android LOL多玩盒子 里面应用到的东西挺多也挺有意思&#xff0c;打算仿照着做一个。抱着练练手的心态&#xff0c;打算只使用原APK中的图片&#xff0c;代码和布局均自己实现。由于该应用涉及的内容较多、个人能力和空闲时间…

IceBox

IceBox是一个Ice应用服务框架。加载多个服务进行配置&#xff0c;进行一定优化&#xff1b;通过配置加载服务&#xff0c;解除服务和服务器的耦合。 IceBox服务需要Slice定义、骨架代码(slice定义映射的特定语言代码)、Servant类、IceBox服务。 具体实现&#xff1a; Hello.…