【问题标题】:CSS text shadow with perspective带透视的 CSS 文本阴影
【发布时间】:2016-11-24 17:26:17
【问题描述】:

我想实现一种阴影效果,看起来文字的底部接触到地板,阴影投射在它后面。类似于此post 中的透视框或此图像中的阴影


(来源:psd-dude.com

我只需要阴影向一个方向移动。

有纯 CSS 解决方案吗?有解决办法吗?我已经看到它是用盒子完成的,但不是文本。上图是用Photoshop制作的

【问题讨论】:

    标签: css text shadow


    【解决方案1】:

    您可以使用 CSS 变换和透视图:

    body {
      margin: 50px;
      text-align: center;
    }
    #shadow {
      border: 1px solid blue;
      position: relative;
      font-size: 50px;
      font-weight: bold;
      text-align: center;
      perspective: 50px;
      perspective-origin: 50% 100%;
      display: inline-block;
    }
    #shadow::after {
      content: 'p Shadow q';
      outline: 1px solid red;
      position: absolute;
      top: 0; right: 0; bottom: 0; left: 0;
      transform: scaleY(0.5) rotateX(-15deg);
      transform-origin: 50% 100%;
      opacity: .3;
    }
    <div id="shadow">p Shadow q</div>

    阴影的底部似乎与文本的底部并不完全重合,那是因为基线有点高。否则对gjpqy这样的字符会很不利。

    如果你不想要这个空间,你可以减少行高。

    body {
      margin: 50px;
    }
    #shadow {
      position: relative;
      font-size: 50px;
      font-weight: bold;
      text-align: center;
      line-height: 0;
      perspective: 50px;
      perspective-origin: 50% 100%;
    }
    #shadow::after {
      content: 'p Shadow q';
      position: absolute;
      top: 0; right: 0; bottom: 0; left: 0;
      transform: scaleY(0.5) rotateX(-15deg);
      transform-origin: 50% 100%;
      opacity: .3;
    }
    <div id="shadow">p Shadow q</div>

    我在伪元素中硬编码了阴影文本。最好避免这种情况,并让它使用与元素相同的文本。 element() 背景可以做到这一点,只有 Firefox 支持。

    body {
      margin: 50px;
      text-align: center;
    }
    #shadow {
      border: 1px solid blue;
      position: relative;
      font-size: 50px;
      font-weight: bold;
      text-align: center;
      perspective: 50px;
      perspective-origin: 50% 100%;
      display: inline-block;
    }
    #shadow::after {
      content: '';
      background: -moz-element(#shadow);
      background: element(#shadow);
      outline: 1px solid red;
      position: absolute;
      top: 0; right: 0; bottom: 0; left: 0;
      transform: scaleY(0.5) rotateX(-15deg);
      transform-origin: 50% 100%;
      opacity: .3;
    }
    <div id="shadow">p Shadow q</div>

    【讨论】:

    • 很好的答案......而且很遗憾背景:element()处于死路
    • 使用了你的大部分答案。这是您帮助创建的内容:giphygif
    【解决方案2】:

    我想到了一个解决方案,在每个字母中添加一个:after-Element,例如对于字母T,使用content: "T"。然后让内容本身不可见,只需使用:after-Element 上的text-shadow 属性,我们可以通过text-transform: rotateX(70deg) 旋转它。

    I made a draft on JSFiddle.

    【讨论】:

    • 提示:如果不需要单独设置每个字母的阴影样式,您也可以只使用一个后元素,将整个文本作为内容。
    猜你喜欢
    • 2013-04-24
    • 2021-02-20
    • 2017-11-08
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2013-02-11
    相关资源
    最近更新 更多