In diesem Artikel, http://css-tricks.com/css-sprites/ , wird erläutert , wie ich ein kleineres Bild von einem größeren Bild abschneiden kann. Können Sie mir bitte sagen, ob es möglich ist / wie ich ein kleineres Bild zuschneiden und dann den abgeschnittenen Bereich skalieren kann, bevor ich es auslege?
Hier ist ein Beispiel aus diesem Artikel:
A
{
background-image: url(http://www.jaredhirsch.com/coolrunnings/public_images/3deb155981/spriteme1.png);
background-position: -10px -56px;
}
Ich würde gerne wissen, wie ich dieses Bild skalieren kann, nachdem ich es von spriteme1.png aus zugeschnitten habe
Hier ist die URL des Beispiels: http://css-tricks.com/examples/CSS-Sprites/Example1After/
Ich würde gerne wissen, ob ich die Symbole neben Punkt 1,2,3,4 verkleinern kann.
css
css-sprites
Michael
quelle
quelle
Antworten:
Sie können die Hintergrundgröße verwenden , da diese von den meisten Browsern unterstützt wird (jedoch nicht von allen http://caniuse.com/#search=background-size ).
Oder
Sie können eine Kombination aus Zoom für Webkit / dh und Transformation verwenden: Skalieren für Firefox (-moz-) und Opera (-o-) für browserübergreifende Desktops und Mobilgeräte
quelle
Wenn Sie Sprites verwenden, sind Sie auf die Abmessungen des Bilds im Sprite beschränkt. Die
background-size
von Stephen erwähnte CSS-Eigenschaft wird noch nicht allgemein unterstützt und kann bei Browsern wie IE8 und darunter zu Problemen führen. Aufgrund ihres Marktanteils ist dies keine praktikable Option.Eine andere Möglichkeit, das Problem zu lösen, besteht darin, zwei Elemente zu verwenden und das Sprite mithilfe eines
img
Tags wie folgt zu skalieren :Auf diese Weise
div.sprite-image
schneidet das äußere Element ( ) ein 20 x 20 Pixel großes Bild aus demimg
Tag ab, das sich wie ein skaliertes Bild verhältbackground-image
.quelle
src
per CSS zuweisen .<img>
sollte nur verwendet werden, wenn es Teil des Inhalts ist. Für Designzwecke sind Hintergrundbilder ein Muss.Versuchen Sie Folgendes : Stretchy Sprites - Browserübergreifende, reaktionsschnelle Größenänderung / Dehnung von CSS-Sprite-Bildern
Diese Methode skaliert Sprites "reaktionsschnell", sodass die Breite / Höhe entsprechend der Größe Ihres Browserfensters angepasst wird. Es verwendet nicht
background-size
als Unterstützung für diese in älteren Browsern ist nicht existent.CSS
HTML
quelle
transform: scale();
Das ursprüngliche Element behält seine Größe bei.Ich fand die beste Option zu verwenden
vw
. Es funktioniert wie ein Zauber:https://jsfiddle.net/tomekmularczyk/6ebv9Lxw/1/
quelle
Hier ist, was ich getan habe, um dies zu tun. Denken Sie daran, dass es unter IE8 und darunter nicht funktioniert.
Die Breite des Hintergrundbilds wird als übergeordnetes
#element
Element verkleinert. Dasselbe können Sie auch mit der Höhe tun, wenn Sieheight
in einen Prozentsatz umrechnen . Das einzig schwierige ist, die Prozentsätze für herauszufindenbackground-position
.Der erste Prozentsatz ist die Breite des Zielbereichs des Sprites bei normaler Breite geteilt durch die Gesamtbreite des Sprites und multipliziert mit 100.
Der zweite Prozentsatz ist die Höhe des Zielbereichs des Sprites vor der Skalierung geteilt durch die Gesamthöhe des Sprites und multipliziert mit 100.
Der Wortlaut dieser beiden Gleichungen ist etwas schlampig. Lassen Sie mich wissen, wenn ich es besser erklären muss.
quelle
Das scheint bei mir zu funktionieren.
Wenn sich die Sprites im Raster befinden, setzen Sie die
background-size
Anzahl der Sprites auf 100% und die Anzahl der Sprites auf 100%. Verwenden Sie dann,background-position -<x*100>% -<y*100>%
wobei x und y das auf Null basierende Sprite sindMit anderen Worten, wenn Sie das 3. Sprite aus der linken und 2. Reihe wollen, ist das 2 vorbei und 1 runter
Zum Beispiel ist hier ein Sprite Sheet 4x2 Sprites
Und hier ist ein Beispiel
Wenn die Sprites unterschiedliche Größen haben, müssen Sie die
background-size
für jedes Sprite auf a Prozent einstellen , sodass die Breite des Sprites 100% beträgtMit anderen Worten, wenn das Bild 640 Pixel breit ist und das Sprite in diesem Bild 45 Pixel breit ist, müssen diese 45 Pixel 640 Pixel groß sein
Dann müssen Sie den Offset einstellen. Die Komplikation des Versatzes besteht darin, dass 0% links und 100% rechts ausgerichtet sind.
Als Grafikprogrammierer würde ich erwarten, dass ein Versatz von 100% den Hintergrund 100% über das Element bewegt, mit anderen Worten völlig von der rechten Seite, aber das bedeutet nicht, dass 100% bei Verwendung mit verwendet werden
backgrouhnd-position
.background-position: 100%;
bedeutet rechts ausgerichtet. Das Forum, um dies nach der Skalierung zu berücksichtigen, ist alsoAngenommen, der Versatz beträgt 31px
Hier ist ein 640x480-Bild mit 2 Sprites.
Befolgen Sie die obigen Berechnungen für Sprite 1
quelle
Alter Beitrag, aber hier ist, was ich verwendet habe
background-size:cover;
(Hutspitze an @Ceylan Pamir) ...BEISPIEL VERWENDUNG
Horizontaler Kreisflipper ( Bewegen Sie den Mauszeiger über das Bild auf der Vorderseite, klappt mit einem anderen Bild nach hinten).
BEISPIEL
SPRITE 480px x 240px
BEISPIEL Endgröße
Einzelbild @ 120px x 120px
ALLGEMEINER CODE
.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;}
ABKÜRZTE FALLDECKEL
http://jsfiddle.net/zuhloobie/133esq63/2/
quelle
Versuchen Sie es mit der Hintergrundgröße: http://webdesign.about.com/od/styleproperties/p/blspbgsize.htm
Gibt es etwas, das Sie davon abhält, die Bilder in der gewünschten Größe zu rendern?
quelle
background-size
ist CSS 3 und wird noch nicht allgemein unterstützt.Ich habe eine Weile gebraucht, um eine Lösung für dieses Problem zu finden, mit dem ich zufrieden war:
Problem:
Ein SVG-Sprite von Symbolen - beispielsweise 80 x 3200 Pixel
Wir möchten jede Verwendung in Inhaltsselektoren (: vor /: nach) an verschiedenen Stellen über verschiedene Größen skalieren, ohne die Koordinaten jedes Sprites basierend auf der verwendeten Größe neu zu definieren.
Mit dieser Lösung können Sie also dieselben Sprite-Koordinaten in
<button>
einer Zeit verwenden,<menuitem>
während Sie sie noch skalieren.Durch die Verwendung von Prozentsätzen (auf 2 Dezimalstellen) in der Hintergrundposition anstelle der Hintergrundgröße, wie von anderen hier vorgeschlagen, können Sie dieselbe Symboldeklaration auf eine beliebige Größe skalieren, ohne sie erneut deklarieren zu müssen.
Der Prozentsatz für Position-y ist die ursprüngliche Sprite-Höhe / Symbolhöhe in% - in unserem Fall hier 80px * 100 / 3200px == Jedes Sprite wird durch eine y-Position von 2,5% dargestellt.
Wenn Sie Hover- / Mouseover-Zustände haben, können Sie die Breite des Sprites verdoppeln und in der Position-x-Koordinate angeben.
Der Nachteil dieses Ansatzes besteht darin, dass durch Hinzufügen weiterer Symbole zu einem späteren Zeitpunkt die Sprite-Höhe und damit die y-Position% geändert wird. Wenn Sie dies jedoch nicht tun, müssen Ihre Sprite-Koordinaten für jede benötigte skalierte Auflösung geändert werden.
quelle
Ich denke, wir haben eine einfachere Lösung für die Skalierung von Bildern gefunden: Beispiel - Nehmen wir an, es gibt ein Bild mit 3 gleich großen Sprites, die Sie verwenden möchten. Verwenden Sie CSS, um das Bild zu skalieren
Geben Sie dann die benutzerdefinierte Höhe und Breite an, die auf Ihr HTML-Element angewendet werden muss, z.
Ein Beispielcode würde ungefähr so aussehen:
Ich bin ziemlich neu in CSS und Styling ist nicht mein bester Bereich. Dies könnte ein falscher Weg sein. Aber es hat bei mir in Firefox / Chrome / Explorer 10 funktioniert. Ich hoffe, es funktioniert auch in älteren Versionen.
quelle
Verwenden
transform: scale(...);
und fügen Sie Matching hinzumargin: -...px
, um den freien Speicherplatz für die Skalierung zu kompensieren. (Sie können verwenden* {outline: 1px solid}
, um Elementgrenzen zu sehen).quelle
2018 hier. Verwenden Sie die Hintergrundgröße mit Prozentsatz.
BLATT:
Dies setzt eine einzelne Reihe von Sprites voraus. Die Breite Ihres Blattes sollte eine Zahl sein, die gleichmäßig durch 100 + Breite eines Sprites teilbar ist . Wenn Sie 30 Sprites mit einer Größe von 108 x 108 Pixel haben, fügen Sie am Ende einen zusätzlichen Leerraum hinzu, um die endgültige Breite 5508 Pixel (50 * 108 + 108) zu erhalten.
CSS:
HTML:
quelle
Verwenden Sie
transform: scale(0.8);
mit dem Wert, den Sie anstelle von 0,8 benötigenquelle
Stellen Sie die Breite und Höhe auf das Wrapper-Element des Sprite-Bildes ein. Verwenden Sie dieses CSS.
quelle
Einfach ... Verwenden Sie zwei Kopien desselben Bildes mit unterschiedlichem Maßstab auf dem Sprite-Blatt. Stellen Sie die Koordinaten und die Größe in der Logik der App ein.
quelle