CSSによる内側のテキストの影


107

私は現在CSS3で遊んでいて、次のようなテキスト効果(黒いぼやけた内側の影)を実現しようとしています:

しかし、テキスト内にテキストの影を作成する方法が見つかりません。box-shadow要素が次のように内部で影をレンダリングできるため、それがまだ可能かどうか疑問に思います。

box-shadow: inset 0px -5px 10px 0px rgba(0, 0, 0, 0.5);

何か案は?


3
あなたがいくつかの目の錯覚に行く準備ができていなければ、これに対する答えはありません...
Aaria Carter-Weir

回答:


105

これが、:beforeおよび:after疑似要素を使用して発見した小さなトリックです。

.depth {
    color: black;
    position: relative;
}
.depth:before, .depth:after {
    content: attr(title);
    color: rgba(255,255,255,.1);
    position: absolute;
}
.depth:before { top: 1px; left: 1px }
.depth:after  { top: 2px; left: 2px }

タイトル属性はコンテンツと同じである必要があります。デモ:http : //dabblet.com/gist/1609945


1
いいね!クリエイティブ:)それでも、Photoshop風になりたいとは思いません。上/左の値をそれぞれ5pxに設定して、5pxの内側のシャドウオフセットを達成できますが、文字がもう一方の端から漏れます。
ericteubert 2012年

1
ええ、それは底にわずかな白のヒントがあるだけでよく見えます。2pxを超えると外観が崩れます。
Web_Designer 2012年

1
驚くばかり!これを使用して、不透明度を.9に上げることで白いテキストを作成したり、不透明度を.1に維持して色を反転させてベベルエッジを作成したりすることもできます。(+1)
JohnB 2012

素晴らしいソリューション。しかし、FEテキスト勾配との組み合わせで失敗した;。。(あまりにも悪い我々は偉大なテキスト効果のためのいくつかの年かそこらのためにCSS4を待つ必要がありますね
マイケルTrouw

それはクロムでクールです、私はFFの代替フォールバックを行うのに苦労していますが、それはJSと名前空間クラスを使用しないとChromeには適用されません。何かご意見は。PSは、リース効果bgで美しく機能し、ブランドスタンプのように見えます。
ハンコック

43

次のように、テキストシャドウを使用してそれを実行できるはずです。

.inner_text_shadow
{
    text-shadow: 1px 1px white, -1px -1px #444;
}

ここに例があります:http : //jsfiddle.net/ekDNq/


8
ええと、ええ、ちょっと。視覚効果はこれらのパラメーターと同様ですが、それでもフォントの背後にある影です。内部ではありません。私の例では、インセットシャドウをぼかすこともできますが、ここでは効果が失われます。だから...まだ最高の解決策ですが、それでも視覚的な錯覚のハックです;)
ericteubert

2
これを行うと、フォントが太くなります。中小規模のフォントの場合は、必要ない場合があります。
Jonatan Littke 2013年

20

これが私の最善の試みです:

    .inner_shadow {
    color:transparent;
    background-color:white;
    text-shadow: 0 0 20px rgba(198,28,39,0.8), 0 0 0 black;
    font-family:'ProclamateHeavy';  // Or whatever floats your boat
    font-size:150px;
    }
   
    <span class="inner_shadow">Inner Shadow</span>
   

問題は、エッジの周りににじむ影をどのように切り取るかです!!! background-clip:textを使用してwebkitで試しましたが、webkitは背景の上に影をレンダリングするため、機能しません。

CSSでテキストマスクを作成しますか?

トップマスクレイヤーがないと、テキストに真の内側の影を付けることができません。

おそらく誰かがW3Cにbackground-clip:reverse-textを追加することを勧めるべきでしょう。これは、テキストの内側に収まるように背景をカットするのではなく、背景を通してマスクをカットします。

それか、テキストシャドウを背景の一部としてレンダリングし、background-clip:テキストでクリップします。

同じテキスト要素をその上に完全に配置しようとしましたが、問題はbackground-clipです。テキストはテキストの内側に収まるように背景をトリミングしますが、その逆が必要です。

私はテキストストロークを使用してみました:20px白; この要素とその上の要素の両方にありますが、テキストストロークは内側にも外側にも移動します。

別の方法

