43 votes

Comment empêcher une image de déborder d'une boîte à coins arrondis ?

Si j'utilise ce code, l'image n'est pas coupée par les coins arrondis de la division (ce qui fait que les coins carrés de l'image recouvrent les coins arrondis de la division) :

<div style="border-radius: 1em; -moz-border-radius: 1em; -webkit-border-radius: 1em; overflow:hidden;">
    <img src="big-image.jpg" />
</div>

Quelqu'un sait-il comment obtenir un div de bordure arrondi pour empêcher une image enfant de déborder ?

1 votes

Les coins des images clippées fonctionnent comme prévu dans mes derniers Chrome, Firefox et Safari : codepen.io/anon/pen/gzDmL

32voto

sam Points 1960

Mes derniers Chrome, Firefox et Safari découpent l'image en fonction du rayon de la bordure du conteneur (comme prévu).

http://jsfiddle.net/RQYnA/12/embedded/result/

Dans Firefox 15, l'image est coupée lorsque le conteneur a été modifié. {overflow: hidden} . (La coupure du contenu enfantin semble avoir été ajouté dans Gecko 2.0. )

Dans Chrome 23 et Safari 5, l'image est coupée. uniquement lorsque le conteneur a {position: static; overflow: hidden} et l'image a {position: static} .

15voto

kyle Points 763

Cela peut ou non fonctionner dans votre cas, mais envisagez de faire de l'image un arrière-plan CSS. Dans FF3, ce qui suit fonctionne très bien :

<div style="
  background-image:   url(big-image.jpg);
  border-radius:      1em;
  height:             100px;
  -moz-border-radius: 1em;
  width:              100px;"
></div>

Je ne suis pas sûr qu'il y ait une autre solution - si vous appliquez une bordure à l'image elle-même (disons, 1em profond), vous obtenez le même problème de coins carrés.

Editar: bien que, dans le cas de l'"ajout d'une bordure à l'image", l'insertion de l'image soit correcte, c'est juste que l'image n'est pas au même niveau que l'écran. div élément. Pour vérifier les résultats, ajoutez style="border:1em solid black;border-radius:1em;-moz-border-radius:1em;" à la img (avec width y height régler de manière appropriée, si nécessaire).

0 votes

Oui, il semble que cela fonctionne. C'est dommage que l'overflow ne fonctionne pas comme avec les divs sans bordure-radius.

0 votes

Liés aux images d'arrière-plan et aux bordures (en particulier les bordures non opaques) : MDN : developer.mozilla.org/fr/US/docs/CSS/background-clip qui note : "Internet Explorer 7, mais pas les autres versions d'Internet Explorer, se comporte comme background-clip:padding si overflow : hidden | auto | scroll." La w3c CSS backgrounds and Borders Candidate Recommendation Spec ( w3.org/TR/css3-background/#the-background-clip ).

0 votes

L'ajout d'une image en arrière-plan modifie la signification sémantique de l'image, qui est chargée ultérieurement par le navigateur.

5voto

Alex Barrett Points 7719

Même lorsque overflow est réglé sur hidden , border-radius ne coupe pas son contenu. T

Une solution serait de définir border-radius sur l'image ainsi que sur son conteneur.

<div style="border-radius: 16px; ...">
    <img src="big-image.jpg" style="border-radius: 16px; ..." />
</div>

Une autre façon serait de définir l'image comme arrière-plan du conteneur en utilisant background-image mais cette méthode pose des problèmes dans les versions de Firefox antérieures à la version 3 (cf. ce bug ) - non pas que cela doive vous déranger outre mesure.

0 votes

Je ne crois pas que border-radius ait un effet sur les images dans FF3 ou Safari 4 (en utilisant les préfixes -moz et -webkit).

2 votes

Cela ne fonctionne pas non plus lorsque l'image est plus grande que le div, ce qui est le genre de situation qui vous conduirait à JE VEUX pour couper l'image en premier lieu. Si c'est à dessein, cela me semble être une mauvaise conception. Ou y a-t-il un avantage caché à ce que le découpage échoue ?

0 votes

Je ne pense pas que ce soit à dessein. dev.w3.org/csswg/css3-background/#corner-clipping dit "Les autres effets qui s'accrochent à la bordure ou au bord du rembourrage (comme 'débordement' autre que 'visible') doivent également s'accrocher à la courbe."

3voto

thomasrye Points 1

Il y a aussi maintenant background-clip dans css3. Il fonctionne dans tous les principaux navigateurs. Les options sont border-box, padding-box et content-box. Dans votre cas, je pense que vous voudrez utiliser padding-box.

-webkit-background-clip: padding-box;
-moz-background-clip:    padding; 
background-clip:         padding-box;

0 votes

J'aime ça. =]

1voto

Advix Points 11

Essayez cette solution de contournement :

  1. L'image dans img est présente et vous y définissez la largeur et la hauteur.
  2. Puis le cacher avec visibility:hidden . La largeur et la hauteur restent intactes.
  3. Après cela, vous définirez la même source comme image de fond et elle sera coupée.

    <a class="thumb" href="#" style="background-image: url('./img/pic1.jpg');" title="Picture"> <img border="0" src="./img/pic1.jpg" alt="Pic" height="100" width="150" /> </a>

    page .thumb {

    background-repeat: no-repeat; background-position: left top; border: 3px #e5dacf solid; display: block; float: left;}

    page .thumb img {

    display: block; visibility: hidden;}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X