Bord pixelisé autour d'un cercle CSS avec débordement: caché;
voici le JSFIDDLE de mon cat / animation sans aucun drop-shadows
pour montrer le problème aussi clairement que je peux. À ma connaissance, cela est causé par le border-radius
et peut-être dû à overflow: hidden;
.
la chouette n'est pas le sujet de cette question , juste un exemple d'une situation similaire dans laquelle j'étais. Le jsfiddle/cat est ce que cette question est à propos, désolé pour le mélange!
voici un JSFIDDLE pour mon chat avec une ombre de boîte en médaillon en utilisant la propriété blur
d'un box-shadow
et le bord pixelisé est toujours le même autour de l'oeil.
la réponse ici résout ce que j'ai vu avec mon image de hibou mais pas pour ce que cette réponse est au sujet.
voici le chat avec un inset box-shadow
en utilisant la troisième valeur, blur
.
j'ai testé ce violon dans Safari, Chrome, et Firefox et ils semblent tous l'afficher le même.
j'ai deux yeux sur le chat Cheshire que j'ai commencé à faire hier à partir de CSS. Tout rend très bien et j'ai également fait un hibou ( j'ai d'abord pensé que c'était une situation similaire, mais il n'est pas ) de CSS qui a un problème très mineur mais similaire sur les yeux étant pixélisés autour des bords.
j'ai également essayé de donner les yeux d'une bordure de la couleur pourpre, mais la pixélisé bord est resté le même sur le bord de la frontière.
sur ma nouvelle création CSS le bord extérieur des yeux est très pixelisé et semble être la couleur(jaune) du cercle parent.
voici le CSS pour le oeil.
.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;
}
ci-dessous est le jsfiddle que j'ai utilisé pour faire cette animation/créature.
JSFIDDLE
je crois que le problème est causé par...
je pense que la racine du problème est causée par les classes .lidT
et .lidB
que j'ai contenues dans mon .eye
.
il semble couper le les paupières par 1px
autour du bord de celui-ci. Essayez de faire cligner les yeux dans le violon pour voir ce que je veux dire.
les Images ne sont pas non plus hors de question, mais je voudrais m'en tenir à faire une image CSS d'abord pour une raison d'apprentissage.
liste des styles qui n'aident pas
-
box-shadow
-
border
-
box-sizing
-
Pas uniquement pour Firefox bug
Fin De La Liste
Mises à jour
une modification consiste à ajouter à l'œil une Alvéole ou une étiquette extérieure principale. Cela cache la pixelisation mais n'est qu'un contournement du problème.
Voir apaul34208 réponse pour plus de détails
voici le problème avec apaul34208 réponse,
Voir comment la gauche et de la partie supérieure de l'œil est plat, j'aimerais savoir si ma question est un problème de navigateur ou css .
Fin Des Mises À Jour
meilleure option en date du 11/13/2013
utilisant un gradient de fond sur le .eye
semble être la solution la plus propre jusqu'à présent. Reportez-vous à la réponse de ScottS.
cela fonctionne aussi dans Firefox, Chrome, Safari, et IE. (Un peu ruff dans IE bu beaucoup mieux avant)
Toute aide est grandement appréciée!
5 réponses
Utilisant Le Gradient D'Arrière-Plan
il n'est pas nécessaire de rajouter le balisage html . Je l'ai testé sur Firefox (et il est confirmé de travailler aussi sur Safari et Chrome, voir les commentaires). Il rend le fond de l'Œil de la couleur Pourpre une certaine distance dans le bord, puis le jaune le reste en utilisant un gradient radial de fond pour la couleur. Cela semble éviter le "mélange" (et le jaunissement) vu le long du bord où il est tentant pour " cacher "basé sur la combinaison border-radius
et overflow: hidden
.
Voici la solution originale/exemple de violon avec 1px
de pourpre. avec l'ombre de chute enlevée, cependant, vous pouvez encore légèrement détecter une décoloration . Donc j'ai mis à jour la réponse ci-dessous à un 2px
large bordure pourpre, qui ce chat clignotant avec ombre de chute enlevée montre qu'aucune décoloration ne se produit .
voici le code (mis à jour en 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;
}
je pense que j'ai peut-être une solution à votre problème. Fondamentalement, vous avez juste besoin d'ajouter les orbites des yeux et cacher le débordement sur les orbites plutôt que les yeux.
<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;
}
je crois que la pixelisation que vous percevez est le résultat du box-shadow
et non du border-radius
ou du overflow
.
le navigateur essaie de tracer une ligne 1px #2b2b2b
sur le dessus du cercle. Cette ligne doit avoir l'air dentelée puisqu'elle est sur un chemin courbé et doit apparaître comme 1px
en largeur.
essayez de définir la blur
(ou la troisième valeur) pour la propriété box-shadow
.
avant et après:
"151980920 voir la différence entre les deux arrondis
<div/>
dans cette jsFiddle démo .
la démo de travail est ici: jsFiddle
mettez le .eye
contenu dans un autre conteneur comme celui-ci:
<span class="eye">
<div id="eyeCover">
<span class="lidT"></span>
<span class="pup"></span>
<span class="lidB"></span>
</div>
</span>
supprimer overflow:hidden
de .eye
. nouveau .eye
style est ici:
.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 */
}
changer .lidT
et .lidB
largeur à 105px
puis ajouter ce style pour #eyeCover
:
#eyeCover{
width: 102px;
height: 102px;
top:-1px;
left:-1px;
border-radius: 50%;
overflow: hidden;
position: relative;
}
la démo de travail est ici: jsFiddle
voir la réponse : /q/firefox-border-color-border-radius-and-background-color-creates-ragged-edges-and-white-space-55558/"/q/border-radius-bleeding-23705/"> border-radius bleeding
essayez de découper votre arrière-plan:
.your-element {
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
après réflexion, c'est un comportement normal pour "brouiller" le pixel de bord. Navigateur est de tenter de faire quelque chose de carré à quelque chose de rond. D'une manière ou d'une autre, le pixel "in-between" sera flou, tout comme une sélection photoshop.
Un photoshoped démonstration de l'floue pixel.
malheureusement, vous devrez utiliser un fond-image , un vrai fichier-image.png.
pour ma part, j'ai essayé de réformer vos majorations avec un conteneur externe à appliquer border-radius. L'utilisateur Mosher l'a très bien fait, voir sa réponse est jsfiddle .