現在、CSSで反転テキストマスクを作成する方法はないため、SVGまたはCanvasを使用して、3つのレイヤーでテキスト置換画像を作成し、効果を得ることができます。

SVGはXMLのサブセットであるため、SVGテキストは引き続き選択および検索可能であり、Canvasよりも少ないコードで効果を生み出すことができます。

Canvasでこれを実現するのは、SVGのようにレイヤーを備えたdomを持たないため、困難になります。

SVGはサーバー側で生成することも、ブラウザでJavaScriptのテキスト置換メソッドとして生成することもできます。

参考文献:

SVGとCanvas:

http://dev.opera.com/articles/view/svg-or-canvas-choosing-between-the-two/

SVGテキストでのクリッピングとマスキング:

http://www.w3.org/TR/SVG/text.html#TextElement


2
あなたの最善の努力について、例を挙げてより詳細な説明を投稿しました。見てみな!
アルバメンデス2013年

1

あなたの例には外側の影があります
AlexKh

12

kendo451の回答におけるCSSのより正確な説明

派手なハックの内側の影の錯覚を取得する別の方法があり
ます。3つの簡単な手順で説明します。次のHTMLがあるとします。

<h1>Get this</h1>

そしてこのCSS:

h1 {
  color: black;
  background-color: #cc8100;
}

いいスローガンです

ステップ1

テキストを透明にすることから始めましょう:

h1 {
  color: transparent;
  background-color: #cc8100;
}

それは箱です

ステップ2

次に、その背景をテキストの形にトリミングします。

h1 {
  color: transparent;
  background-color: #cc8100;
  background-clip: text;
}

背景はテキストです!

ステップ3

さて、魔法:ぼかしを入れますtext-shadow。これは背景の前にあり、内側の影の印象を与えます!

h1 {
  color: transparent;
  background-color: #cc8100;
  background-clip: text;
  text-shadow: 0px 2px 5px #f9c800;
}

わかった! わーい!

最終結果をご覧ください。

欠点?

  • Webkitでのみ機能します(background-clipはできませんtext)。
  • 複数の影?考えさえしないでください。
  • あなたも外の輝きを得る。

「複数の影?考えさえしないでください。」どうtext-shadow: 1px 1px 1px #000, 3px 3px 5px blue;ですか?
モーフィアス2013

@Morpheus このメソッドの欠点 1つは、テキストに複数の影を適用できないことです。
アルバメンデス2013

この例のサイズと明るさのため、他の人が見にくくなっています。これらをコードスニペットに移動できますか?ありがとう!
Josh Habdas

12

エレガント例マークアップ内に配置ラッパーまたは重複コンテンツを必要としません。

:root {
  background: #f2f2f2;
}
h1 {
  background-color: #565656;
  font: bold 48px 'Futura';
  color: transparent;
  text-shadow: 0px 2px 3px rgba(255, 255, 255, 0.8);
  -webkit-background-clip: text;
  -moz-background-clip: text;
  background-clip: text;
}
<center>
  <h1>Text With Inner Shadow</h1>
</center>

暗い背景にも似合う:

:root {
  --gunmetal-gray: #2a3439;
  background: var(--gunmetal-gray);
}

h1[itemprop="headline"] {
  font-family: 'Futura';
  font-size: 48px;
  padding-bottom: 0.35rem;
  font-variant-caps: all-small-caps;
  background-color: var(--gunmetal-gray);
  color: transparent;
  text-shadow: 0px 2px 3px rgba(255, 255, 255, 0.1);
  -webkit-background-clip: text;
  -moz-background-clip: text;
  background-clip: text;
  filter: brightness(3);
}
<center>
  <h1 itemprop="headline">Text With Inner Shadow</h1>
</center>

AND ME LINK およびME2 ​​LINK


シンプルで、マークアップを調整する必要はありません。すごい仕事!
Josh Habdas

10

あなたは一種のこれを行うことができます。残念ながら、テキストシャドウにインセットを使用する方法はありませんが、色と位置でそれを偽造することができます。ぼかしを右下に取り、右上に沿って影を配置します。このような何かがうまくいくかもしれません:

background-color:#D7CFBA;
color:#38373D;
font-weight:bold;
text-shadow:1px 1px 0 #FFFFFF;

