これが [〜#〜] jsfiddle [〜#〜] 私の猫/アニメーションなしdrop-shadows
問題をできるだけ明確に示すため。私の理解では、これはborder-radius
が原因であり、おそらくoverflow: hidden;
が原因です。
フクロウは、この質問が何であるかではなく、私がいた同様の状況の単なる例です。jsfiddle/ catは、この質問が何であるかです。
これは [〜#〜] jsfiddle [〜#〜] であり、box-shadow
のblur
プロパティを使用して、ボックスシャドウを挿入した猫の場合、ピクセル化されたエッジは目の周りはまだ同じです。
ここでの答えは、私がフクロウの画像で見たものを解決しますが、この答えが何であるかについては解決しません。
これは、3番目の値blur
を使用しているときにinset box-shadow
を付けた猫です。
私はこのフィドルをSafari、Chrome、Firefoxでテストしましたが、すべて同じように表示されているようです。
私は Cheshire Cat に2つの目があります。昨日CSSから作り始めました。すべてが非常によくレンダリングされ、私は Owl (も作成しました。これは同様の状況だと最初に思いましたが、そうではありません)エッジの周りでピクセル化されている目に非常に小さなまだ似た問題があるCSSから。
また、目を紫色の境界線で表示しようとしましたが、ピクセル化されたエッジは境界線のエッジで同じままでした。
新しいCSSの作成では、目の外側のエッジが非常にピクセル化されており、親サークルの色(黄色)のように見えます。
こちらが目のCSSです。
.eye {
border-radius: 50%;
height: 100px;
width: 100px;
background: #FAD73F;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
overflow: hidden;
position: relative;
display: inline-block;
box-shadow: 0 3px 15px rgba(0, 0, 0, 0.4);
z-index: 100;
}
.pup {
border-radius: 50%;
height: 20px;
width: 20px;
background: #2b2b2b;
display: block;
position: absolute;
top: 40px;
left: 40px;
}
.lidT {
display: block;
width: 100px;
height: 100px;
background: #821067;
position: absolute;
top: -80px;
z-index: 20;
}
.lidB {
display: block;
width: 100px;
height: 100px;
background: #821067;
position: absolute;
bottom: -80px;
z-index: 20;
}
以下は、このアニメーション/クリーチャーを作成するために使用したjsfiddleです。
問題の原因は...
問題の根本は、自分の.lidT
に含まれている.lidB
および.eye
クラスが原因であると思います。
まぶたを縁の1px
で切り取ってくれているようです。フィドルで目を点滅させて、私が何を言っているのか見てみてください。
画像も問題外ではありませんが、学習上の理由から、CSS画像を最初に作成することに固執したいと思います。
役に立たないスタイルのリスト
box-shadow
border
box-sizing
Firefoxのみのバグではない
終了リスト
更新
回避策は、目のソケットまたは外側のメインタグを目に追加することです。これはピクセレーションを隠しますが、問題の回避策にすぎません。
詳細については、apul34208の回答を参照してください
ここにapaul34208回答の問題があります、
目の左側と上側がどのように平坦であるかを確認してください質問がブラウザーの問題かcssかを知りたいです。
更新の終了
2013年11月13日現在の最適なオプション
.eye
で背景のグラデーションを使用することは、これまでで最もクリーンなソリューションのようです。 ScottSの回答を参照してください。
これは、Firefox、Chrome、Safari、IEでも機能します。 (IE buの少しラフは以前よりはるかに良い)
どんな助けも大歓迎です!
これには、追加のHTMLマークアップは必要ありません。私はFirefoxでテストしました(SafariおよびChromeもコメントを参照)で動作することが確認されています)。これにより、目の背景がEdgeから少し離れた紫色になります。次に、色に放射状の背景グラデーションを使用して、残りの部分を黄色にします。これにより、border-radius
に基づいて「非表示」しようとしているエッジに沿って見られる「ブレンド」(および黄色化)が回避されているようです。 overflow: hidden
の組み合わせ。
これは、紫色の1px
を使用した元のソリューション/フィドルの例です。 ただし、ドロップシャドウを削除しても 変色をわずかに検出できます 。だから私は以下の答えを2px
の広い紫色の境界線に更新しました ドロップシャドウを削除したこのウィンクしている猫は変色が発生していないことを示しています 。
これは(2px
に更新された)コードです。
.eye {
border-radius: 50%;
height: 100px;
width: 100px;
background: #fad73f; /* Old browsers */
background: -moz-radial-gradient(center, ellipse cover, #fad73f 0, #fad73f 48px, #821067 49px); /* FF3.6+ */
background: -webkit-gradient(radial, center center, 0, center center, 100%, color-stop(0,#fad73f), color(48px,#fad73f), color-stop(49px,#821067)); /* Chrome,Safari4+ */
background: -webkit-radial-gradient(center, ellipse cover, #fad73f 0,#fad73f 48px,#821067 49px); /* Chrome10+,Safari5.1+ */
background: -o-radial-gradient(center, ellipse cover, #fad73f 0,#fad73f 48px,#821067 49px); /* Opera 12+ */
background: -ms-radial-gradient(center, ellipse cover, #fad73f 0,#fad73f 48px,#821067 49px); /* IE10+ */
background: radial-gradient(ellipse at center, #fad73f 0,#fad73f 48px,#821067 49px); /* W3C */
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
overflow: hidden;
position: relative;
display: inline-block;
box-shadow: 0 3px 15px rgba(0, 0, 0, 0.4);
z-index: 100;
}
私はあなたの問題の解決策があると思います。基本的には、眼窩を追加して、眼ではなく眼窩のオーバーフローを隠すだけです。
<span class="socket">
<span class="eye">
<span class="lidT"></span>
<span class="pup"></span>
<span class="lidB"></span>
</span>
</span>
.socket {
border-radius: 50%;
height: 102px;
width: 102px;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
overflow: hidden;
position: relative;
top: -1px;
left: -1px;
display: inline-block;
box-shadow: 0 3px 15px rgba(0, 0, 0, 0.4);
z-index: 100;
}
.eye {
border-radius: 50%;
height: 100px;
width: 100px;
background: #FAD73F;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
position: relative;
top: 1px;
left: 1px;
display: inline-block;
box-shadow: 0 3px 15px rgba(0, 0, 0, 0.4);
z-index: 100;
}
あなたが認識しているピクセレーションは、box-shadow
またはoverflow
ではなくborder-radius
の結果であると思います。
ブラウザは、円の内側上部に1px #2b2b2b
線を描画しようとしています。この線は曲線のパス上にあり、幅が1px
として表示される必要があるため、ギザギザに見えるようにバインドされています。
box-shadow
プロパティにblur
(または3番目の値)を設定してみてください。
前後:
この jsFiddleデモ の2つの丸められた<div/>
sの違いを見てください。
この回答を参照してください: stackoverflow.com/questions/6001281/firefox-border-color-border-radius-and-background-color-creates-ragged-edges-a#6001374
そして、この他のすでに受け入れられている答え: Border-radius bleeding
背景をクリッピングしてみてください。
.your-element {
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
考えた後、エッジピクセルを「ぼかす」のは正常な動作です。ブラウザは基本的に何かを正方形から円形にしようとしています。どういうわけか、フォトショップの選択と同じように、「中間」のピクセルがぼやけます。
ぼやけたピクセルのフォトショップによるデモ
悲しいことに、background-image、実際のimage-file.pngを使用する必要があります。
私の部分では、border-radiusを適用するために、外部コンテナーでマークアップを再構成しようとしました。ユーザーMosherは素晴らしいことをしました、 彼の答えのjsfiddle を参照してください。
作業デモはこちらです:jsFiddle
.eye
コンテンツを次のように別のコンテナに配置します。
<span class="eye">
<div id="eyeCover">
<span class="lidT"></span>
<span class="pup"></span>
<span class="lidB"></span>
</div>
</span>
overflow:hidden
を.eye
から削除します。新しい.eye
スタイルはこちら:
.eye {
border-radius: 50%;
height: 100px;
width: 100px;
background: #FAD73F;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
position: relative;
display: inline-block;
box-shadow: 0 3px 15px rgba(0, 0, 0, 0.4);
z-index: 100;
overflow: visible; /* change is here */
}
.lidT
と.lidB
の幅を105px
に変更してから、このスタイルを#eyeCover
に追加します。
#eyeCover{
width: 102px;
height: 102px;
top:-1px;
left:-1px;
border-radius: 50%;
overflow: hidden;
position: relative;
}
作業デモはこちらです:jsFiddle