Borde pixelado alrededor de un círculo CSS con desbordamiento: oculto;
Aquí está el JSFIDDLE de mi gato / animación sin ninguna drop-shadows
para mostrar el problema tan claramente como pueda. A mi entender esto está siendo causado por el border-radius
y posiblemente debido a overflow: hidden;
.
El búho no es de lo que trata esta pregunta , solo un ejemplo de una situación similar en la que me encontraba. El jsfiddle / cat es de lo que trata esta pregunta, ¡perdón por la confusión!
Aquí hay un JSFIDDLE para mi gato con una sombra de recuadro usando el blur
propiedad de un box-shadow
y el borde pixelado sigue siendo el mismo alrededor del ojo.
La respuesta aquí resuelve lo que vi con mi imagen de Búho, pero no para qué se trata esta respuesta.
Aquí está el gato con un inset box-shadow
mientras usa el tercer valor, blur
.
He probado este violín en Safari, Chrome y Firefox y todos parecen mostrarlo de la misma manera.
Tengo dos ojos en el Gato de Cheshire que empecé a hacer ayer salió de CSS. Todo rinde muy bien y también he hecho un Búho(Primero pensé que esta era una situación similar, pero NO es) fuera de CSS que tiene un problema muy menor pero similar en los ojos que se pixelan alrededor de los bordes.
También he tratado de dar a los ojos un borde del color púrpura, pero el borde pixelado se mantuvo igual en el borde del borde.
En mi nueva creación CSS el borde exterior de los ojos está muy pixelado y parece ser el color(amarillo) del círculo padre.
Aquí está el CSS para los ojos.
.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;
}
A continuación se muestra el jsfiddle que utilicé para hacer esta animación/criatura.
Creo que el problema está siendo causado por...
Creo que la raíz del problema está siendo causada por las clases .lidT
y .lidB
que he contenido dentro de mi .eye
.
Parece cortar los párpados por 1px
alrededor del borde de la misma. Trate de hacer los ojos parpadean en el violín para ver lo que quiero decir.
Las imágenes tampoco están fuera de discusión, pero me gustaría seguir haciendo una imagen CSS primero por una razón de aprendizaje.
Lista de estilos que no ayudan
box-shadow
border
box-sizing
-
No es un bug solo para Firefox
Lista final
Actualizaciones
A work around is adding an cuenca del ojo o etiqueta principal externa al ojo. Esto oculta la pixelación, pero es solo una solución al problema.
Ver la respuesta de apaul34208 para más detalles
Aquí está el problema con la respuesta apaul34208,
Vea cómo el lado izquierdo y superior del ojo es plano, Me encantaría saber si mi pregunta es un problema de navegador o css.
End Updates
Mejor opción a partir del 11/13/2013
Utilizando una el gradiente de fondo en el .eye
parece ser la solución más limpia hasta ahora. Refiérase a la respuesta de ScottS.
Esto también funciona en Firefox, Chrome, Safari e IE. (Un poco ruff en IE bu mucho mejor que antes)
Cualquier y toda ayuda es muy apreciada!
5 answers
Usando el Gradiente de Fondo
Esto no requiere ningún marcado html adicional . Lo he probado en Firefox (y se confirma que funciona en Safari y Chrome también, ver comentarios). Hace que el fondo del ojo el color púrpura a cierta distancia del borde, y luego el amarillo el resto de eso usando un degradado de fondo radial para el color. Esto parece evitar la "mezcla" (y amarilleo) visto a lo largo del borde donde está tratando de "ocultar" basado en el border-radius
y overflow: hidden
combinado.
Aquí está el ejemplo original de solution / fiddle con 1px
de purple. Sin embargo, con la sombra paralela eliminada, todavía puede detectar ligeramente una decoloración. Así que actualizé la respuesta a continuación a un 2px
borde púrpura ancho, que este gato guiñando el ojo con sombra eliminada muestra que no se está produciendo ninguna decoloración.
Aquí está el código (actualizado a 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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-14 17:56:48
Creo que puedo tener una solución a su problema. Básicamente, solo necesita agregar cuencas oculares y ocultar el desbordamiento en las cuencas oculares en lugar de los ojos.
<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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-11 23:52:47
Creo que la pixelación que estás percibiendo es el resultado de box-shadow
y no de border-radius
o overflow
.
El navegador está tratando de dibujar una línea 1px #2b2b2b
en la parte superior interior del círculo. Esta línea está destinada a verse dentada ya que está en un camino curvo y debe aparecer como 1px
en ancho.
Intente establecer el blur
(o tercer valor) para la propiedad box-shadow
.
Antes y después:
Mira la diferencia entre los dos <div/>
redondeados en este jsFiddle demo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-02 16:10:08
Demo está aquí: jsFiddle
Ponga el contenido .eye
en el otro contenedor de esta manera:
<span class="eye">
<div id="eyeCover">
<span class="lidT"></span>
<span class="pup"></span>
<span class="lidB"></span>
</div>
</span>
Eliminar overflow:hidden
de .eye
. el nuevo estilo .eye
está aquí:
.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 */
}
Cambia .lidT
y .lidB
width a 105px
luego agrega este estilo para #eyeCover
:
#eyeCover{
width: 102px;
height: 102px;
top:-1px;
left:-1px;
border-radius: 50%;
overflow: hidden;
position: relative;
}
Demo está aquí: jsFiddle
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-13 14:36:12
Vea esta respuesta : stackoverflow.com/questions/6001281/firefox-border-color-border-radius-and-background-color-creates-ragged-edges-a#6001374
Y esta otra respuesta ya aceptada: Sangrado de radio de borde
Intenta recortar tu fondo:
.your-element {
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
Después de pensar, es un comportamiento normal 'blurr' el píxel de borde. Navegador está tratando de hacer algo básicamente cuadrado a algo redondo. De alguna manera, el píxel 'intermedio' se verá borroso, igual que una selección de photoshop.
Una demostración photoshoped del pixel borroso.
Lamentablemente, tendrá que usar una imagen de fondo , un archivo de imagen real.png.
Por mi parte, traté de reformar sus marcas con un contenedor outter para aplicar border-radius. El usuario Mosher lo hizo muy bien, ver su respuesta es jsfiddle.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:00:17