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

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.


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;

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;

33

CSS:

background-size: 100%;

¡Eso debería hacer el truco! :)


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/


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


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;

9

solía

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

que funcionó muy bien


¡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;
}

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


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 :)


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.


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>

3

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

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

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

2
background:url("img/content-bg.jpg") no-repeat;
background-position:center; 
background-size:cover;

o

background-size:100%;

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.


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;

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%)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.