Imágenes de fondo de css receptivas

195

Tengo un sitio web (g-floors.eu) y quiero que el fondo (en css he definido una imagen bg para el contenido) también responda. Desafortunadamente, realmente no tengo idea de cómo hacer esto, excepto por una cosa que se me ocurre, pero es una solución alternativa. Crear múltiples imágenes y luego usar el tamaño de pantalla CSS para cambiar las imágenes, pero quiero saber si hay una forma más práctica para lograr esto.

Básicamente, lo que quiero lograr es que la imagen (con la marca de agua 'G') cambie de tamaño automáticamente sin mostrar menos de la imagen. Si es posible por supuesto

enlace: g-floors.eu

Código que tengo hasta ahora (parte de contenido)

#content {
  background-image: url('../images/bg.png');
  background-repeat: no-repeat;
  position: relative;
  width: 85%;
  height: 610px;
  margin-left: auto;
  margin-right: auto;
}
jochemke
fuente
77
Eche un vistazo a este enlace, ¿podría ser lo que está buscando? css-tricks.com/perfect-full-page-background-image
Christofer Vilander
Creo que esta solución que Christofer Vilander publicó es una solución mejor que la respuesta elegida.
CU3ED
¿Solo se pregunta por qué el sitio no implementa realmente esta función de cambio de tamaño que estaba preguntando, a partir de febrero de 2015? ¿Hubo algún problema con eso?
LegendLength

Respuestas:

368

Si desea que la misma imagen se escale en función del tamaño de la ventana del navegador:

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

No establezca el ancho, la altura o los márgenes.

EDITAR: La línea anterior sobre no establecer el ancho, la altura o el margen se refiere a la pregunta original de OP sobre la escala con el tamaño de la ventana. En otros casos de uso, es posible que desee establecer el ancho / alto / márgenes si es necesario.

Andrei Volgin
fuente
3
¿También es posible cambiar automáticamente el tamaño del ancho y dejar que se fije la altura?
jochemke
3
Sí, puede establecer la altura de la imagen en píxeles y el ancho en porcentajes, pero la imagen se deformará. No se verá bien.
Andrei Volgin
2
Puede usar una imagen mucho más pequeña si usa un formato vectorial: en.m.wikipedia.org/wiki/Scalable_Vector_Graphics
Andrei Volgin
9
¿Qué? Al no establecer el ancho, la altura del contenedor no mostrará la imagen en absoluto.
nieve
3
(1) La pregunta original era sobre el escalado basado en el tamaño de la ventana del navegador. (2) Elementos como divobtener su propia altura de su propio contenido, o ocupar espacio disponible en un modelo flexbox. Decir que sin un ancho / alto explícito el contenedor no se mostrará es incorrecto. Obviamente, si desea mostrar un div vacío con una imagen de fondo, deberá establecer la altura y, posiblemente, el ancho, pero luego verá solo una parte de una imagen, a menos que la relación de aspecto sea exactamente la misma que la de La imagen misma.
Andrei Volgin
69

con este código, su imagen de fondo se centra y fija el tamaño independientemente del cambio de tamaño de div, bueno para tamaños pequeños, grandes y normales, lo mejor para todos, lo uso para mis proyectos donde mi tamaño de fondo o tamaño de div puede cambiar

background-repeat:no-repeat;
-webkit-background-size:cover;
-moz-background-size:cover;
-o-background-size:cover;
background-size:cover;
background-position:center;
Pnsadeghy
fuente
Con un tamaño de pantalla de 800x1280px, la imagen se corta en el lado derecho por el cuadro. Todos los otros tamaños parecen estar bien.
Mugé
52

Prueba esto :

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

CSS:

background-size: 100%;

¡Eso debería hacer el truco! :)

Timothy Miller
fuente
27
Esto distorsionará totalmente la imagen según la relación de aspecto de la ventana del navegador. Nunca hacerlo.
Andrei Volgin
8
Solo para referencia futura, en realidad no se verá mal de esta manera. tamaño de fondo: 100% 100% lo haría, pero declarar solo la x como 100% evita que se vea terrible. Caso de prueba: codepen.io/howlermiller/pen/syduB
Timothy Miller
1
no se verá "distorsionada" pero va a estirar la imagen más allá de sus proporciones destinadas si es más pequeño que el contenedor ...
Código Noviciado
1
Así será la respuesta aceptada. El OP no preguntó sobre ese problema, solo si era posible hacer que se redimensionara bien.
Timothy Miller
1
Esta solución solucionó mi problema. +1
JPeG
22

Aquí está sass mixin para una imagen de fondo receptiva que uso. Funciona para cualquier blockelemento. Por supuesto, lo mismo puede funcionar en CSS simple, solo tendrá que calcularlo paddingmanualmente.

