2013-07-04 58 views
2

我剛剛在另一個問題中接到了幫助,我最近在這裏問到精靈問題,但現在我讓他們正常工作,我遇到了另一個問題:如何縮放顯示的圖像?使用百分比縮放圖像精靈:可能嗎?

我當前的代碼如下:

<div class="index1"></div> 

和CSS:

img.index1 { 
    margin:auto; 
    width:258px; 
    height:300px; 
    background:url("../Images/index.png") 0px 0px; 
} 

這是原樣的作品,在絕對尺寸顯示來自精靈的相應圖像的基本代碼258 * 300像素。問題是,我也想設置寬度爲40%。這裏是我的嘗試:

.index1 { 
    margin:auto; 
    width:40%; 
    max-width:258px; 
    height:300px; 
    background:url("../Images/index.png") 0px 0px; 
} 

如果我使用普通圖像(即,不是精靈),我會簡單地將寬度設置爲40%,並且圖像很好地擴展到包含div。這是一個比例,所以高度也會降低,而不會出現任何失真或圖像中斷。使用上面的CSS,圖像是未縮放的,並且因爲寬度降低了,所以邊被切掉。

這裏的目的是讓寬度根據不同的瀏覽器寬度進行相應的調整,簡而言之,我想複製圖像行爲,就像使用設置了百分比寬度的簡單圖像一樣。我迄今爲止失敗了。不,我無法解決縮放問題。

編輯:我還應該提到,調整瀏覽器寬度僅調整圖像的多少被切斷。


解決方案:

首先,如果你有相同尺寸的多個圖像(也許是相同的比例,但我沒有測試),這僅適用。因此,我會盡我所能地嘗試解釋解決方案,並藉助一個假設性示例:

首先,您需要一個佔位符圖像。此圖像必須與您要顯示的圖像具有相同的尺寸或比例。不管圖像內容是什麼,但我用透明的圖像。

現在,假設您想要在精靈中有5張圖片,它們會顯示在您的主頁上。讓我們把這些圖像index1.png,指數2.png等下面是HTML顯示它:

<div class="stretch15"> 
    <img class="trans" src="Images/trans.png"> 
    <img class="sprite sprite1" src="Images/index.png" /> 
</div> 
<div class="stretch15"> 
    <img class="trans" src="Images/trans.png"> 
    <img class="sprite sprite2" src="Images/index.png" /> 
</div> 
<div class="stretch15"> 
    <img class="trans" src="Images/trans.png"> 
    <img class="sprite sprite3" src="Images/index.png" /> 
</div> 
<div class="stretch15"> 
    <img class="trans" src="Images/trans.png"> 
    <img class="sprite sprite4" src="Images/index.png" /> 
</div> 
<div class="stretch15"> 
    <img class="trans" src="Images/trans.png"> 
    <img class="sprite sprite5" src="Images/index.png" /> 
</div> 

你會發現有一個div內的兩個圖像。我馬上就會了解div class的意義。 trans類顯示透明圖像,「sprite sprite5」類顯示實際圖像。我爲這個圖像分配了兩個類,只是爲了讓我的CSS中的行數最少,並且使全局圖像變化更簡單。您還會注意到,五個div的內容之間的差異僅僅是第二個圖像從sprite1改爲5的第二個類名。我還會稍後解釋這一點。

現在的CSS:

.stretch15 { 
    width:15%; 
    max-width:258px; 
    overflow:hidden; 
    position:relative; 
    margin:0px auto; 
    display:block; 
} 
.trans { 
    width:100%; 
    height:auto; 
    display:block; 
    margin:0; 
    padding:0; 
} 
.sprite { 
    position:absolute; 
    top:0; 
    max-width:none; 
    max-height:100%; 
    display:block; 
} 
.sprite1 { 
    left:0; 
} 
.sprite2 { 
    left:-100%; 
} 
.sprite3 { 
    left:-200%; 
} 
.sprite4 { 
    left:-300%; 
} 
.sprite5 { 
    left:-400% 
} 

我使用的類名 'stretch15' 來顯示div的寬度。我使用多個div寬度,因此,我使用了一些任意名稱'stretch',然後使用一個數字來告訴我寬度是多少。所以stretch15告訴我這個div會有15%的寬度,就像在CSS中看到的那樣。通過改變這個div的CSS的寬度,你基本上覆制了(我知道它不是有效的代碼,但它是顯示它的最簡單的方法)的函數。

至於sprite1到5,它們都在sprite類中共享相同的樣式,所以剩下的只是給我確定哪個「左」位置開始顯示圖像。這就是爲什麼圖像必須全部大小相同。如果您向左移動-100%(或向右移動100%),則應該放在第二張圖像的左側。還剩下-200%讓您看到第三張圖片,依此類推。

至於其餘的東西,我老實說不太清楚爲什麼他們在那裏,除了他們工作的事實。我所做的是通過here查看源代碼。另外,如果你有類似Firebug(Firefox擴展)的東西,它確實會有所幫助,你可以在這裏禁用樣式來查看事情如何受到影響。它會幫助你理解很多。

+0

一些反饋的答案會很好 –

+0

@GCyrillus:對不起。我工作了兩份工作,很難及時回覆。希望我會盡快解決。 – Hiigaran

+0

oki,bon courage –

回答

3

如果你想要一個簡單的修補程序,而不必擔心跨瀏覽-問題,我建議使用正常圖像。

下,可以使用data URIsuse a combo of zoom for webkit/ie and -moz-transform:scale for Firefox終於break your head on background-size calculations

你也可能需要閱讀:How can I scale an image in a CSS sprite

希望這有助於!

+1

我跟着你的最後一個鏈接,然後跟着tobyj的帖子中的鏈接。必須做一些擺弄和查看源代碼,但我認爲這是爲我做的。這裏的關鍵字是'想想。如果我對結果感到滿意,我會稍後編輯我的帖子。非常感謝,隊友。 – Hiigaran

+0

O,那種瘋狂的謊言;讓我回避一下; 沒有更多的。 –

0

不太確定,如果我完全明白你的意思。

如果你想strectch(?)圖像上它的寬度, 你需要得到你想要你的精靈的部分的比例可以看出

http://codepen.io/gcyrillus/pen/fjCdD這裏的背景大小爲100% 232%。 調整窗口寬度直至最大寬度:40%。

也許精靈和容器的更好爲例保持理性: http://codepen.io/gcyrillus/pen/KuJDl

+0

如果你有一些真實的代碼和一些真實的圖像,它會更容易找出可以/需要做的限制 –