文字折叠效果

2021-08-16 15:29:53 浏览数 (1)

文字折叠效果

人的志向通常和他们的能力成正比例。——约翰逊

实现效果

实现思路

  1. 建一个div盒子让其旋转一定角度,使其有一定的倾斜效果
  2. 通过双伪元素建两个相同的样式,通过clip-path属性分别截取上半部分和下半部分,并定位使其与原div盒子层叠
  3. 添加鼠标移入效果,通过一定的旋转和倾斜来实现折叠时的效果

实现原理

一个div盒子在底层不动,让伪元素变化从而达到效果

重要属性

clip-path:使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。

该属性下有很多的属性值,这里用到的inset

代码语言:javascript复制
inset()可以传入5个参数,分别对应top,right,bottom,left的裁剪位置,round radius(可选,圆角)

-webkit-text-stroke:给文字添加边框,2个属性值,颜色和大小,ie有兼容性问题

skew():定义了一个元素在二维平面上的倾斜转换,这种转换是一种剪切映射(横切),它在水平和垂直方向上将单元内的每个点扭曲一定的角度。每个点的坐标根据指定的角度以及到原点的距离,进行成比例的值调整;因此,一个点离原点越远,其增加的值就越大。

实现代码

HTML
代码语言:javascript复制
<div>Astro Boy</div>
CSS
代码语言:javascript复制
<style>
    * {
        margin: 0;
        padding: 0;
    }
    div {
        text-transform: uppercase;/* 转成大写 */
        width: 1000px;
        margin: 200px auto;
        font-size: 100px;
        color: #fd79a8;
        letter-spacing: 5px;/* 设置字间距 */
        transition: all 1s;
        -webkit-text-stroke: 2px #fd79a8;/* 设置字体边框 ie浏览器不支持*/
        transform: rotate(-5deg);/* 旋转一定角度 */
    }
    div::before {
        content: 'Astro Boy';/* 阿童木 */
        position: absolute;
        top: 0;
        left: 0;
        color: white;
        clip-path: inset(0 0 50% 0);
        transform: rotate(0deg) skew(0deg);
        transition: all 1s;
    }
    div:hover::before {
        transform: rotateX(-30deg) skew(-30deg);
        color: (243,243,243);
        text-shadow: 0 0 2px black;
    }
    div::after {
        content: 'Astro Boy';
        position: absolute;
        top: 0;
        left: 0;
        color: white;
        clip-path: inset(50% 0 0 0);/* 裁剪半个矩形区域 */
        transform: rotate(0deg) skew(0deg);
        transition: all 1s;
    }
    div:hover::after {
        transform: rotateX(40deg) skew(20deg);
        color: (243,243,243);
        text-shadow: 0 0 2px black;
    }
</style>
完整代码
代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            text-transform: uppercase;/* 转成大写 */
            width: 1000px;
            margin: 200px auto;
            font-size: 100px;
            color: #fd79a8;
            letter-spacing: 5px;/* 设置字间距 */
            transition: all 1s;
            -webkit-text-stroke: 2px #fd79a8;/* 设置字体边框 ie浏览器不支持*/
            transform: rotate(-5deg);/* 旋转一定角度 */
        }
        div::before {
            content: 'Astro Boy';/* 阿童木 */
            position: absolute;
            top: 0;
            left: 0;
            color: white;
            clip-path: inset(0 0 50% 0);
            transform: rotate(0deg) skew(0deg);
            transition: all 1s;
        }
        div:hover::before {
            transform: rotateX(-30deg) skew(-30deg);
            color: white;
            text-shadow: 0 0 2px black;
        }
        div::after {
            content: 'Astro Boy';
            position: absolute;
            top: 0;
            left: 0;
            color: white;
            clip-path: inset(50% 0 0 0);/* 裁剪半个矩形区域 */
            transform: rotate(0deg) skew(0deg);
            transition: all 1s;
        }
        div:hover::after {
            transform: rotateX(40deg) skew(20deg);
            color: white;
            text-shadow: 0 0 2px black;
        }
    </style>
</head>
<body>
    <div>Astro Boy</div>
</body>
</html>

部分内容截自MDN文档

本次的分享就到这结束了

0 人点赞