Définir la taille sur l'image de fond avec CSS?

est-il possible de définir la taille de l'image de fond avec CSS?

je veux faire quelque chose comme:

background: url('bg.gif') top repeat-y;
background-size: 490px;

mais il semble que c'est totalement mal de le faire comme ça...

371
demandé sur Ankit Agrawal 2009-08-27 18:08:01

18 réponses

CSS2

Si vous avez besoin pour rendre l'image plus grande, vous devez modifier l'image dans un éditeur d'image.

si vous utilisez la balise img, vous pouvez changer la taille, mais cela ne vous donnerait pas le résultat désiré si vous avez besoin que l'image soit en arrière-plan pour un autre contenu (et il ne se répétera pas comme vous semblez le vouloir)...

CSS3 libérer les pouvoirs

cela est possible en CSS3 avec background-size .

tous les navigateurs modernes prennent en charge cela, donc sauf si vous avez besoin de prendre en charge les vieux navigateurs, c'est la façon de le faire.

les navigateurs pris en charge:

Mozilla Firefox 4.0+ (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) et Chrome 3.0+.

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

en particulier, j'aime les valeurs cover et contain qui nous donnent un nouveau pouvoir de contrôle que nous n'avions pas auparavant.

Rond

Vous pouvez également utiliser background-size: round qui ont un sens en combinaison avec répétition:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

ceci ajustera la largeur de l'image de sorte qu'elle s'adapte un nombre entier de fois dans la zone de positionnement en arrière-plan.


Note complémentaire

Si la taille dont vous avez besoin est la taille statique du pixel, il est encore intelligent de redimensionner physiquement l'image réelle. Ceci est à la fois pour améliorer la qualité du redimensionnement (étant donné que votre logiciel d'image fait un meilleur travail que les navigateurs), et pour économiser la bande passante si l'image originale est plus grande que ce qu'il faut afficher.

599
répondu awe 2013-03-16 09:20:49

Seulement CSS 3 soutient que,

background-size: 200px 50px;

mais je voudrais éditer l'image elle-même, de sorte que l'utilisateur doit charger moins, et il pourrait sembler mieux qu'une image rétrécie sans antialiasing.

331
répondu Maertz 2012-07-10 09:17:42

si vos utilisateurs n'utilisent que Opera 9.5+, Safari 3+, Internet Explorer 9+ et Firefox 3.6+, alors la réponse est oui. Sinon, pas de.

la propriété background-size fait partie de CSS 3, mais elle ne fonctionnera pas sur la plupart des navigateurs.

pour vos besoins, agrandissez l'image actuelle.

23
répondu Christopher Tokar 2011-12-29 21:10:41

impossible . Le fond sera toujours aussi grand qu'il peut l'être, mais vous pouvez l'empêcher de se répéter avec background-repeat .

background-repeat: no-repeat;

deuxièmement, le fond n'entre pas dans la zone de marge d'une boîte, donc si vous voulez que le fond soit seulement sur le contenu réel d'une boîte, vous pouvez utiliser la marge au lieu du rembourrage.

Troisièmement, vous pouvez contrôler où l'arrière-plan image commence. Par défaut, c'est le coin supérieur gauche de la boîte, mais vous pouvez contrôler qu'avec background-position , comme ceci:

background-position: center top;

ou peut-être

background-position: 20px -14px;

positionnement négatif est utilisé beaucoup avec CSS sprites .

18
répondu mikl 2009-08-27 14:27:32

Pas trop dur, si vous n'avez pas peur d'aller un peu plus en profondeur :)

Il y a un oublié argument:

background-size: contain;

ça n'étire pas votre background-image comme avec cover . Elle s'étendrait jusqu'à ce que le côté le plus long atteigne la largeur ou la hauteur du contenant extérieur et préserverait ainsi l'image.

Edit: il y a aussi -webkit-background-size et -moz-background-size .

la propriété background-size est supportée dans IE9+, Firefox 4+, Opera, Chrome et Safari 5+.

- Source: W3 Écoles

12
répondu kaiser 2012-11-09 17:28:32

background-size: 200px 50px changez-le à 100% 100% et il se basera sur les besoins de l'étiquette de contenu comme ul li ou div... essayé

3
répondu mihai 2012-01-03 13:08:48

vous pouvez totalement avec CSS3:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

