CSS 技巧

评判一个网页的美观程度,首要的当然是看它的 CSS 样式写的如何。

日本某宅写了一个非常厨二的页面——臆病な魔女,可以说是把 CSS 动画玩得非常 6 了,看得笔者顿时燃起了学好 CSS 的欲望。

如果想 CSS 玩的溜,除了熟悉基本的知识以外,掌握大量技巧也是必不可少的。

形状

扩张式矩形

目的:创建一个矩形,鼠标悬浮时扩张一定的大小

预览

<div class="expanding-box"></div>
body {
  display: flex;
  height: 100vh;
  justify-content: center;
  align-items: center;
}

.expanding-box {
  position: relative;
  width: 15em;
  height: 10em;

  &::after {
    position: absolute;
    content: "";
    top: -1em;
    right: -1em;
    bottom: -3em;
    left: -1em;
    background: black;
    --path: inset(2rem 0 2rem 2rem round 10px);
    clip-path: var(--path);
    transition: clip-path 0.3s;
  }

  &:hover::after {
    --path: inset(0 round 10px);
  }
}

首先利用伪元素::after生成一个矩形

利用clip-pathinset来裁切矩形(顺序是上右下左圆角)

鼠标悬浮时去除裁切效果即可

字体排印

分割符

目的:实现分隔符效果

预览

添加伪元素::after,内容content: "|",设置间距

再用:not(:last-child)去除伪元素的最后一个子元素即可

用户体验

提示用角标

目的:在按钮右上角创建一个提示用的角标

预览

伪元素的content可通过attr()来获取标签的某一属性值

类似的提示框也可以配合过渡动画来实现:预览

伸缩式按钮

目的:实现伸缩式按钮(鼠标悬浮按钮则展开,移开按钮则收缩)

预览

给“下载”设置负的left用于将其移除视界范围

鼠标悬浮时设置padding-left使按钮给“下载”留出空间

left: 30px;transform: scale(1, 1);把“下载”拉回按钮中(这个很 hack)

最后设定过渡动画即可看到流畅的过渡效果了

结构与布局

圣杯布局

目的:实现圣杯布局(左中右三列,左右两列定宽,中间列自适应宽度)

预览

左右列的flex-grow设为200px,表示它们各占200px空间

中间列的flex-grow设为autoflex-shrink 设为 1,表明是自适应宽度

过渡与动画

动态侧边栏

目的:创建一个导航用的侧边栏,里面包含一个列表,用户鼠标浮动到链接上时会显示过渡动画

预览

给 a 添加 2 个伪元素,并分别为其设置transition以及hover时的状态即可

图片幻灯片

目的:四幅图片(这里用颜色代替)按顺序依次向右滑动显示,最后被四道白色矩形依次遮住

预览

添加一个 slider,用flex使其垂直居中

在 slider 上添加 4 个 image,并使其大小和 slider 相同并重叠在一起,利用overflow:hidden隐藏它们

为这些 image 设置::after矩形伪元素,用作图片背景

创建show-image关键帧:元素的宽度从 0%变为 100%

为 image 创建动画:把show-image作为关键帧,每张图设置不同的延时delayfill-mode设置forwards表示动画完成时保持最后一个关键帧的属性值,这样就完成了 4 张图依次向右滑动的效果

添加一个 paint 以及 4 个子 div,表示 4 道白色矩形,默认的位置是向 x 轴左侧平移 1 个元素单位

创建slide-right关键帧:向 x 轴左侧平移 1 个元素单位变为平移 0 个单位,也就是平移到原点

为 paint 的 4 个子 div 创建动画:把slide-right作为关键帧,同样给每个矩形设置不同的延时delayforwardsfill-mode,就完成了四道白色矩形依次将图片遮住的效果

Last updated

Was this helpful?