2011-09-05 7 views
9

La structure HTMLCSS: après vol stationnaire transition

<div id="small_gal"> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
    <div><img src="images1.jpg" /></div> 
</div> 

Les images ont des dropshadows si border est pas une solution, car il sera hors de l'image

enter image description hereenter image description here

La frontière est avoir une transition et ça marche bien sur FF mais pas sur chrome ou autres navigateurs

Voici le code que j'ai ont utilisé

#small_gal div:hover{cursor: pointer;} 
#small_gal div:after { 
    content: ''; 
    position: absolute; 
    width: 112px; 
    height: 81px; 
    border: 3px solid #e27501; 
    left: 9px; top: 9px; 
    z-index: 9; 

    opacity: 0; 
    -webkit-transition: opacity 0.5s ease-in-out; 
    -moz-transition: opacity 0.5s ease-in-out; 
    -o-transition: opacity 0.5s ease-in-out; 
    -ms-transition: opacity 0.5s ease-in-out; 
    transition: opacity 0.5s ease-in-out; 
} 
#small_gal div:hover:after { 
    opacity: 1; 
} 

Note:

#small_gal 

est que le récipient chaque image est enveloppé dans un div afin que nous puissions mettre en œuvre: après

+0

Êtes-vous sûr transitions CSS sont même implémenté dans les navigateurs que vous utilisez? http://www.quirksmode.org/ – marcgg

+0

Oui l'effet de fondu de frontière fonctionne bien sur mon firefox 6. Vérifiez en haut à droite 3 liens, ils fonctionnent dans tous les navigateurs. –

+0

Down vote parce que le lien est mort –

Répondre

15

Firefox 4+ est le seul navigateur prend en charge la transition de pseudo-éléments tels que :before et :after.

Source: http://css-tricks.com/13555-transitions-and-animations-on-css-generated-content/

+0

Ahh vrai, alors ce qui pourrait être l'alternative? J'ai essayé d'utiliser jQuery mais c'est aussi un bazar car garder la bordure orange à l'intérieur et au-dessus de l'image provoquera un événement mouseout tiré sur l'image elle-même, donc cela crée un effet de fluctuation et pas de clic. –

+0

J'ai accepté votre réponse :) –

3

transitions CSS sont encore au stade expérimental dans WebKit il est donc probable que vous avez touché un bug bord cas impliquant le :: après pseudo-sélecteur. Je suggère de l'éviter complètement et de simplement passer à border-color à la place. Cela a bien fonctionné dans Chrome et Safari:

#small_gal div.p { 
    border: 2px solid transparent; 
    -webkit-transition: border-color 1s ease-in; 
} 

#small_gal div.p:hover { 
    border-color: orange; 
} 
+0

Je vous remercie pour vos commentaires, je peux utiliser la bordure, mais l'image est avec ombre portée et bordure blanche à l'intérieur de l'img, donc l'application de toute sorte de bordure ajoutera l'ombre qui n'est pas voulu –

1

Vous pouvez utiliser des transitions CSS sur les éléments pseudo comme: avant et: après si vous pouvez définir la propriété sur l'élément lui-même et utiliser inherit dans l'élément pseudo. Donc dans votre cas au lieu de mettre une transition sur le opacity, vous pouvez mettre une transition sur le border-color.

*, *:before, *:after { 
 
    -webkit-box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    box-sizing: border-box; 
 
} 
 

 
#small_gal div { 
 
    border-color: transparent; 
 
    cursor: pointer; 
 
    display: inline-block; 
 
    position: relative; 
 
    -webkit-transition: border-color 0.5s ease-in-out; 
 
    -moz-transition: border-color 0.5s ease-in-out; 
 
    -o-transition: border-color 0.5s ease-in-out; 
 
    -ms-transition: border-color 0.5s ease-in-out; 
 
    transition: border-color 0.5s ease-in-out; 
 
} 
 
#small_gal div:after { 
 
    content: ''; 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; 
 
    border-color: inherit; 
 
    border-style: solid; 
 
    border-width: 3px; 
 
    left: 0; 
 
    top: 0; 
 
} 
 
#small_gal div:hover { 
 
    border-color: #e27501; 
 
} 
 
#small_gal div img { 
 
    display: block; 
 
    height: auto; 
 
    max-width: 150px; 
 
    width: auto; 
 
}
<div id="small_gal"> 
 
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div> 
 
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div> 
 
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div> 
 
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div> 
 
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div> 
 
</div>