...しかし、どの色を使用するかについては本当に注意深くする必要があります。そうしないと、見落とされてしまいます。これは本質的に目の錯覚であるため、すべての状況で機能するわけではありません。また、小さいフォントサイズでは見栄えがよくないので、注意してください。


本当に私が探しているものではありません。あなたの提案の効果は興味深いですが、私が投稿した例とはかけ離れています。
ericteubert 2010年

その場合、CSS3ではなく、答えはありません。すみません、助けられませんでした。
ホリスク

この回答にbackground-clip示すように、インセットシャドウを使用できます
Josh Habdas

10

複数の影やそのような豪華なものは必要ありません。負のy軸で影をオフセットするだけです。

明るい背景の暗いテキストの場合:

text-shadow: 0px -1px 0px rgba(0, 0, 0, .75);

背景が暗い場合は、色とy位置を反転させるだけです。

text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.75);

RGBA値、不透明度、ブラーをいじって、効果を適切に調整します。それはあなたが持っている色のフォントと背景に大きく依存し、フォントが重いほど良いです。


3
それでも単なる錯覚であり、本当の内側の影はありません。
ericteubert 2011

25
...すべての影が目の錯覚ではありませんか?
チャーリーシュリーサー、2011

あなたは不機嫌です@eteubert ...本当に意味します
Jamie Hutber '10 / 07/13

7

バリエーションのこの小さな宝石を試してください:

text-shadow:0 1px 1px rgba(255, 255, 255, 0.5);

普段は「解答なし」に挑戦


1
これにより、フォントの下部に白い輪郭が作成されますが、黒いぼやけた内側の影を探していました。
ericteubert 2010年

1
これは、特に小さなテキストをシャドウイングするときに、私にとって最も効果的でした。必要に応じて、RGB値を少し調整して、フォントの色で正しく見えるようにすることをお勧めします。
Cory Schires、2011年

6

提案されたソリューションの多くを見てきましたが、期待していたものはまったくありませんでした。

これが私の最高のハックです。ここでは、色は透明で、背景と上部のテキストシャドウは不透明度が異なる同じ色で、マスクをシミュレートしています。2番目のテキストシャドウは、より濃い、より飽和したバージョンの色です。実際に欲しい(HSLAでかなり簡単にできる)。

ここに画像の説明を入力してください

(ところで、複製スレッドのOPに基づくテキストとスタイル)


6

テキストに内側の影が必要な場合がいくつかありましたが、次のことがうまくいきました。

.inner {
    color: rgba(252, 195, 67, 0.8);
    font-size: 48px;
    text-shadow: 1px 2px 3px #fff, 0 0 0 #000;
}

これにより、テキストの不透明度が80%に設定され、2つの影が作成されます。

  • 1つ目は、白いテキスト(テキストが白い背景にあると想定)で、左から1px、上から2pxオフセットされ、ぼかされた3pxです。
  • 2番目は黒い影で、不透明度80%のテキストからは見えますが、最初の影からは見えません。つまり、最初の影がずれている部分(左から1px、上から2px)だけがテキスト文字内に表示されます。この目に見える影のぼかしを変更するには、最初のレイヤーの影のぼかしパラメーターを変更します。

注意事項

  • これは、100%の不透明度でなくてもテキストの希望の色を実現できる場合にのみ機能します。
  • これは、背景色が無地の場合にのみ機能します(したがって、テクスチャの背景にテキストが配置されている質問者の特定の例では機能しません)。



4

誰もがこれに対する答えを持っているようです。@Web_Designerのソリューションが気に入っています。しかし、それはそれほど複雑である必要はなく、それでもあなたが探しているぼやけた内側の影を得ることができます。

http://dabblet.com/gist/3877605

.depth {
    display: block;
    padding: 50px;
    color: black;
    font: bold 7em Arial, sans-serif;
    position: relative;
 }

.depth:before {
    content: attr(title);
    color: transparent;
    position: absolute;
    text-shadow: 2px 2px 4px rgba(255,255,255,0.3);
}


3

上に構築 :before :after web_designerによって技術、ここにあなたの外観に近づくものです。

まず、テキストを内側の影の色にします(OPの場合は黒っぽい)。

ここで、:after psuedoクラスを使用して、元のテキストの透明な複製を作成し、その上に直接配置します。通常のテキストシャドウをオフセットなしで割り当てます。元のテキストの色を影に割り当て、必要に応じてアルファを調整します。

