Neste artigo, http://css-tricks.com/css-sprites/ , ele fala sobre como cortar uma imagem menor de uma imagem maior. Você pode me dizer se é possível / como posso cortar uma imagem menor e depois escalar a região cortada antes de colocá-la em destaque?
Aqui está um exemplo desse artigo:
A
{
background-image: url(http://www.jaredhirsch.com/coolrunnings/public_images/3deb155981/spriteme1.png);
background-position: -10px -56px;
}
Gostaria de saber como posso dimensionar essa imagem depois de cortá-la do spriteme1.png
Aqui está o URL do exemplo: http://css-tricks.com/examples/CSS-Sprites/Example1After/
Então, eu gostaria de saber se posso diminuir os ícones ao lado do Item1,2,3,4?
css
css-sprites
Michael
fonte
fonte
Respostas:
Você pode usar o tamanho do plano de fundo , como suportado pela maioria dos navegadores (mas nem todos http://caniuse.com/#search=background-size )
Ou
Você pode usar uma combinação de zoom para webkit / ie transform: scale para Firefox (-moz-) e Opera (-o-) para desktop e celular entre navegadores
fonte
Ao usar sprites, você fica limitado às dimensões da imagem no sprite. A
background-size
propriedade CSS, mencionada por Stephen, ainda não é amplamente suportada e pode causar problemas em navegadores como o IE8 e abaixo - e, dada a sua participação no mercado, essa não é uma opção viável.Outra maneira de resolver o problema é usar dois elementos e escalar o sprite usando-o com uma
img
tag, assim:Dessa forma, o elemento externo (
div.sprite-image
) está cortando uma imagem de 20x20px daimg
tag, que age como uma escalabackground-image
.fonte
src
por css.<img>
só deve ser usado se fizer parte do conteúdo. para fins de design, as imagens de plano de fundo são uma obrigação.Experimente: Stretchy Sprites - Redimensionamento / alongamento responsivo em vários navegadores de imagens de sprites CSS
Esse método dimensiona os sprites 'responsivamente' para que a largura / altura se ajuste de acordo com o tamanho da janela do navegador. Ele não usa,
background-size
pois o suporte a isso em navegadores antigos é inexistente.CSS
HTML
fonte
transform: scale();
fará com que o elemento original preserve seu tamanho.Eu achei a melhor opção é usar
vw
. Está funcionando como um encanto:https://jsfiddle.net/tomekmularczyk/6ebv9Lxw/1/
fonte
Aqui está o que eu fiz para fazer isso. Lembre-se de que não funcionará no IE8 e abaixo.
A largura da imagem de fundo será reduzida conforme o pai das
#element
escalas. Você também pode fazer o mesmo com sua altura, se converterheight
para uma porcentagem. A única parte complicada é descobrir as porcentagens parabackground-position
.A primeira porcentagem é a largura da área de destino do sprite quando na largura normal dividida pela largura total do sprite e multiplicada por 100.
A segunda porcentagem é a altura da área de destino do sprite antes de ser escalada, dividida pela altura total do sprite e multiplicada por 100.
A redação dessas duas equações é um pouco superficial, então, deixe-me saber se você precisa de uma explicação melhor.
fonte
Isso parece funcionar para mim.
Se os sprites estiverem na grade, defina o
background-size
número de 100% de sprites e o número de 100% de sprites para baixo. Em seguida, usebackground-position -<x*100>% -<y*100>%
onde x e y são o sprite baseado em zeroEm outras palavras, se você quiser o terceiro sprite da esquerda e da segunda linha, são 2 sobre e 1 para baixo,
Por exemplo, aqui está uma folha de sprite 4x2 sprites
E aqui está um exemplo
Se os sprites tiverem tamanhos diferentes, você precisará definir o valor
background-size
de cada sprite em um percentual, de modo que a largura desse sprite se torne 100%Em outras palavras, se a imagem tiver 640px de largura e o sprite dentro dessa imagem tiver 45px de largura, para obter 45px com 640px
Então você precisa definir o deslocamento. A complicação do deslocamento é que 0% está alinhado à esquerda e 100% está alinhado à direita.
Como programador gráfico, eu esperaria que um deslocamento de 100% movesse o plano de fundo 100% pelo elemento, em outras palavras, totalmente do lado direito, mas não é isso que 100% significa quando usado
backgrouhnd-position
.background-position: 100%;
significa alinhado à direita. Portanto, o fórum para levar isso em consideração após o dimensionamento éSuponha que o deslocamento seja 31px
Aqui está uma imagem de 640 x 480 com 2 sprites.
Seguindo a matemática acima para sprite 1
fonte
Post antigo, mas aqui está o que eu fiz usando
background-size:cover;
(dica de chapéu para @Ceylan Pamir) ...EXEMPLO DE USO
Alavanca de círculo horizontal (passe o cursor na imagem da frente, vira para trás com imagem diferente).
EXEMPLO SPRITE
480px x 240px
EXEMPLO TAMANHO FINAL
Imagem ú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;}
CASO ABREVIADO FIDDLE
http://jsfiddle.net/zuhloobie/133esq63/2/
fonte
tente usar o tamanho do plano de fundo: http://webdesign.about.com/od/styleproperties/p/blspbgsize.htm
existe algo que o impede de renderizar as imagens no tamanho que você deseja em primeiro lugar?
fonte
background-size
é CSS 3 e ainda não é amplamente suportado.Demorei um pouco para criar uma solução para esse problema que me agradou:
Problema:
Um sprite de ícones SVG - digamos 80px x 3200px
Queremos escalar cada uso deles em seletores de conteúdo (: antes /: depois) em vários lugares, em vários tamanhos, sem redefinir as coordenadas de cada sprite com base no tamanho usado.
Portanto, esta solução permite que você use os mesmos Sprite co-ords em um
<button>
como um<menuitem>
enquanto ainda dimensioná-lo.Usando porcentagens (com 2 casas decimais) na posição do plano de fundo em vez do tamanho do plano de fundo, conforme sugerido por outras pessoas aqui, você pode dimensionar a mesma declaração de ícone para qualquer tamanho, sem precisar redeclará-la.
A porcentagem da posição y é a altura original do sprite / altura do ícone como% - no nosso caso aqui 80px * 100 / 3200px == cada sprite é representado por uma posição y de 2,5%.
Se você tiver estados de pairar / passar o mouse, poderá dobrar a largura do sprite e especificar na coordenada posição x.
A desvantagem dessa abordagem é que a adição de mais ícones em uma data posterior alterará a altura do sprite e, portanto, a posição y, mas se você não fizer isso, suas coordenadas do sprite precisarão de alterações para cada resolução em escala necessária.
fonte
Bem, acho que encontrei uma solução mais simples para dimensionar imagens: exemplo - digamos que exista uma imagem com três sprites de tamanho igual que você queira usar, use CSS para dimensionar a imagem
e especifique a altura e a largura personalizadas que precisam ser aplicadas ao seu elemento html, por exemplo:
Um código de exemplo ficaria assim:
sou bastante novo em css, e o estilo não é minha melhor área, isso pode ser uma maneira errada de fazê-lo .. mas funcionou para mim no Firefox / Chrome / Explorer 10, espero que funcione em versões mais antigas ..
fonte
Use
transform: scale(...);
e adicione correspondênciamargin: -...px
para compensar o espaço livre da escala. (você pode usar* {outline: 1px solid}
para ver os limites do elemento).fonte
2018 aqui.Use o tamanho do plano de fundo com porcentagem.
FOLHA:
Isso pressupõe uma única linha de sprites. A largura da sua planilha deve ser um número que é divisível igualmente por 100 + largura de um sprite . Se você tiver 30 sprites de 108 x 108 px, adicione espaço em branco extra ao final para criar a largura final de 5508 px (50 * 108 + 108).
CSS:
HTML:
fonte
Use
transform: scale(0.8);
com o valor necessário em vez de 0,8fonte
Defina a largura e a altura para o elemento de invólucro da imagem do sprite. Use este css.
fonte
Fácil ... Usando duas cópias da mesma imagem em diferentes escalas na folha do sprite. Defina as cordas e o tamanho na lógica do aplicativo.
fonte