225 votes

Images d'arrière-plan css réactives

J'ai un site Web (g-floors.eu) et je souhaite que l'arrière-plan (dans les css, j'ai défini une bg-image pour le contenu) soit également réactif. Malheureusement, je n'ai vraiment aucune idée de la façon de procéder, à l'exception d'une chose à laquelle je pense, mais il s'agit d'une solution de contournement. Il s'agit de créer plusieurs images et d'utiliser la taille d'écran css pour modifier les images, mais je voudrais savoir s'il existe un moyen plus pratique d'y parvenir.

En gros, ce que je veux obtenir, c'est que l'image (avec le filigrane 'G') soit automatiquement redimensionnée sans que l'image soit moins visible. Si c'est possible bien sûr

lien : g-floors.eu

Code que j'ai jusqu'à présent (partie contenu)

#content {
  background-image: url('../images/bg.png');
  background-repeat: no-repeat;
  position: relative;
  width: 85%;
  height: 610px;
  margin-left: auto;
  margin-right: auto;
}

7 votes

Jetez un coup d'œil à ce lien, peut-être est-ce ce que vous recherchez ? css-tricks.com/perfect-full-page-background-image

0 votes

Je pense que la solution que Christofer Vilander a postée est meilleure que la réponse choisie.

0 votes

Je me demande juste pourquoi le site ne met pas en œuvre cette fonctionnalité de redimensionnement que vous demandiez, à partir de février 2015 ? Y avait-il un problème avec cette fonction ?

421voto

Andrei Volgin Points 13110

Si vous souhaitez que la même image soit mise à l'échelle en fonction de la taille de la fenêtre du navigateur :

background-image:url('../images/bg.png');
background-repeat:no-repeat;
background-size:contain;
background-position:center;

Ne définissez pas la largeur, la hauteur ou les marges.

EDIT : La ligne précédente concernant l'absence de réglage de la largeur, de la hauteur ou de la marge fait référence à la question initiale de l'OP concernant la mise à l'échelle en fonction de la taille de la fenêtre. Dans d'autres cas d'utilisation, vous pouvez définir la largeur, la hauteur et les marges si nécessaire.

4 votes

Est-il également possible de redimensionner automatiquement la largeur et de laisser la hauteur fixe ?

4 votes

Oui, vous pouvez définir la hauteur de l'image en pixels et la largeur en pourcentages, mais l'image sera déformée. Elle ne sera pas belle.

0 votes

Aah je vois car l'image que j'utilise est un fond marron avec un 'G' gris clair en filigrane (assez grand) donc je veux qu'il soit redimensionné mais merci pour l'astuce ;)

81voto

Pnsadeghy Points 362

Avec ce code, votre image de fond se centre et fixe sa taille quelle que soit la taille de votre div, bon pour les petites, grandes, normales tailles, le meilleur pour tous, je l'utilise pour mes projets où la taille du fond ou de la div peut changer.

background-repeat:no-repeat;
-webkit-background-size:cover;
-moz-background-size:cover;
-o-background-size:cover;
background-size:cover;
background-position:center;

0 votes

À la taille d'écran 800x1280px, l'image est coupée sur le côté droit par la boîte. Toutes les autres tailles semblent correctes.

67voto

ashokdey100 Points 43

Essayez ceci :

background-image: url(_images/bg.png);
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;

36voto

Timothy Miller Points 861

CSS :

background-size: 100%;

Cela devrait faire l'affaire ! :)

31 votes

Cela déformera totalement l'image en fonction du ratio d'aspect de la fenêtre du navigateur. Ne le faites jamais.

8 votes

Pour mémoire, ce n'est pas si mal. background-size : 100% 100% le ferait, mais le fait de ne déclarer que l'axe x comme étant à 100% permet d'éviter que l'effet soit terrible. Cas de test : codepen.io/howlermiller/pen/syduB

1 votes

L'image n'aura pas l'air "déformée" mais elle sera étirée au-delà de ses proportions prévues si elle est plus petite que le conteneur...

23voto

Shvetusya Points 621

Voici le mixin sass pour une image de fond réactive que j'utilise. Il fonctionne pour tout block élément. Bien sûr, la même chose peut fonctionner en CSS simple, il vous suffit de calculer padding manuellement.

@mixin responsive-bg-image($image-width, $image-height) {
  background-size: 100%;
  height: 0;
  padding-bottom: percentage($image-height / $image-width);
  display: block;
}

.my-element {
  background: url("images/my-image.png") no-repeat;

  // substitute for your image dimensions
  @include responsive-bg-image(204, 81);
}

Exemple http://jsfiddle.net/XbEdW/1/

0 votes

Le code dans le violon (qui utilise un framework) est différent du code dans la réponse.

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