En este artículo, http://css-tricks.com/css-sprites/ , habla sobre cómo puedo recortar una imagen más pequeña de una imagen más grande. ¿Puede decirme si es posible / cómo puedo recortar una imagen más pequeña y luego escalar la región recortada antes de diseñarla?
Aquí hay un ejemplo de ese artículo:
A
{
background-image: url(http://www.jaredhirsch.com/coolrunnings/public_images/3deb155981/spriteme1.png);
background-position: -10px -56px;
}
Me gustaría saber cómo puedo escalar esa imagen después de recortarla desde spriteme1.png
Aquí está la URL del ejemplo: http://css-tricks.com/examples/CSS-Sprites/Example1After/
Entonces, ¿me gustaría saber si puedo hacer que los íconos al lado de Item1,2,3,4 sean más pequeños?
css
css-sprites
Miguel
fuente
fuente
Respuestas:
Puede usar background-size , ya que es compatible con la mayoría de los navegadores (pero no todos http://caniuse.com/#search=background-size )
O
Puede usar un combo de zoom para webkit / ie y transform: scale para Firefox (-moz-) y Opera (-o-) para dispositivos de escritorio y dispositivos móviles entre navegadores
fuente
Cuando usa sprites, está limitado a las dimensiones de la imagen en el sprite. La
background-size
propiedad CSS, mencionada por Stephen, aún no es ampliamente compatible y puede causar problemas con los navegadores como IE8 y versiones anteriores, y dada su participación en el mercado, esta no es una opción viable.Otra forma de resolver el problema es usar dos elementos y escalar el sprite usándolo con una
img
etiqueta, como esta:De esta manera, el elemento externo (
div.sprite-image
) está recortando una imagen de 20x20px de laimg
etiqueta, que actúa como una escalabackground-image
.fuente
src
por CSS.<img>
solo debe usarse si es parte del contenido. Para fines de diseño, las imágenes de fondo son imprescindibles.Pruebe esto: Sprites elásticos : cross-browser, cambio de tamaño receptivo / estiramiento de imágenes de sprites CSS
Este método escala los sprites 'de manera receptiva' para que el ancho / alto se ajuste de acuerdo con el tamaño de la ventana de su navegador. No se utiliza,
background-size
ya que no existe soporte para esto en navegadores antiguos.CSS
HTML
fuente
transform: scale();
hará que el elemento original conserve su tamaño.Encontré que la mejor opción es usar
vw
. Funciona a las mil maravillas:https://jsfiddle.net/tomekmularczyk/6ebv9Lxw/1/
fuente
Esto es lo que hice para hacer esto. Tenga en cuenta que no funcionará en IE8 y versiones inferiores.
El ancho de la imagen de fondo se reducirá a medida que el padre de la
#element
escala se reduzca. También puede hacer lo mismo con su altura, si convierteheight
a un porcentaje. Lo único complicado es calcular los porcentajesbackground-position
.El primer porcentaje es el ancho del área objetivo del sprite cuando está en el ancho normal dividido por el ancho total del sprite, y multiplicado por 100.
El segundo porcentaje es la altura del área objetivo del sprite antes de ser escalado dividido por la altura total del sprite, y multiplicado por 100.
La redacción de esas dos ecuaciones es un poco descuidada, así que avíseme si necesita que se lo explique mejor.
fuente
Esto parece funcionar para mí.
Si los sprites están en la cuadrícula, establezca el
background-size
100% del número de sprites y 100% del número de sprites hacia abajo. Luego usabackground-position -<x*100>% -<y*100>%
donde x e y son el sprite basado en ceroEn otras palabras, si quieres el tercer sprite de la izquierda y la segunda fila, eso es 2 arriba y 1 abajo, así que
Por ejemplo, aquí hay una hoja de sprites 4x2 sprites
Y aquí hay un ejemplo
Si los sprites son de diferentes tamaños, deberá establecer el
background-size
porcentaje de cada sprite en un porcentaje tal que el ancho de ese sprite sea del 100%En otras palabras, si la imagen tiene 640px de ancho y el sprite dentro de esa imagen tiene 45px de ancho, entonces para que ese 45px tenga 640px
Entonces necesita establecer el desplazamiento. La complicación del desplazamiento es que el 0% está alineado a la izquierda y el 100% está alineado a la derecha.
Como programador de gráficos, esperaría un desplazamiento del 100% para mover el fondo 100% a través del elemento, en otras palabras, completamente fuera del lado derecho, pero eso no es lo que significa 100% cuando se usa
backgrouhnd-position
.background-position: 100%;
significa alineado a la derecha. Entonces, el foro para tomar eso en cuenta después de escalar esSuponga que el desplazamiento es 31px
Aquí hay una imagen de 640x480 con 2 sprites.
Siguiendo las matemáticas anteriores para sprite 1
fuente
background-size:cover;
Publicación anterior , pero esto es lo que hice usando (punta de sombrero para @Ceylan Pamir) ...EJEMPLO DE USO
Volteador de círculo horizontal (desplace el cursor sobre la imagen frontal, voltea hacia atrás con una imagen diferente).
EJEMPLO SPRITE
480px x 240px
EJEMPLO TAMAÑO FINAL
Imagen única @ 120px x 120px
CÓDIGO GENÉRICO
.front {width:120px; height:120px; background:url(http://www.example.com/images/image_240x240.png); background-size:cover; background-repeat:no-repeat; background-position:0px 0px;}
.back {width:120px; height:120px; background:url(http://www.example.com/images/image_240x240.png); background-size:cover; background-repeat:no-repeat; background-position:-120px 0px;}
FIDDLE DE CASO ABREVIADO
http://jsfiddle.net/zuhloobie/133esq63/2/
fuente
intente usar el tamaño de fondo: http://webdesign.about.com/od/styleproperties/p/blspbgsize.htm
¿hay algo que te impide renderizar las imágenes en el tamaño que deseas en primer lugar?
fuente
background-size
es CSS 3 y aún no es ampliamente compatible.Me llevó un tiempo crear una solución a este problema con el que estaba contento:
Problema:
Un sprite de iconos SVG: digamos 80 px x 3200 px
Queremos escalar cada uso de ellos en selectores de contenido (: before /: after) en varios lugares en varios tamaños sin redefinir los codigos de cada sprite en función del tamaño utilizado.
Por lo que esta solución le permite utilizar los mismos sprites compañeros de ords en una
<button>
como<menuitem>
mientras sigue su reducción.Al usar porcentajes (hasta 2 decimales) en la posición del fondo en lugar del tamaño del fondo como lo sugieren otros aquí, puede escalar la misma declaración de icono a cualquier tamaño, sin necesidad de volver a declararla.
El porcentaje de posición y es la altura original del sprite / altura del icono como%; en nuestro caso, aquí 80px * 100 / 3200px == cada sprite está representado por una posición y del 2.5%.
Si tiene estados de desplazamiento / mouseover, puede duplicar el ancho del sprite y especificarlo en la coordenada posición-x.
La desventaja de este enfoque es que agregar más íconos en una fecha posterior cambiará la altura del sprite y, por lo tanto, la posición y%, pero si no lo hace, entonces sus coordenadas de sprite necesitarán un cambio para cada resolución escalada que necesite.
fuente
Bueno, creo que encontré una solución más simple para escalar imágenes: ejemplo: digamos que hay una imagen con 3 sprites del mismo tamaño que te gustaría usar, usa CSS para escalar la imagen
y luego especifique la altura y el ancho personalizados que deben aplicarse a su elemento html, por ejemplo:
Un código de muestra se vería así:
soy bastante nuevo en css, y el estilo no es mi mejor área, esta podría ser una forma incorrecta de hacerlo ... pero funcionó para mí en Firefox / Chrome / Explorer 10, espero que también funcione en versiones anteriores ...
fuente
Use
transform: scale(...);
y agregue coincidenciasmargin: -...px
para compensar el espacio libre de la escala. (puede usar* {outline: 1px solid}
para ver los límites de los elementos).fuente
2018 aquí. Utilice el tamaño de fondo con porcentaje.
SÁBANA:
Esto supone una sola fila de sprites. El ancho de su hoja debe ser un número que sea divisible por 100 + ancho de un sprite . Si tiene 30 sprites que son 108x108 px, agregue espacio en blanco adicional al final para hacer el ancho final 5508px (50 * 108 + 108).
CSS:
HTML:
fuente
Use
transform: scale(0.8);
con el valor que necesita en lugar de 0.8fuente
Establezca el ancho y la altura para envolver el elemento de la imagen del sprite. Usa este CSS.
fuente
Fácil ... Usando dos copias de la misma imagen con diferente escala en la hoja del sprite. Establezca los Coords y el tamaño en la lógica de la aplicación.
fuente