【问题标题】:How to make the new long shadow trend with CSS?如何用 CSS 打造新的长影趋势?
【发布时间】:2013-08-06 14:35:21
【问题描述】:

随着Flat UI 出现一种新趋势,称为“长影”。
这是一个示例图片:

Credit

我真的很喜欢它,现在我想在我的网站上实现这样的效果。但是我不会做图片,我想用 CSS 来做! (或 HTML5、jQuery 等)。

我已经找到了一个生成器 (Long Shadow Generator by Juani Ruiz Echazú),但是生成的 CSS 看起来真的很尴尬。

例子:

.shape {
    text-shadow: rgb(20, 144, 120) 1px 1px,
    rgb(20, 144, 120) 2px 2px,
    rgb(20, 144, 120) 3px 3px,
    rgb(20, 144, 120) 4px 4px,
    rgb(20, 144, 120) 5px 5px,
    rgb(20, 144, 120) 6px 6px,
    rgb(20, 144, 120) 7px 7px,
    rgb(20, 144, 120) 8px 8px,
    rgb(20, 144, 120) 9px 9px,
    rgb(20, 144, 120) 10px 10px,
    rgb(20, 144, 120) 11px 11px,
    rgb(20, 144, 120) 12px 12px,
    rgb(20, 145, 121) 13px 13px,
    rgb(20, 146, 122) 14px 14px,
    rgb(20, 147, 123) 15px 15px,
    rgb(20, 148, 123) 16px 16px,
    rgb(20, 149, 124) 17px 17px,
    rgb(20, 150, 125) 18px 18px,
    rgb(20, 151, 126) 19px 19px,
    rgb(21, 152, 126) 20px 20px,
    rgb(21, 153, 127) 21px 21px,
    rgb(21, 154, 128) 22px 22px,
    rgb(21, 155, 129) 23px 23px,
    rgb(21, 156, 129) 24px 24px,
    rgb(21, 157, 130) 25px 25px,
    rgb(21, 158, 131) 26px 26px,
    rgb(21, 159, 132) 27px 27px,
    rgb(22, 160, 133) 28px 28px;
    box-shadow: rgb(28, 37, 48) 1px 1px,
    rgb(28, 37, 48) 2px 2px,
    rgb(28, 37, 48) 3px 3px,
    rgb(28, 37, 48) 4px 4px,
    rgb(28, 37, 48) 5px 5px,
    rgb(28, 37, 49) 6px 6px,
    rgb(28, 37, 49) 7px 7px,
    rgb(28, 38, 49) 8px 8px,
    rgb(28, 38, 49) 9px 9px,
    rgb(29, 38, 49) 10px 10px,
    rgb(29, 38, 49) 11px 11px,
    rgb(29, 38, 50) 12px 12px,
    rgb(29, 38, 50) 13px 13px,
    rgb(29, 38, 50) 14px 14px,
    rgb(29, 39, 50) 15px 15px,
    rgb(29, 39, 50) 16px 16px,
    rgb(29, 39, 50) 17px 17px,
    rgb(29, 39, 51) 18px 18px,
    rgb(29, 39, 51) 19px 19px,
    rgb(30, 39, 51) 20px 20px,
    rgb(30, 39, 51) 21px 21px,
    rgb(30, 39, 51) 22px 22px,
    rgb(30, 40, 51) 23px 23px,
    rgb(30, 40, 52) 24px 24px,
    rgb(30, 40, 52) 25px 25px,
    rgb(30, 40, 52) 26px 26px,
    rgb(30, 40, 52) 27px 27px,
    rgb(30, 40, 52) 28px 28px,
    rgb(30, 40, 52) 29px 29px,
    rgb(31, 41, 53) 30px 30px,
    rgb(31, 41, 53) 31px 31px,
    rgb(31, 41, 53) 32px 32px,
    rgb(31, 41, 53) 33px 33px,
    rgb(31, 41, 53) 34px 34px,
    rgb(31, 41, 53) 35px 35px,
    rgb(31, 41, 54) 36px 36px,
    rgb(31, 41, 54) 37px 37px,
    rgb(31, 42, 54) 38px 38px,
    rgb(31, 42, 54) 39px 39px,
    rgb(32, 42, 54) 40px 40px,
    rgb(32, 42, 54) 41px 41px,
    rgb(32, 42, 55) 42px 42px,
    rgb(32, 42, 55) 43px 43px,
    rgb(32, 42, 55) 44px 44px,
    rgb(32, 43, 55) 45px 45px,
    rgb(32, 43, 55) 46px 46px,
    rgb(32, 43, 55) 47px 47px,
    rgb(32, 43, 56) 48px 48px,
    rgb(32, 43, 56) 49px 49px,
    rgb(33, 43, 56) 50px 50px,
    rgb(33, 43, 56) 51px 51px,
    rgb(33, 43, 56) 52px 52px,
    rgb(33, 44, 56) 53px 53px,
    rgb(33, 44, 57) 54px 54px,
    rgb(33, 44, 57) 55px 55px,
    rgb(33, 44, 57) 56px 56px,
    rgb(33, 44, 57) 57px 57px,
    rgb(33, 44, 57) 58px 58px,
    rgb(33, 44, 57) 59px 59px,
    rgb(34, 45, 58) 60px 60px;
    background-color: rgb(22, 160, 133);
    height: 150px;
    width: 150px;
    font-size: 75px;
    line-height: 150px;
    text-align: center;
}

