2013-04-17 9 views
10

Czy możliwe jest tworzenie pełnych reguł zapytań o media w locie przy użyciu Javascript lub jQuery?
Generowanie zapytań o media CSS za pomocą javascript lub jQuery

Używałem wiele zapytań o media kierować uogólnione rzutnie i konkretnych urządzeń/ekranów przy użyciu inline CSS, importu i powiązanych plików:

@media screen and (min-width:400px) { ... } 
@import url(foo.css) (min-width:400px); 
<link rel="stylesheet" type="text/css" media="screen and (min-width: 400px)" href="foo.css" /> 

mogę dodać/usunąć zajęcia przy użyciu jQuery:

$("foobar").click(function(){ 
    $("h1,h2,h3").addClass("blue"); 
    $("div").addClass("important"); 
    $('#snafu').removeClass('highlight'); 
}); 

ja również spojrzeć na document.stylesheets i pozornie archaiczne i przeglądarka specyficzne:

document.styleSheets[0].insertRule("p{font-size: 20px;}", 0) 

Ale nie mogę znaleźć żadnego odniesienia do programowo generowania:

@media screen and (min-width:400px) 

z javascript bezpośrednio lub w jakiejkolwiek formie.

+1

Wystarczy aktualizowania zawartości istniejącego 'style' elementem wydaje się działać prawidłowo: http: // jsfiddle. net/vfLS3/ –

+0

Czy chodzi ci o dodanie reguły zapytań o media css? – itsstephyoutrick

+0

@ExplosionPills To jest idealna i godna 'odpowiedź' – nickhar

Odpowiedz

28

Możesz po prostu zaktualizować istniejący element <style> (lub utworzyć), aby zachować regułę, która będzie działać w danym kontekście.

document.querySelector('style').textContent += 
    "@media screen and (min-width:400px) { div { color: red; }}" 

http://jsfiddle.net/vfLS3/

+1

'$ ('style'). Text (" @ media (min-width: 400px) {div {color: red;}} ")' –

+3

@MuhammadUmer to zastąpić całą zawartość elementu stylu, zamiast dodawać do niego. –

+1

@MuhammadUmer '.append' nie dołącza treści tekstowej, ale raczej element. Jeśli argument jest łańcuchem, jQuery spróbuje wybrać element i dusi się na '@' –

4

używam w ten sposób. To pozwala zaktualizować mnoży style w dokumencie

w HTML:

<style class="background_image_styles"> 
</style> 

w JS

$(".background_image_styles").text("@media (min-width: 1200px) {.user_background_image{background-image: url('https://placehold.it/1200x300');}}");