2014-04-29 6 views
2

J'ai une liste qui contient des éléments ronds. Ils ont une image en arrière-plan et en vol stationnaire l'autre div est censé devenir visible en superposition. Cela fonctionne jusqu'à présent, cependant il y a toujours une bordure visible, indiquant que le div plané ne recouvre pas parfaitement l'autre élément arrondi.Divs ronds se chevauchant parfaitement

HTML:

<ul> 
    <li> 
     <div class="hover"></div> 
    </li> 
    <li> 
     <div class="hover"></div> 
    </li> 
    <li> 
     <div class="hover"></div> 
    </li> 
</ul> 

CSS:

ul { 
    margin: 0; 
    padding: 0; 
    list-style: none; 
    font-size: 0; 
    height: 140px; 
} 
li { 
    width: 140px; 
    height: 140px; 
    margin: 0; 
    padding: 0; 
    display: inline-block; 
    border-radius: 70px; 
    background: url(http://www.nationalflaggen.de/media/flags/flagge-thailand.gif); 
} 
.hover { 
    border-radius: 70px; 
    width: 140px; 
    height: 140px; 
} 
.hover:hover { 
    background-color: rgba(255,255,255,.9); 
} 

J'ai ajouté un violon depuis que je ne sais vraiment pas comment les faire parfaitement se chevauchent.

Merci pour votre aide.

MISE À JOUR LE VIOLON: http://jsfiddle.net/pL9Aa/1

+1

Il suffit de diviser le nombre de divs de superposition par le div –

+1

ou de masquer celui de sous-couche en survol. –

+0

J'ai édité mon post. L'image sous-jacente doit être visible puisque la superposition est transparente. – paelzer

Répondre

1

Vous pouvez ajouter:

li:hover { 
    background:none; 
} 

pour veiller à ce que l'arrière-plan sur le li est parti.

C'est bizarre cependant - ressemble à un bug de rendu.

En supposant que vous ayez du texte ou un autre contenu dans la superposition, il est intéressant de noter que la définition de l'arrière-plan pour être légèrement transparent (par exemple rgba (255,255,255,0.8)) rend l'erreur de rendu moins perceptible.

+0

désolé je ne l'ai pas fait clair, le fond doit être visible depuis le div superposé est transparent – paelzer

2

Cela ressemble à un problème de sous-pixel - le navigateur fait un tas de maths pour déterminer la finesse d'une courbe en utilisant des pixels carrés. Et parfois cela ne rend pas comment vous pourriez vous attendre.

Vous pouvez simplement supprimer la règle border-radius de la pseudo-classe: hover si vous la gardez transparente.

.hover { 
    width: 140px; 
    height: 140px; 
} 

Fiddle

Si elle doit être ronde, je remplacer votre image en utilisant le même élément, au lieu d'un élément imbriqué, comme ceci:

li:hover { 
    background: white; 
} 

Fiddle2

+0

Il doit être rond – paelzer

+0

Ajout de l'hébergement pour le garder rond. – dezman

+0

J'ai oublié de préciser que l'image doit être visible puisque la superposition est transparente. Désolé pour ça. – paelzer

0

Changez simplement #hover s border-radius: 62px;

+0

cela n'a aucun sens, désolé – paelzer

+0

dans votre css changer le rayon de la frontière de 70 à 62, simple – Shakesy

+0

Mais alors ce n'est plus complètement rond. – paelzer

0

Si votre vol stationnaire est uniquement destiné à couvrir l'élément, vous n'avez pas besoin de placer un rayon de bordure sur l'élément stationnaire.supprimant simplement cette ligne résoudra votre problème:

.hover { 
    width: 140px; 
    height: 140px; 
} 

http://jsfiddle.net/pL9Aa/3/

+0

Il est supposé être transparent, il faut donc qu'il soit rond puisque le fond de tout est une image. – paelzer

0

Si dans le envirionment de production que vous pouvez réellement utiliser une couleur d'arrière-plan, vous pouvez également utiliser un box-shadow

Démo: http://jsfiddle.net/j4NFB/

.hover:hover { 
    background-color: #FFF; 
    box-shadow: 0 0 0 1px #fff; 
} 
+0

C'est proche mais toujours pas parfait – paelzer

+0

Vous pouvez continuer à augmenter la taille de la partie 1px. le seul problème est si vous utilisez réellement une image de fond pour la superposition plutôt qu'une couleur. –

+0

Si vous l'augmentez, il affichera toujours la bordure où se termine l'image sous-jacente. Je suppose qu'il n'y a aucun moyen d'y parvenir. – paelzer