http://dabblet.com/gist/2499892

PSの場合のように、シャドウの広がりなどを完全に制御することはできませんが、ぼかしの値が小さい場合は、かなりまとまります。影がテキストの境界を越えているため、背景と前景のコントラストが高い環境で作業している場合、それは明らかです。コントラストの低いアイテム、特に同じ色相のアイテムでは、それほど目立ちません。たとえば、この手法を使用して、金属の背景に非常に見栄えの良いエッチングされたテキストを作成することができました。


3

以下は、background-clip CSS3プロパティを使用したTRUEインセットテキストシャドウの優れたソリューションです。

.insetText {
    background-color: #666666;
    -webkit-background-clip: text;
    -moz-background-clip: text;
    background-clip: text;
    color: transparent;
    text-shadow: rgba(255,255,255,0.5) 0px 3px 3px;
}

そのリンクは現在壊れているようです。
Nick White

ルックスのwebkitのでの素敵な、まだFirefoxの18のための無ゴー
gmeben

これはサポートが限られている可能性がありますが、これは実際にはめ込まれているため、これが大好きです。
ジュリアンK

2

ここにいくつかのアイデアを見て、私が思いついたのはこれです。主なアイデアは、テキストの色が両方の影と混じり合うことであり、これは灰色の背景で使用されていることに注意してください(そうしないと、白がうまく表示されません)。

.inset {
    color: rgba(0,0,0, 0.6);
    text-shadow: 1px 1px 1px #fff, 0 0 1px rgba(0,0,0,0.6);
}

1

インセットテキストシャドウにこの例を試してください。これがHTMLです

<h1 class="inset-text-shadow">Inset text shadow trick</h1>

そしてCSS

body {
    background: #f8f8f8;
}
h1 {
    font-family: Helvetica, Arial, sans-serif;
    font-weight: bold;
    font-size: 6em;
    line-height: 1em;
}
.inset-text-shadow {
    /* Shadows are visible under slightly transparent text color */
    color: rgba(0,0,0,0.6);
    text-shadow: 2px 8px 6px rgba(0,0,0,0.2), 0px -5px 35px rgba(255,255,255,0.3);

}

Demo on Jsfiddle


0
text-shadow: 4px 4px 2px rgba(150, 150, 150, 1);

ボックスシャドウの場合:

-webkit-box-shadow: 7px 7px 5px rgba(50, 50, 50, 0.75);
-moz-box-shadow:    7px 7px 5px rgba(50, 50, 50, 0.75);
box-shadow:         7px 7px 5px rgba(50, 50, 50, 0.75);

オンラインテキストとボックスシャドウが表示されます: オンラインテキストとボックスシャドウ

より多くの例については、このアドレスに行くことができます: より多くの例のコードfreeclup


0

これを達成するためのはるかに簡単な方法があります

.inner{color: red; text-shadow: 0 -1px 0 #666;} // #666 is the color of the inner shadow

ボイラ


0

小さめのボタンの通常サイズのテキスト

このページの他のアイデアは、小さなテキスト文字の小さなボタンで使用すると効果が失われることがわかりました。この回答は、RobertPittの回答を拡張したものです

ここにマイナーな調整があります:

text-shadow: 1px 1px transparent, -1px -1px black;

注意:

このサイトを使っ色合いを調整しました。


-1

このサイトから使っていますが、見た目も良いです。見てくださいインナーシャドウ


1
これに反対票を投じた人は、これがどのように反対投票される資格があるかを言うことができます。この回答が質問から逸脱した場合はどうなりますか?または、スパマーだと思います。説明できる場合は、ここで私の回答を更新できます
vkGunasekaran

+1 Web_Designerと同じ答えですが、より詳しく説明されています。おそらく、反対投票者は、あなたの回答が基本的に先に投稿された回答と同じであるという事実を気に入らなかったのかもしれません。しかし、ここに行きます。私はあなたのためにそれを補償しました:)
Jules Colle

2
ただ反対投票。これは重複しているだけでなく、問題を説明したり、スニペットを提供したりするのではなく、単なるリンクです。私の意見では、それは著者からの最小限の努力を示しています。私見、そしてFTR。
アルバメンデス2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.