那么有没有一种更简单、更简洁、更好的方法来做到这一点而无需任何图形?


解释为什么我不使用任何图形

我喜欢有创意、不寻常和出色的动画。所以我认为,有了这个长长的阴影,真的很美。

我的脑海中有一个动画,我真的很想实现它:
我有一个像“Stackoverflow”这样的文字。我将此文本添加为​​ CSS-transition。当我悬停此文本时,它应该显示平滑的text-shadow
The thought in a demo
容易的。但是这个长长的影子怎么会出现呢?那会很好。但是对于这个动画来说,这将是一个巨大的 CSS。不合理。

所以我问你们聪明的头脑。你知道任何简单的 CSS 技巧,或者有没有办法通过 JavaScript 或其他库来实现这一点?那我觉得有可能比我的小想法更惊人的效果......

【问题讨论】:

  • 是的,我认为它会涉及许多 CSS 行,就像您给出的示例一样。我只是使用图形。
  • 我认为像您的示例中那样使用更少的 CSS 行是不可能的。所以你可以使用这个丑陋的代码或图形。我认为没有其他解决方案...
  • 对于简单的形状,您可以通过复制元素并使其倾斜来实现
  • @ChrisLTD:所以喜欢在 Photoshop 中做同样的事情 (awwwards.com/…)?嗯。不知道如何意识到这一点。
  • (删除了我的答案)zurb.com/playground/css-boxshadow-experiments 有一些演示动画box-shadow。也许您可以将其用作text-shadow 动画的灵感?

标签: css shadow


【解决方案1】:

查看本教程,了解如何使用 Sass:http://css-tricks.com/metafizzy-effect-with-sass/

看看这个 CodePen 的完整结果:http://codepen.io/hugo/pen/nwivF

您上面的示例几乎是使用纯 CSS 完成此操作的唯一方法,虽然它看起来确实很疯狂 - 它可以让您使用过渡等调整这些文本阴影。

