利⽤SVG和CSS3来实现⼀个炫酷的边框动画
当⿏标经过⽹格元素时,会有⼀个微妙的动画发⽣——⽹格元素变得透明,每条边有个顺时针的动画,创造了⾮常好的效果。这种效果是通过JS给span标签的宽或者⾼做了动画。我们待会会⽤SVG和CSS渐变来完成。注意,这个技术还是实验性的。
  ⾸先,让我们来看看基本的概念,然后我们会朝着这个⽅向努⼒。
  请注意,我们将在SVG上使⽤CSS过渡,可能⽆法得到所有浏览器的⽀持。
  乍眼⼀看可能不明⽩这个效果是怎么完成的。我们先仔细看看上⾯的边就会发现,⽩⾊的边的宽度不断从右边往左边延伸,⽽⼀条稍微延时的边紧跟着⼀起移动。每条边都有这样的做法。看起来就像上⾯的边经过拐⾓移动到了左边,并以此类推。
  不⽤SVG也能完成这样的效果,甚⾄只⽤伪元素。但是我们想探索⼀下怎样⽤CSS⽽不是JavaScript来控制SVG。js控制css3动画触发
  现在,来思考⼀下要怎么创建出这样的效果。我们可以改变矩形的troke-dashoffset或者直接画线。我们尝试不⽤JavaScript的解决⽅案。我们发现,CSS过渡stroke-dashoffset 和 stroke-dasharray的值会触发很多BUG。所以我们要尝试不同的解决⽅案,利⽤线条和它们的动画,这在CSS⾥很容易理解和实现。
这也给我们更多机会去探索不同的动画效果。
新建⼀个前端学习qun438905713,在⾥⼤多数都是零基础学习者,⼤家相互帮助,相互解答,并且还准备很多学习资料,欢迎零基础的⼩伙伴来⼀起交流。
  我们将要使⽤的线的特别之处是,它们在这个动画⾥将有三种状态。它们是⽅盒边长的三倍,其中中间⼀截是与边等长的间隙。我们将通过设置stroke-dashoffset的值来实现与⽅盒的边等长。现在,这个动画实现的关键在于线的位置转换:
  SVG与⽅盒⼤⼩⼀致,就不会看到超出虚线的部分。
  我们先完成第⼀条线:
CSS Code复制内容到剪贴板
1. <div>
2. <svg width="200" height="200">
3. <line x1="0" y1="0" x2="600" y2="0" />
4. </svg>
5. </div>
  这个div长宽20px,和SVG⼀样。把SVG位置设为absolute,线宽度为10,stroke-dasharray为200。
  CSS Code复制内容到剪贴板
  div {
  width: 200px;
  height: 200px;
  position: relative;
  overflow: hidden;
  background: #ddd;
  }
  svg {
  position: absolute;
  top: 0;
  left: 0;
  }
  svg line {
  stroke-width: 10;
  stroke: #000;
  fill: none;
  stroke-dasharray: 200;
  -webkit-transition: -webkit-transform .6s ease-out;
  transition: transform .6s ease-out;
  }
  div:hover svg line {
  -webkit-transform: translateX(-400px);
  transform: translateX(-400px);
  }
  当数⿏标悬浮在div上时,线也有⼀个过渡。我们要把线移动到它的三分之⼆处,所以要在x轴上移动到-400px处,你可以看看这个效果。因为translation不能在这⾥⽤百分⽐做单位,所以⽤px。
  接着添加其余三条线,gif效果:
  我们需要实现以下效果:线的第⼀部分移出⽅盒后,旁边的线的最后⼀部分移动进来,,这将传进直线在转⾓处转弯的假象,
  来看看坐标系的定义:
  左边的线的坐标是(0,200) 到 (0,-400),底部的是(200,200) 到 (-400,200),右边的是right one (200,0) 到 (200,600):  给每条线加上不同的hover效果:
  CSS Code复制内容到剪贴板
  div:hover p {
  -webkit-transform: translateX(-400px);
  transform: translateX(-400px);
  }
  div:hover svg line.bottombottom {
  -webkit-transform: translateX(400px);
  transform: translateX(400px);
  }
  div:hover svg line.left {
  -webkit-transform: translateY(400px);
  transform: translateY(400px);
  }
  div:hover svg line.rightright {
  -webkit-transform: translateY(-400px);
  transform: translateY(-400px);
  }
  看看现在的效果。
  现在⽅盒⼤⼩改为300 x 460,再给它添加⼀些内容:
  CSS Code复制内容到剪贴板
新建⼀个前端学习qun438905713,在⾥⼤多数都是零基础学习者,⼤家相互帮助,相互解答,并且还准备很多学习资料,欢迎零基础的⼩伙伴来⼀起交流。
D
  2012
  Broccoli, Asparagus, Curry
  为了实现Carl Philipe Brenner的⽹站上的效果,我们还要添加颜⾊过渡效果、盒⼦阴影等:
  CSS Code复制内容到剪贴板
  .box {
  width: 300px;
  height: 460px;
  position: relative;
  background: rgba(255,255,255,1);
  display: inline-block;
  margin: 0 10px;
  cursor: pointer;
  color: #2c3e50;
  box-shadow: inset 0 0 0 3px #2c3e50;
  -webkit-transition: background 0.4s 0.5s;
  transition: background 0.4s 0.5s;
  }
  .box:hover {
  background: rgba(255,255,255,0);
  -webkit-transition-delay: 0s;
  transition-delay: 0s;
  }
  给⽂字加上样式:
  CSS Code复制内容到剪贴板
  .box h3 {
  font-family: "Ruthie", cursive;
  font-size: 180px;
  line-height: 370px;
  margin: 0;
  font-weight: 400;
  width: 100%;
  }
  .box span {
  display: block;
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 1px;
  font-size: 13px;
  padding: 5px;
  }
  .box h3,
  .box span {
  -webkit-transition: color 0.4s 0.5s;  transition: color 0.4s 0.5s;
  }
  .box:hover h3,
  .box:hover span {
  color: #fff;
  -webkit-transition-delay: 0s;
  transition-delay: 0s;
  }
  给SVG和线条添加样式:
  CSS Code复制内容到剪贴板
  .box svg {
  position: absolute;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。