ceci va dimensionner une image de fond à 100% de la largeur de l'élément de corps et va ensuite redimensionner l'arrière-plan en conséquence que l'élément de corps redimensionne pour des résolutions plus petites.

Voici l'exemple: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css /

3
répondu Mike Sinkula 2012-10-11 14:05:19

Juste divs imbriqués à la croix-navigateur compatible

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   
2
répondu Cornelius Lamb 2011-02-14 19:56:03

à l'appui de la réponse que @tetra a donnée, je tiens à souligner que si l'image est un SVG, alors redimensionner l'image réelle n'est pas nécessaire.

étant donné qu'un fichier SVG n'est QU'un fichier XML, vous pouvez spécifier quelle taille vous voulez qu'il apparaisse dans le XML.

cependant, si vous utilisez la même image SVG à des endroits différents et que vous avez besoin de tailles différentes, alors utiliser background-size est très utile. Les fichiers SVG sont intrinsèquement plus petits que raster les images en tout cas et le redimensionnement à la volée avec CSS peuvent être très utiles sans aucun coût de performance dont je suis conscient, et certainement peu ou pas de perte de qualité.

voici un exemple rapide:

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}

(Note: cela fonctionne pour moi dans OS X 10.7 avec Firefox 8, Safari 5.1, et Chrome 16.0.912.63)

2
répondu SunSparc 2012-01-10 20:19:09

vous pouvez utiliser deux <div> éléments:

  • L'un est un conteneur (il est celui que vous vouliez à l'origine le image d'arrière-plan à paraître).

  • le second est contenu dans. Vous réglez sa taille à la taille de l'image d'arrière-plan (ou la taille que vous souhaitez apparaître).

Le contenu de la div est alors configuré pour être positionné absolute . De cette façon, il n'interfère pas avec le flux normal des articles dans le div contenant.

il vous permet d'utiliser les images sprite efficacement.

2
répondu Ben Shomer 2012-06-16 15:53:03

vous ne pouvez pas définir la taille de votre image de fond avec la version actuelle de CSS (2.1).

Vous ne pouvez définir: position , fix , image-url , repeat-mode , et color .

1
répondu knittl 2011-12-29 21:11:40
put the below code in the body of you css file

background-image: URL('../images/wave-green-plain-colour.jpg') ;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width:100px;
1
répondu Shwetha S.H 2013-05-13 12:57:29

vous avez écrit

background: url('bg.gif') top repeat-y;    
background-size: 490px;

mais vous ne verrez l'arrière-plan que selon la taille du conteneur.

si vous avez un conteneur vide avec l'url d'arrière-plan et quelle que soit la taille de l'arrière-plan, vous ne verrez pas le bg.GIF.

si vous définissez la taille du continer à

background: url('bg.gif') top repeat-y;    
background-size: 490px;
height: 490px;
width: 490px;

combiné au code que vous avez écrit ci-dessus, vous pourrez voir le bg.fichier gif.

1
répondu Carlos Calla 2013-08-22 05:07:55

si vous voulez définir background-size dans le même background propriété, vous pouvez utiliser Utiliser:

background:url(my-bg.png) no-repeat top center / 50px 50px;
1
répondu Orlando Leite 2016-02-23 23:18:43

background-size fonctionne dans Chrome 4.1, mais jusqu'à présent je n'ai pas pu le faire fonctionner dans Firefox 3.6.

0
répondu silversky 2011-12-29 21:13:31

j'utilise des images d'arrière-plan pour les boutons, mais il montre seulement l'image de la même taille que le texte, même si je mets la largeur et la hauteur. Au lieu de cela, je rembourre mon texte avec des caractères &nbsp; (espaces non-cassants). Je gifle autant que nécessaire, en gros, jusqu'à ce que tout le fond du bouton apparaisse. Donc je pourrais avoir le code comme ceci:

dans la feuille de style:

#v2menu-home {
    background-image:url(../v2-siteimages/button.png);
    background-repeat:no-repeat;
}

dans le document HTML:

<div id="v2menu">
    <a id="v2menu-home" href="/index.php">home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div><!-- v2menu -->
0
répondu Martin Thompson 2012-01-02 08:22:41

par exemple:

L'image de fond sera toujours adaptée à la taille du conteneur (largeur 100% et hauteur 100px).

Cross-browser CSS:

.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;

}

0
répondu skyrosbit 2013-03-28 20:10:09

cela est possible en CSS3 avec background-size

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}
0
répondu omkar khade 2014-04-10 07:59:01