【讨论】:

  • 很酷的方式,但问题与普通 CSS 相同:LoC 太多。示例中的转换也可以仅使用 CSS。不过无论如何,这是一篇有趣的文章,我会完整地阅读它,也许我会找到另一种方式......
  • @dTDesign 我对您寻求更好、更精简的解决方案来解决这个问题表示同情。但是考虑到当前的标准和支持,没有办法让它比你自己的例子更精简,正如前端专家已经提到的那样。我会使用一个智能的 SASS mixin 来完成繁重的工作,并让它每次都编译所需的 CSS。这样,您只需维护几行代码。去 SASS,你不会后悔的。
  • @WallaceSidhrée:是的。我懂了。可悲的是。是的,使用 SASS 这将是一个好方法。
【解决方案2】:

我发现,大约 1 周后,目前还没有精简且可动画的解决方案。
但是当我忽略我最重要的要求时,就会有不同的可能性。
因此,我想对我发现的所有这些可能性进行简要概述。

仅 CSS

大容量文本阴影解决方案
第一个解决方案是我发布的示例代码。它非常庞大,但结果看起来与示例图片非常相似。但是,如果我想为这段代码设置动画,例如使用 transition,它将是一个非常大的 CSS 代码。
结论

+ Very similar to the original effect on pictures
+ An only CSS way
+ Possible to generate CSS only animations
- Generate big bunch of CSS code
- Hard to create animations

工具和示例
生成唯一 CSS 方式的最佳工具之一是 Long Shadow Generator by Juani Ruiz Echazú


使用 rgba 的大容量文本阴影解决方案
Michael Mendelsohnanswer 中,他建议使用rgba 添加opacity 以产生漂亮的淡出效果。它可以得到更小的 CSS,可能也更容易制作动画。但它不会像在图形上那样产生类似的效果。
结论

+ An only CSS way
+ Possible to generate CSS only animations
+ Could be a slimmer CSS code than without rgba
+ Could be easier to generate animations
- Not similar to the original effect
- For a longer shadow, it will be again a lot of CSS

工具和示例
只需阅读迈克尔门德尔松的答案。在互联网上没有找到任何示例/工具,也没有时间创建一个,因为它不是我的案例可接受的解决方案。


使用 SCSS 的大容量文本阴影解决方案
为了减少第一个解决方案的 LoC(代码行),Front End Guy 建议使用 SCSS。代码会更苗条,但看起来很笨拙,更难理解。但是这个更纤细的代码现在并且将保持非常大。 结论

+ Very similar to the original effect
+ An only CSS way
+ Possible to generate CSS only animation
+ Slimmer CSS than without SCSS...
- ... but it will be remain a bulky CSS
- Not everybody is familiar with SCSS so the code is going to be incomprehensible
- Hard to create animations

工具和示例
有一个Codepen Example 向您展示了如何使用 SCSS 在不同的对象(图标、字体等)上创建长阴影效果


仅 JavaScript

仅使用 JavaScript 生成 CSS
user1724911answer 描述了一种使用 JavaScript 生成 CSS 的方法。在后台,它再次生成了一大堆代码,但是 JavaScript 代码比“硬编码”的 CSS 要小得多。动画也可以用同样的方式(看看 user1724911 的回答)。
结论

+ Very similar to the original effect
+ To develop code is a lot slimmer
+ Animations are easy and lean to create
- In the background, there is this big bulky CSS code
- performance

工具和示例
查看 user1724911 的答案,还可以查看动画代码。我创建了一个小例子。只需 1 个 HTML 标记和几行 JavaScript。 Codepen Example


jQuery 插件
我还为 Long-Shadow 找到了一个小的 jQuery Plugin。它非常易于使用,但会产生(在我看来)难看的阴影效果。
结论

+ Extreme easy-to-use
- Very ugly effect

工具和示例
我找到了这个插件here


图形和 JavaScript

极客问题
有一个网站具有非常令人惊叹和美妙的长影效果。该站点称为We Are Impero。所以我问 Impero 团队,他们是如何产生这种奇妙的效果的。如果使用了图书馆或其他东西。这是他们的答案:

这一切都是定制设计和建造的。没有可工作的框架,这是一项非常艰巨的任务!

所以是用图形和JavaScript自制的。
结论

