2010-11-15 46 views
8

我工作的HTML5移動應用程序,我最初必須通過CSS設置DIV項的背景如下:如何將CSS網址設置爲絕對位置?

background-image: url('images/ClanSpider.png'); 

在我的應用程序,我有一個基於改變的背景DIV的方法從使用jQuery以前的方法在下拉列表中做出選擇:當我在我的網頁根

function ResetMyHonor() 
{  
    ClanImage = 'images/Clan' + MyClanName + '.png'; 
    $("#MyClanName").html(MyClanName); 
    $("#MyHonorBox").css('backgroundImage', 'url(' + ClanImage + ')'); 
} 

所有這一切工作正常。但是,我在應用程序中使用哈希標記導航頁面(如#MyHonor)中的一些鏈接。當我導航到其中一個標籤並調用上述重置功能時,圖像會中斷。當我拉起Chrome Inspector查看DIV標籤時,它表示它試圖加載的圖像是「images/MyHonor/ClanSpider.png」,它不存在。

我知道CSS網址會根據應用程序中它的位置生成鏈接,但是移動應用程序中的CSS文件的位置並不重要。

有沒有一種方法可以讓我重寫URL處理中出現的內容或指定DIV背景圖像的替代方式,而無需進行任何類型的服務器端處理?理想情況下,此應用將通過HTML5的清單緩存功能運行,因此我無法訪問任何基於服務器的語言。

回答

6

從通過對其他答案我覺得你爲自己創造一個問題,那並不是你的意見閱讀真的存在。如果url('/images/ClanSpider.png')在您上傳到Web服務器時正常工作,那麼訣竅是在本地工作時使其工作方式相同。到目前爲止,這是最簡單的方法,尤其是如果你的焦點是一個離線的應用程序,它對服務器端的要求(我假設是真的,正如你提到的file:/// URIs)沒有什麼問題,就是運行一個本地web服務器。

的Python附帶一個模塊SimpleHTTPServer,如果你有Python installed然後開始它是要你L5RHonor項目目錄在命令提示符併發出以下命令即可:

python -m SimpleHTTPServer 

然後,而不是訪問您的像這樣的URI文件:

file:///H:/Projects/L5RHonor/images/ClanSpider.png 

你會訪問他們像這樣:

http://localhost:8000/images/ClanSpider.png 

現在所有的根相對文件路徑都能正常工作,因爲離線緩存在Chrome中可以正常工作,您可以從命令提示符窗口中的日誌中看到它正在請求並緩存根據你的清單正確的文件。

+1

關於創建我自己的問題的好解釋。回到「標準」方法並通過Visual Studio dev服務器(在我的情況下)解決問題,幫助我完成了任務。 – 2010-11-16 19:56:30

1

CSS文件的位置無關緊要,您正在修改HTML元素的.style屬性。這與使用樣式屬性相同。

由於這是嵌入在文檔中的CSS,所有的URI都是相對於文檔

你可能想用/開始的URL,或者如果你真的想在你的問題中指定的絕對位置:http://

5

嘗試把一個斜線對這些通路代表根。

即使用:的

url('/images/ClanSpider.png') 

代替

url('images/ClanSpider.png') 
+0

我試過這個,但它默認爲服務器的根目錄。當在本地開發時,我失去了我的項目路徑,並且在應該是file:/// H:/Projects/L5RHonor/images/ClanSpider.png時有file:/// H:/images/ClanSpider.png。我意識到這聽起來有點棘手,但如果應用程序清單功能類似,我也會失去圖像。 – 2010-11-15 13:43:23

+0

@ Dillie-O - 您是否在本地使用Web服務器來開發或開發磁盤上的文件並將它們直接加載到瀏覽器中?一旦它在真實的現場服務器上,網站的根源是什麼? – 2010-11-15 14:00:36

+0

有一點點。我進行本地開發,並通過Chrome/Safari測試核心功能。然後我把它推到一個服務器上,它不在任何子文件夾中。當前位置是http://counter.roku-mart.com – 2010-11-15 14:10:53

0

嘗試在URL的開始添加/

4

最簡單的解決方案顯然是在URL中添加一個斜槓以使其成爲絕對的。這樣可以很好地工作,但它不可能將應用程序移動到子目錄中,或將靜態資源移動到不同的服務器。如果這是一個問題,那麼有各種各樣的替代方法。

如果可能的背景圖像的數量是有限的,你可以定義每個人都在它自己的階級:

.bgSpider { background-image: url('images/ClanSpider.png'); } 
.bgFalcon { background-image: url('images/ClanFalcon.png'); } 
... 

,然後做一個.addClass()設置正確的圖像。

除此之外,就我所知,在Javascript中設置背景圖像路徑時,沒有辦法指定相對於樣式表(而不是當前文檔)的路徑。你將不得不使用絕對路徑的工作,或定義在JavaScript中的根路徑,並使用:

// in the script head 
imageRoot = "http://www.example.com/mysite/images"; 
// later.... 
$("#MyHonorBox").css('backgroundImage', 'url(' + imageRoot + ClanImage + ')'); 
+0

有一組有限的背景圖像,所以我喜歡這個選項。你知道,當應用程序清單拉下應用程序來處理應用程序時,使用完整的URL定義根路徑是否仍然有效?我見過的所有文檔都包含相對路徑。 – 2010-11-15 13:39:35

+0

@Dillie我不熟悉HTML 5移動應用程序,所以我無法肯定地回答!好問題。很有可能你可以使用絕對URL,當它們被拉下時它們會被緩存。 – 2010-11-15 13:49:40

+0

感謝您的幫助,但是這條路線讓我無法工作。我想也許是由於#MyHonor/images/image.png到/MyHonor/images/image.png的翻譯。 – 2010-11-16 19:55:39