@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);
}

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

lanan
fuente
El código en el violín (utiliza un marco) es diferente al código en la respuesta.
nieve
14

Esta es fácil =)

body {
    background-image: url(http://domains.com/photo.jpeg);
    background-position: center center;
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-size: cover;
}

Echa un vistazo a la demo jsFiddle

Omar
fuente
13

Aquí está la mejor manera que tengo.

#content   {
    background-image:url('smiley.gif');
    background-repeat:no-repeat;
    background-size:cover;
}

Compruebe en las escuelas w3

Más opciones disponibles

background-size: auto|length|cover|contain|initial|inherit;
Piyush
fuente
9

solía

#content {
  width: 100%;
  height: 500px;
  background-size: cover;
  background-position: center top;
}

que funcionó muy bien

Acebo
fuente
¡Ese es el código que necesitaba! Gracias :)) Estoy tratando de hacer paralaje en el 100% de la pantalla pero a una altura de 200 px y solo necesito la parte superior del fondo pero manteniendo las proporciones de toda la imagen.
thinklinux
8
#container {
    background-image: url("../images/layout/bg.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    height: 100vh;
    margin: 3px auto 0;
    position: relative;
}
amit bende
fuente
6

Sitio web receptivo agregando relleno en la imagen inferior alto / ancho x 100 = padding-bottom%:

http://www.outsidethebracket.com/responsive-web-design-fluid-background-images/


Método más complicado:

http://voormedia.com/blog/2012/11/responsive-background-images-with-fixed-or-fluid-aspect-ratios


Intente cambiar el tamaño de la ecualización de fondo Firefox Ctrl + M para ver un script mágico agradable, creo que es el mejor:

http://www.minimit.com/demos/fullscreen-backgrounds-with-centered-content

usuario956584
fuente
4

Puedes usar esto. Lo he probado y funciona 100% correcto:

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

Puede probar su sitio web con capacidad de respuesta en este simulador de tamaño de pantalla: http://www.infobyip.com/testwebsiteresolution.php

Borre su caché cada vez que realice cambios y preferiría usar Firefox para probarlo.

Si desea usar una imagen desde otro sitio / URL y no como: background-image:url('../images/bg.png'); // Esta estructura es usar la imagen desde su propio servidor alojado. Luego use así: background-image: url(http://173.254.28.15/~brettedm/wp-content/uploads/Brett-Edmonds-Photography-14.jpg) ;

Disfruta :)

JackSparrow
fuente
4

Si desea que toda la imagen se muestre independientemente de la relación de aspecto, intente esto:

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

Esto mostrará la imagen completa sin importar el tamaño de la pantalla.

Mubashar Abbas
fuente
3
    <style> 
         * {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

#res_img {
  background: url("https://s15.postimg.org/ve2qzi01n/image_slider_1.jpg");
  width: 100%;
  height: 500px;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-position: center;
  border: 1px solid red;
}

@media screen and (min-width:300px) and (max-width:500px) {
  #res_img {
    width: 100%;
    height: 200px;
  }
}

    </style>

<div id="res_img">
</div>
Indranil
fuente
3

Solo dos líneas de código, funciona.

#content {
  background-image: url('../images/bg.png');
  background-size: cover;
}
Rajkumar Bansal
fuente
2

Adaptativo para relación cuadrada con jQuery

var Height = $(window).height();
var Width = $(window).width();
var HW = Width/Height;

if(HW<1){
      $(".background").css("background-size","auto 100%");
    }
    else if(HW>1){
      $(".background").css("background-size","100% auto");
    }
OVNI
fuente
2
background:url("img/content-bg.jpg") no-repeat;
background-position:center; 
background-size:cover;

o

background-size:100%;
bsngr
fuente
0

Creo que la mejor manera de hacerlo es esto:

body {
    font-family: Arial,Verdana,sans-serif;
    background:url("/images/image.jpg") no-repeat fixed bottom right transparent;
}

De esta manera no hay necesidad de hacer nada más y es bastante simple.

Al menos funciona para mí.

Espero que ayude.

usuario3487225
fuente
0

Intente usar background-sizepero use DOS ARGUMENTOS Uno para el ancho y el otro para la altura

background-image:url('../images/bg.png'); 
background-repeat:no-repeat;
background-size: 100% 100%; // Here the first argument will be the width 
// and the second will be the height.
background-position:center;
Runsis
fuente
0
background: url(/static/media/group3x.6bb50026.jpg);
background-size: contain;
background-repeat: no-repeat;
background-position: top;

la propiedad de posición se puede usar para alinear la parte superior inferior y el centro según sus necesidades y el tamaño del fondo se puede usar para el recorte central (cubierta) o la imagen completa (contener o 100%)

44kksharma
fuente