CSS dosyasında göreli URL kullanarak hangi konuma göreceli?


484

Bir CSS dosyasında arka plan resmi URL'si gibi bir şey tanımlarken, göreli bir URL kullanırken neye göre? Örneğin:

Dosyanın /stylesheets/base-styles.cssşunları içerdiğini varsayalım :

div#header { 
    background-image: url('images/header-background.jpg');
}

Ben aracılığıyla farklı belgeler içine bu stil eklerseniz <link ... />CSS dosyasındaki göreli URL olacak stil belgeye göreceli içinde /stylesheets/veya geçerli belgeye göre o kadar kapsıyor? Olası yollar:

/item/details.html
/about/index.html
/about/extra/other.html
/index.html

Yanıtlar:


551

W3'e göre :

Kısmi URL'ler, belgeye göre değil, stil sayfasının kaynağına göre yorumlanır

Bu nedenle, sorunuza cevap olarak, göreceli olacaktır /stylesheets/.

Bunu düşünürseniz, CSS dosyası farklı dizinlerdeki sayfalara eklenebileceğinden, bu mantıklıdır, bu nedenle CSS dosyasına standartlaştırılması, URL'lerin stil sayfalarının bağlandığı her yerde çalışacağı anlamına gelir.


kuralın bir istisnası var gibi görünüyor: -ms-behaviorIE'de :(
pkyeck

2
başka bir istisna daha vardır: url özel bir özelliğin varsayılan değeri olduğunda. Diyelim ki tanımladınız .banner { background-image: var(--bgimg, url('images/default.jpg')); }ama --bgimghenüz bir değer tanımlamıyorsunuz . Sonra sayfada /index.html, a .bannerarayacak /images/default.jpg, ancak başka bir sayfada /about/index.htmla .bannergörünecektir /about/images/default.jpg. çok kırık IMO.
chharvey

düzeltme: yukarıdaki varsayılan değer hatası Chrome v60'ta düzeltildi.
chharvey

css'niz bir pakette ise yol gerçekten önemli değil. Burası olacağını düşündüğünüz yer değil, artık hiçbir şey göreceli değil.
Tod

1
Özellikleri kullanırken sorunlar yaşadım: background: var(--primary-color-background) no-repeat center center url("maps.jpg");Bu, IOS ve Safari'de çalışmadı. /resources/maps.jpgSafari'de yalnızca mutlak yol bir css özelliğiyle birlikte çalışır.
andy


50

Stil sayfasına göredir, ancak URL'leri URL'nize göreli olarak öneririm:

div#header { 
  background-image: url(/images/header-background.jpg);
}

Bu şekilde, dosyalarınızı ileride yeniden düzenlemeye gerek kalmadan hareket ettirebilirsiniz.


Öndeki ekstra "/" ne fark eder?
Casebash

15
Tıpkı komut satırındaki yol adları gibi, yolun önündeki / önündeki satır, geçerli web sunucusundaki mutlak bir kaynağa işaret ettiği anlamına gelir.
David W. Keith

4
Aslında USS'leri CSS dosyasına göre kullanmanın daha iyi olduğu bir durum var. Benim durumumda, tüm CSS verilerini koyduğum bir "/ css /" dizinim var. Şimdi, web sitesindeki yeni özellikleri ayrı bir klasörde test etmek istiyorum. Test etmek zorlaşır, örneğin test klasöründeki yeni arka plan resimleri. Her şey ihtiyaçlarınıza bağlı ...
Diego

12
Mutlak yollar, çözümün etki alanının bir alt klasörüne yerleştirilmesini zorlaştırır. Alt klasörleri desteklemek istemenizin birkaç nedeni vardır. Prod ile aynı alanda bulunan önceki sürüm / ön sürümlere sahip olabileceğiniz testlerin (Diego'nun belirttiği gibi) yapılmasını kolaylaştırır. Kurumsal proxy sunucuların TOA'yı destekleyecek, tüm çözümleri tek bir etki alanına vb. Taşıyacak şekilde gelecekteki değişiklikler. Özellikle SSL ile, birden çok etki alanı adının ek yükünü korumaktan kaçınmak isteyebilirsiniz. Benim için bu hususlar ".css-dosyamı taşımam daha kolay" dan çok daha önemlidir.
Tedd Hansen

görüntü ve bunun gibi şeyler yine de cdn gider bu yüzden bu mükemmel
Muhammed Umer

30

Bir kaynağın mutlak konumuna bağlı olmayan modüler stil sayfaları oluşturmak için yazarlar göreli URI'ler kullanabilir. Göreli URI'lar ( [RFC3986] ' da tanımlandığı gibi ), bir temel URI kullanılarak tam URI'lara çözümlenir. RFC 3986, bölüm 5, bu işlem için normatif algoritmayı tanımlar. CSS stil sayfaları için temel URI, kaynak belgenin stil sayfasının stilidir.

Örneğin, aşağıdaki kuralı varsayalım:

body { background: url("yellow") }

URI tarafından belirtilen bir stil sayfasında bulunur:

http://www.example.org/style/basic.css

Kaynak belgenin BODY öğesinin arka planı, URI tarafından belirtilen kaynak tarafından açıklanan görüntü ile döşenecektir.

http://www.example.org/style/yellow

Kullanıcı aracıları, geçersiz URI'leri veya kullanılamayan veya uygulanamayan kaynakları belirleyen URI'leri işleme şekline göre değişebilir.

Alındığı CSS 2.1 spec .



5

Oluşabilecek ve görünüşte kırılan bir sorun, css'in otomatik küçültülmesi kullanılır. Küçültülmüş paket için istek yolu, orijinal css'den farklı bir yola sahip olabilir. Bu otomatik olarak gerçekleşebilir ve karışıklığa neden olabilir.

Küçültülmüş paket için eşlenen istek yolu, yalnızca "minifiedbundlename" değil "/ originalcssfolder / minifiedbundlename" olmalıdır.

Başka bir deyişle, paketlerinizi orijinal klasör yapısıyla aynı yola (/) sahip olacak şekilde adlandırın, bu şekilde yazı tipleri, resimler gibi harici kaynaklar tarayıcı tarafından URI'ları düzeltmek için eşlenir. Alternatif, mutlak url kullanmaktır (css'nizdeki referanslar), ancak bu genellikle istenmez.


Bu bana biraz zaman kazandırdı! Teşekkürler. Daha fazla belgelenmelidir
mjbates7

0

Bu benim için çalıştı. iki nokta ve eğik çizgi ekleyerek.

body{
    background: url(../images/yourimage.png);
}

-4

Kullanmayı deneyin:

body {
  background-attachment: fixed;
  background-image: url(./Images/bg4.jpg);
}

Images göndermek istediğiniz resmi tutan klasör olmak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.