2016-08-05 31 views
3

Ich versuche, ein responsives Bild auf der Website zu setzen. Ich habe den folgenden Code<picture><source> relativ zur Breite von <picture>

<picture> 
<source media="(max-width: 400px)" srcset="cache/images/image.w400.jpg"></source> 
<source media="(max-width: 800px)" srcset="cache/images/image.w800.jpg"></source> 
<source media="(max-width: 1000px)" srcset="cache/images/image.w1000.jpg"></source> 
<source media="(max-width: 1200px)" srcset="cache/images/image.w1200.jpg"></source> 
<source media="(max-width: 1920px)" srcset="cache/images/image.w1920.jpg"></source> 
<img src="/imgresizer/images/image.jpg"> 
</picture> 

Die Größe des Bildelements wird durch das enthaltene div bestimmt.

Die Größe des enthaltenen div wird zufällig sein. es kann direkt im .container sein, es kann auch in .col-sm-6 sein

Problem ist hier die maximale Breite relativ zum Viewport. Ich möchte die Quelle basierend auf der Breite des Bildelements ausgewählt werden. Ist das möglich? Wenn das so ist, wie?

PS. Ich bevorzuge eine Lösung ohne Javascript.

EDIT: Was ich vermisse ist eine Möglichkeit, die Auswahl einer basierend auf seiner eigenen Breite zu haben. Ich nehme an, das ist nicht im HTML5-Standard?

+0

Sie müssen Javascript für diese, weil ich Sie davon ausgehen, tun dies auch für Leistungen und CSS-Lösung würde alle Bilder laden, dann nur die eine Anzeige auf dem Bildschirm entspricht. – Relisora

+0

Was ist die Breite des Bildelements? Gibt es ein Ballparkverhältnis zwischen dem Ansichtsfenster und dem Bild, oder ist das völlig dynamisch? –

+0

Das Verhältnis wird insgesamt dynamisch sein. –

Antwort

1
<img class="image-responsive" data-srcset="cache/images/image.w400.jpg 400w, cache/images/image.w800.jpg 800w, cache/images/image.w1000.jpg 1000w, cache/images/image.w1200.jpg 1200w, cache/images/image.w1920.jpg 1920w" data-src="images/image.jpg" sizes="720px" src="images/image.jpg"> 

window.onload = function() { 
     var images = document.getElementsByClassName('image-responsive'); 
     for(var i = 0; i < images.length; i++) { 
      var width = images[i].parentElement.offsetWidth; 
      images[i].setAttribute('sizes', width+'px'); 
      images[i].setAttribute('src', images[i].getAttribute('data-src')); 
      images[i].setAttribute('srcset', images[i].getAttribute('data-srcset')); 
     } 
    }; 

Für jetzt habe ich ein Bild mit srcset und ein wenig Javascript.

Dies ersetzt die Größe attibute mit der Breite des übergeordneten Elements. Wo die Standardgrößen = 400px.

Dies nutzt Javascript :(.

0

Können Sie die Abfragen für die maximale Breite ändern, um stattdessen Prozentsätze zu verwenden? Wenn Ihr Bildelement die Größe ändert, werden auf der gleichen prozentualen Breite des Bildes verschiedene Quellen ausgewählt.

+0

Ich verstehe nicht wirklich, was du meinst. Könnten Sie das ausarbeiten? –

+0

Sie sagen Sie Sie möchten, dass Ihr Bild relativ zum Bildelement statt zum Ansichtsfenster ist, aber Sie haben nicht gesagt, wie Sie die Größe des Bildelements festlegen: Ist es relativ zum Ansichtsfenster oder zu einem enthaltenden Element? – RussAwesome

+0

Die Größe des Bildelements wird durch das containg div –