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.

recuadro box-shadow


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.

JSFIDDLE

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

  1. box-shadow

  2. border

  3. box-sizing

  4. 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,

respuesta de apaul

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!

Author: Josh Powell, 2013-11-09

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;
}
 12
Author: ScottS,
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.

Ejemplo De Trabajo

<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;
}
 6
Author: apaul,
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:

Ojos de búho antes y después

Mira la diferencia entre los dos <div/>redondeados en este jsFiddle demo.

 6
Author: Adam,
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

 5
Author: Mohsen Safari,
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. BORDE-DESENFOQUE DE RADIO

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.

 5
Author: Milche Patern,
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