34

「ロング シャドウ」と呼ばれるフラット UIとともに、新しいトレンドがあります。
これは例の写真です:

によって Luky Vj クレジット

私はそれが本当に好きで、今では自分のサイトにそのような効果が欲しい. でも絵は作らない、CSSでやりたい!(または HTML5、jQuery など)。

そのためのジェネレーター ( Juani Ruiz Echazú による Long Shadow Generator )は既に見つけましたが、生成された 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です。
デモでの考え方
簡単なもの。しかし、この長い影が現れるのはどうですか?それは素晴らしいことだ。しかし、このアニメーションだけでも膨大な CSS になります。理不尽。

だから私はそこに賢い頭をお願いします。簡単な CSS トリックを知っていますか、それとも JavaScript や他のライブラリでこれを実現する方法はありますか? それなら、私のちょっとした考えよりも素晴らしい効果が考えられると思います...

4

11 に答える 11

10

約 1 週間経った今、現時点では無駄のないアニメーション化可能なソリューションはありません。
しかし、最も重要な要件を無視すると、別の可能性が生じます。
そこで、私が見つけたこれらすべての可能性について少し概要を説明したいと思います。

CSSのみ

かさばる text-shadow ソリューション
最初のソリューションは、私が投稿したサンプル コードです。非常にかさばりますが、結果はサンプル写真と非常によく似ています。しかし、このコードをたとえば でアニメーション化したい場合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 方法を生成するための最良のツールの 1 つは、Juani Ruiz Echazú による Long Shadow Generator です


rgba を使用したかさばるテキスト シャドウ ソリューションMichael Mendelsohn回答
で は、かなりのフェードアウト効果を生成するために使用することを提案しています。CSS の束を小さくすることができ、アニメーション化も容易になる可能性があります。しかし、グラフィックのようにこのような効果は生成されません。結論rgbaopacity

+ 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

ツールと例
Michael Mendelsohn の回答を読んでください。私の場合、受け入れられる解決策ではないため、インターネットで例/ツールが見つからず、作成する時間がありませんでした。


SCSS を使用したかさばる text-shadow ソリューション
最初のソリューションの 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

ツールと例さまざまなオブジェクト (アイコン、フォントなど) で SCSS を使用して長い影の効果を作成する方法を示すCodepen の例
があります。


JavaScript のみ

JavaScript のみで CSS を生成する
user1724911回答では、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 のわずかな行だけです。コードペンの例


jQuery プラグインLong-Shadow 用
の小さなjQuery プラグインも見つけました。非常に使いやすいですが、(私の意見では)醜い影の効果が生成されます。
結論

+ Extreme easy-to-use
- Very ugly effect

ツールと例
このプラグインはこちらで見つかりました。


グラフィックと JavaScript

オタク向けの問題
本当に素晴らしい、素晴らしいロング シャドウ効果を持つサイトがあります。We Are Imperoというサイト。そこで、Imero のチームに、この素​​晴らしい効果を生み出す方法を尋ねました。ライブラリなどを使用した場合。これが彼らの答えでした:

それはすべてカスタム設計および構築されています。取り組む枠組みがなく、非常に難しいミッションでした!

なのでグラフィックとJavaScriptで自作です。
結論

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

ツールと例
楽しみましょう 私たちは Imperoの Web サイトです。


グラフィックのみ

Photoshop作業
ということで、この効果を画像として作成する方法もあります。それが最も簡単な方法であり、「オリジナル」です。しかし、悲しいことにアニメーション化できません...または、写真にカーソルを合わせると、アニメーションでGIFを作成して表示しますか? そうではありません:-)
結論

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

ツールと例
Web には、Long-Shadow の例がたくさんあります。グーグルで検索してください。Awwwardsは、Photoshop でこの長い影の効果を作成する方法についてのクールな記事を作成しました。


回答、アイデア、インスピレーション、議論に感謝します。あなたがいなければ、解決策は1つしかないので、回答でリンクした人に賛成票を投じます。
将来的には、そのようなものが簡単に作成できるようになるかもしれません。

乾杯

于 2013-08-16T14:39:11.590 に答える
6

これは私のコードです。私は自分のサイトで使用しています:

.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);
}
于 2014-03-30T20:11:51.480 に答える
2

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 プレーン) にとっては困難です... これだけは心に留めておいてください。

于 2013-08-14T16:18:13.153 に答える
2

別のアプローチをお勧めします。複数のテキスト シャドウを回避するつもりはありませんが、代わりに rgba(0,0,0,val) を使用してみてください。ここで、val はたとえば .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)

必要な距離と反復回数を使用できます。ただの提案です。

于 2013-08-16T13:14:57.617 に答える
1

最初は CSS のみを使用し、もう 1 つは CSS とカスタムの背景 PNG 画像を使用して試みました。

  • 1.CSSのみ(まだダメ)

この画像の代わりに背景を透明にして :before と :after を使用してみましたが、今のところまだ十分ではありません。

ここで自分の目で確かめてください。影の右側に小さなバグがあります。

ここに画像の説明を入力

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

まだ検討中ですが、お時間ある方いましたらよろしくお願いします。

  • 2 CSS と PNG 画像 (良さそう)

画像を使用することが最も効率的な解決策ではないことはわかっています。ページの読み込みに 1 つの http 要求が追加されますが、画像を配信する CDN があるため、これは私の Web サイトのパフォーマンスの問題ではありません。

完璧とはほど遠い結果ですが、パフォーマンスの問題を気にするならかなり良い結果だと思います. この方法を使用したのは、ページに追加する長い影がたくさんあり、ページの読み込み時に jquery があまり機能しないようにするためです。

div/a のコンテンツに合わせて自動調整する方法をまだ見つけようとしています。今のところ、必要な寸法に適合するいくつかのマジック ナンバーがあります。

CSS と PNG 画像による長い影

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

于 2013-10-07T06:00:00.330 に答える
0

最善の方法は、jquery フラット シャドウを使用することです。

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

使用法

Web サイトでこれを使用するには、ここにある最新の 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 を使用すると、次のようにマークアップに data-color と data-angle を追加するだけで、個々の要素を異なる効果で適用できます。

<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"
});

これで、関数を複数回呼び出さなくても、個々の要素に独自の効果がもたらされます。

于 2013-08-19T17:10:47.503 に答える