+ Most wonderful long-shadow effect i've ever seen
- Self made. And it was a hard work.
- Graphic, CSS & JavaScript are required

工具和示例
尽情享受We are Impero的网站吧。


仅图形

Photoshop 作品
因此,还有一种方法可以将这种效果创建为图像。这是最简单的方法,而且是“原始”。但遗憾的是不能动画化......或者,当我将图片悬停时,我会用动画创建一个 gif 并显示它?不是真的:-)
结论

+ The "original" effect
+ most adaptable
- Not animatable

工具和示例
在网络上,有成百上千的 Long-Shadow 示例。只是谷歌它。 Awwwards 写了一篇很酷的文章,介绍如何在 Photoshop 中创建这种长阴影效果。


所以感谢大家的回答、想法、灵感和论点。我会给他们,我在我的回答中链接了他们,因为没有你,我只有 1 个解决方案。
也许在未来,有可能更容易地创造这样的东西。

干杯 dTDesign

【讨论】:

    【解决方案3】:

    这是我的代码,我在我的网站上使用它:

    .longShadow{
        color:#fff;
        text-shadow:
        1px 1px rgba(0,0,0,0.01),
        2px 2px rgba(0,0,0,0.03),
        3px 3px rgba(0,0,0,0.025),
        4px 4px rgba(0,0,0,0.02),
        5px 5px rgba(0,0,0,0.015),
        6px 6px rgba(0,0,0,0.01),
        7px 7px rgba(0,0,0,0.01),
        8px 8px rgba(0,0,0,0.01),
        9px 9px rgba(0,0,0,0.01),
        10px 10px rgba(0,0,0,0.01),
        11px 11px rgba(0,0,0,0.01),
        12px 12px rgba(0,0,0,0.01),
        13px 13px rgba(0,0,0,0.01),
        14px 14px rgba(0,0,0,0.01),
        15px 15px rgba(0,0,0,0.01),
        16px 16px rgba(0,0,0,0.01),
        17px 17px rgba(0,0,0,0.01),
        18px 18px rgba(0,0,0,0.01),
        19px 19px rgba(0,0,0,0.01),
        20px 20px rgba(0,0,0,0.01),
        21px 21px rgba(0,0,0,0.01),
        22px 22px rgba(0,0,0,0.01),
        23px 23px rgba(0,0,0,0.01);
    }
    

    【讨论】:

    • 最佳答案,复制并粘贴,然后一切对我来说都很好,谢谢老兄:)
    【解决方案4】:

    您可以通过 javascript 生成文本的阴影平面。看看这个:

    <html>
     <head>
      <style>
       body { // in this example I used 'body' as animated content
        font-weight: bold;
        font-size: 65px;
        color:rgb(155,155,155);
        transition: text-shadow 0.5s linear;
        -moz-transition: text-shadow 0.5s linear;
        -webkit-transition: text-shadow 0.5s linear;
        -o-transition: text-shadow 0.5s linear;
        text-shadow: 1px 1px 0px rgba(0,0,0,1);
       }
      </style>
      <script> // here we can add some styles, generated by js.
       var text_shadow = '';
       for(var p = 0; p < 100; p++)
       {
        text_shadow += (text_shadow? ', ' : '') + 2*p + 'px '+ 2*p +'px 1px rgba(0,0,0,' + 1/(p+1) + ')';
       }
       document.head.innerHTML += "<style> body:hover { text-shadow: " + text_shadow + ";  } </style>";
      </script>
     </head>
     <body>Stackoverflow</body>
    </html>
    

    但是,像这样的代码,对于慢速 CPU 来说很难(一些文本需要 100 个平面)......请记住这一点。

    【讨论】:

    • CSS 多的问题没有解决。当我使用我的“硬编码”css时,这将是一样的困难。不过还是谢谢你的脚本
    • 是的,但它是由 js 生成的,并且脚本的行数比源页面上的“硬编码”css 少。有些人在js上搭建虚拟机(用于浏览器),想象一下他们的代码有多长……
    【解决方案5】:

    我建议采用不同的方法。您不会绕过多个文本阴影,而是尝试使用 rgba(0,0,0,val) 代替,其中 val 是介于 0.5 和 0 之间的数字。然后,您可能不需要那么多迭代.

    试试这个:

    text-shadow: 1px 1px 1px rgba(0,0,0,.5),2px 2px 1px rgba(0,0,0,.4),3px 3px 1px rgba(0,0,0,.3),4px 4px 1px rgba(0,0,0,.2),5px 5px 1px rgba(0,0,0,0.1)

    你可以使用任何你想要的距离和迭代次数。只是一个建议。

    【讨论】:

    • 和示例代码一样。您只添加了不透明度。这两种方式没有区别。在这里,我添加了较低的不透明度,以另一种方式添加了另一种颜色。但是当我使用“淡出”效果时,这将是一个好方法。
    【解决方案6】:

    我给你我的尝试,第一个只使用 CSS,另一个使用 CSS 和自定义背景 PNG 图像。

    • 1。仅 CSS(还不好)

    我尝试使用带有透明背景的 :before 和 :after 来代替这张图片,但现在还不够好。

    你可以在这里看到,我在阴影的右侧部分有一个小错误

    http://codepen.io/gfra/pen/KtoDB

    我仍在努力,但如果这里有人有时间,欢迎您提供帮助。

    • 2 CSS 和 PNG 图片(看起来不错)

    我知道使用图片不是最有效的解决方案,它是否会在页面加载时添加一个 http 请求,但我有一个 CDN 来传送我的图片,所以这不是我网站上的性能问题。

    如果您关心性能问题,我发现结果远非完美,但相当不错。我使用这种方法是因为我有很多长阴影要添加到我的页面中,并且我不希望 jquery 在页面加载时工作太多。

    我仍在试图弄清楚如何使其自动调整到 div/a 的内容。目前,有一些神奇的数字可以满足所需的尺寸。

    http://codepen.io/gfra/pen/DLzxC

    【讨论】:

    • 效果看起来很奇怪。它看起来像每个字符后面的正方形。但这是另一种方式。我想今晚我会尝试一下你的解决方案。谢谢你,等等;)
    • png 图像在其上部进行了模糊处理,以模仿所有字符轮廓的真实阴影。但它实际上不是一个真实的,这就是为什么我说它并不完美,即使它看起来不错。我分享这个是因为也许有人可以帮助我改进它。
    【解决方案7】:

    如果您查看您的信用图片,就会发现很多 CSS:http://cssdeck.com/labs/google-fonts-css-longshade-icon

    /* Google Font flat longshade Icon in pure css
       Create with love by @LukyVj 
       Inspired by so much people an works over the internet.
    */
    
    @import url(http://fonts.googleapis.com/css?family=Marck+Script);
    body {
        -webkit-font-smoothing: antialiased;
        background: #333;
        overflow: hidden;
    }
    .container {
        width: 245px;
        margin: 180px auto;
    }
    div.icon {
        /*transform*/
        -webkit-transform: scale(1);
        -moz-transform: scale(1);
        -ms-transform: scale(1);
        -o-transform: scale(1);
        transform: scale(1);
        float: left;
        width: 245px;
        height: 245px;
        margin: 5px;
        display: block;
        background: rgb(150, 150, 150);
        font-family: "Marck Script",  sans-serif;
        text-align:center;
        font-size: 13em;
        font-weight: 500;
        line-height:.75;
        border-radius:15px;
        overflow:hidden;
    }
    
    div.icon:after {
        top: 0px;
        color: rgba(255, 255, 255, 0.9);
        width: 100%;
        height: 100%;
        display: block;
        overflow: hidden;
        position: relative;
        text-align: center;
        padding-top: 54.05px;
        box-sizing: border-box;
        /*box-shadow*/
        -webkit-box-shadow: 1px 1px 0px #000 ;
        -moz-box-shadow:1px 1px 0px #000 ;
        box-shadow:1px 1px 0px #000 ;
    }
    /*The shadow of the squares */
    .icon:before {
        content: '';
        display: block;
        float: left;
        width: 136%;
        height: 136%;
        position: absolute;
        margin: 29%;
        /*transform*/
        -webkit-transform: rotate(45deg);
        -moz-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
        -o-transform: rotate(45deg);
        transform: rotate(45deg);
        /*linear-gradient*/
        background: -webkit-gradient(linear,60.06% 107.04%,39.94% -7.04%,from(rgba(0,0,0,.1)),to(rgba(0,0,0,0)));
        background: -webkit-linear-gradient(100deg,rgba(0,0,0,.1),rgba(0,0,0,0));
        background: -moz-linear-gradient(100deg,rgba(0,0,0,.1),rgba(0,0,0,0));
        background: -o-linear-gradient(100deg,rgba(0,0,0,.1),rgba(0,0,0,0));
        background: linear-gradient(100deg,rgba(0,0,0,.1),rgba(0,0,0,0));
    }
    
    .gf:after {
       -webkit-font-smoothing: antialiased;
        content: "F";
        background: #dd473d;
        text-shadow: 1px 1px 0 rgba(0,0,0,.15),138px 138px 0px #a83027, 137px 137px 0px #a83027, 136px 136px 0px #a83027,135px 135px 0px #a83027, 134px 134px 0px #a83027, 133px 133px 0px #a83027,132px 132px 0px #a83027, 131px 131px 0px #a83027, 130px 130px 0px #a83027, 129px 129px 0px #a83027, 128px 127px 0px #a83027, 126px 126px 0px #a83027,125px 125px 0px #a83027, 124px 124px 0px #a83027, 123px 123px 0px #a83027,122px 122px 0px #a83027, 121px 121px 0px #a83027, 120px 120px 0px #a83027, 119px 118px 0px #a83027, 117px 116px 0px #a83027, 115px 114px 0px #a83027,113px 113px 0px #a83027, 112px 112px 0px #a83027, 111px 111px 0px #a83027, 110px 110px 0px #a83027, 109px 109px 0px #a83027, 108px 108px 0px #a83027, 107px 107px 0px #a83027, 106px 106px 0px #a83027, 105px 105px 0px #a83027, 104px 104px 0px #a83027, 103px 103px 0px #a83027, 102px 102px 0px #a83027, 101px 101px 0px #a83027, 100px 100px 0px #a83027, 99px 99px 0px #a83027, 98px 98px 0px #a83027, 97px 97px 0px #a83027, 96px 96px 0px #a83027, 95px 95px 0px #a83027, 94px 94px 0px #a83027, 93px 93px 0px #a83027, 92px 92px 0px #a83027, 91px 91px 0px #a83027, 90px 90px 0px #a83027, 80px 80px 0px #a83027, 79px 79px 0px #a83027, 78px 78px 0px #a83027, 77px 77px 0px #a83027, 76px 76px 0px #a83027, 75px 75px 0px #a83027, 74px 74px 0px #a83027, 73px 73px 0px #a83027, 72px 72px 0px #a83027, 71px 71px 0px #a83027, 70px 70px 0px #a83027, 69px 69px 0px #a83027, 68px 68px 0px #a83027, 67px 67px 0px #a83027, 66px 66px 0px #a83027, 65px 65px 0px #a83027,64px 64px 0px #a83027, 63px 63px 0px #a83027, 62px 62px 0px #a83027, 61px 61px 0px #a83027, 60px 60px 0px #a83027, 59px 59px 0px #a83027, 58px 58px 0px #a83027, 57px 57px 0px #a83027, 56px 56px 0px #a83027, 55px 55px 0px #a83027, 54px 54px 0px #a83027, 53px 53px 0px #a83027, 52px 52px 0px #a83027, 51px 51px 0px #a83027, 50px 50px 0px #a83027, 49px 49px 0px #a83027, 48px 48px 0px #a83027, 47px 47px 0px #a83027, 46px 46px 0px #a83027, 45px 45px 0px #a83027, 44px 44px 0px #a83027, 43px 43px 0px #a83027, 42px 42px 0px #a83027, 41px 41px 0px #a83027, 40px 40px 0px #a83027, 39px 39px 0px #a83027, 38px 38px 0px #a83027, 37px 37px 0px #a83027, 36px 36px 0px #a83027, 35px 35px 0px #a83027, 34px 34px 0px #a83027, 33px 33px 0px #a83027,32px 32px 0px #a83027, 31px 31px 0px #a83027, 30px 30px 0px #a83027, 29px 29px 0px #a83027, 28px 28px 0px #a83027, 27px 27px 0px #a83027, 26px 26px 0px #a83027, 25px 25px 0px #a83027, 24px 24px 0px #a83027, 23px 23px 0px #a83027, 22px 22px 0px #a83027, 21px 21px 0px #a83027, 20px 20px 0px #a83027, 19px 19px 0px #a83027, 18px 18px 0px #a83027, 17px 17px 0px #a83027, 16px 16px 0px #a83027, 15px 15px 0px #a83027, 14px 14px 0px #a83027, 13px 13px 0px #a83027, 12px 12px 0px #a83027, 11px 11px 0px #a83027, 10px 10px 0px #a83027, 9px 9px 0px #a83027, 8px 8px 0px #a83027, 7px 7px 0px #a83027, 6px 6px 0px #a83027, 5px 5px 0px #a83027, 4px 4px 0px #a83027, 3px 3px 0px #a83027, 2px 2px 0px #a83027, 1px 1px 0px #a83027, 15px 1px 0px #a83027,16px 2px 0px #a83027,17px 3px 0px #a83027,18px 4px 0px #a83027,19px 5px 0px #a83027,20px 6px 0px #a83027,21px 7px 0px #a83027,22px 8px 0px #a83027,
    23px 9px 0px #a83027,
    24px 10px 0px #a83027,
    25px 11px 0px #a83027,
    26px 12px 0px #a83027,
    27px 13px 0px #a83027,
    28px 14px 0px #a83027,
    29px 15px 0px #a83027,
    30px 16px 0px #a83027 , 
    31px 17px 0px #a83027,
    32px 18px 0px #a83027,
    33px 19px 0px #a83027,
    34px 20px 0px #a83027,
    35px 21px 0px #a83027,
    36px 22px 0px #a83027,
    37px 23px 0px #a83027,
    38px 24px 0px #a83027,
    39px 25px 0px #a83027,
    40px 26px 0px #a83027,
    41px 27px 0px #a83027,
    42px 28px 0px #a83027,
    43px 29px 0px #a83027,
    44px 30px 0px #a83027,
    45px 31px 0px #a83027,
    46px 32px 0px #a83027;
    }
    

    【讨论】:

    • 具有这么多 LoC 的解决方案并不是我所搜索的...我想用transitions 来玩这个阴影...所以我不能使用这么多 LoC。但无论如何,谢谢你的回答!
    • 嗯,你没有提到过渡。为什么你更喜欢过渡?您的编辑提到的“无法实现”的想法是什么?
    • 我编辑了我的问题。我想“玩”它。尝试不同的东西。例如,当我将鼠标悬停在一个图标上时,这个长长的阴影会随着这个过渡淡入...
    • 我只是不明白你为什么一直说 CSS-only?有哪些例子?除了一个文本阴影之外,由于供应商前缀,其余部分看起来很笨重。除非您只想支持最新版本的浏览器,否则您现在不会绕过供应商前缀。
    • 我只是希望能够为阴影设置动画。而且我只知道 CSS 和 JavaScript 来制作这样的动画。所以其他我不会... 我只是告诉你一个例子。而且我希望能够玩弄这些阴影!
    【解决方案8】:

    我在想的是使用长阴影的另一种方法是用颜色制作一个反应角度(使用颜色选择器来获取阴影 google) 然后将其与图像对齐。它必须解决您的问题。 看到这个钻石

    #diamond {
        width: 0;
        height: 0;
        border: 50px solid transparent;
        border-bottom-color: red;
        position: relative;
        top: -50px;
             }
    #diamond:after {
        content: '';
        position: absolute;
        left: -50px;
        top: 50px;
        width: 0;
        height: 0;
        border: 50px solid transparent;
        border-top-color: red;
               }
    

    【讨论】:

    • 我没有看到将它与单词一起使用的方法(如我的示例图片)。当我使用一个矩形时,它不可能适合一个词。
    【解决方案9】:

    最好的方法是使用 jquery flat shadow。

    https://github.com/peachananr/flat-shadow

    用法

    要在您的网站上使用它,只需将此处找到的最新 jQuery 库与 jquery.flatshadow.js 一起包含到您的文档中,然后是 html 标记和如下函数调用:

    <div class="flat-icon"> FLAT </div>
    <div class="flat-icon"> UI </div>
    

    ...

    $(".flat-icon").flatshadow({
      color: "#2ecc71", // Background color of elements inside. (Color will be random if left unassigned)
      angle: "SE", // Shadows direction. Available options: N, NE, E, SE, S, SW, W and NW. (Angle will be random if left unassigned)
      fade: true, // Gradient shadow effect
      boxShadow: "#d7cfb9" // Color of the Container's shadow
    });
    

    进一步定制

    使用 jquery.flatshadow.js,您可以将每个单独的元素应用到不同的效果,只需向您的标记添加数据颜色和数据角度,如下所示:

    <div data-color="#2ecc71" data-angle="NE" class="flat-icon"> FLAT </div>
    <div data-color="#1ABC9C" data-angle="NW" class="flat-icon"> UI </div>
    

    并删除此处所示的颜色和角度全局选项:

    $(".flat-icon").flatshadow({
      fade: true,
      boxShadow: "#d7cfb9"
    });
    

    现在,每个单独的元素都会有自己的效果,而无需您多次调用该函数。

    【讨论】:

    【解决方案10】:

    如果您使用 LESSCSS,此 mixin 将使用 mixin 制作扁平长阴影。

    https://github.com/zensimilia/less-long-shadow

    我在我的网站上使用它,效果很好

    【讨论】:

    • 看起来很有趣。但是我找不到演示。效果怎么样?
    【解决方案11】:

    老话题,但仍然通过在“如何在 css 中制作长阴影”的热门索引搜索而受到关注。

    我使用更现代的 CSS(剪辑路径)来解决元素长阴影的 2 行代码行解决方法,以避免我过去使用的 50 多行混乱 - 我发现它正在减慢我的浏览器。

    您可以按比例调整阴影/元素的大小,但它应该仍然有效,但对于 300 像素的方形 div 并使用 31 像素的盒子阴影:

      -webkit-box-shadow: 31px 31px 0px 31px rgb(38,64,100); 
      box-shadow: 31px 31px 0px 31px rgb(38,64,100);
    
      -webkit-clip-path: polygon(300px 0, 331px 31px, 331px 331px, 31px 331px, 0 300px, 0 0);
      clip-path: polygon(300px 0, 331px 31px, 331px 331px, 31px 331px, 0 300px, 0 0);
    

    我的工作示例here

    很好的clip path generator(请记住,您需要使元素小于 6 点剪辑路径,因为 box-shadow 不计入元素尺寸)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      相关资源
      最近更新 更多