Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   как передать значение переменной в background-size? (https://javascript.ru/forum/jquery/53012-kak-peredat-znachenie-peremennojj-v-background-size.html)

kroleternal 17.01.2015 13:34

как передать значение переменной в background-size?
 
можно ли передать значение переменной в background-size? единственно работоспособный вид которого я добился это

$('#block').css( 'background-size', '666px 444px' );


либо же в %/cover/contain/auto.

необходимо вместо конкретных значений задать переменные. возможно ли это? если нет, как можно решить ситуацию?
спасибо за ответы

danik.js 17.01.2015 13:44

Цитата:

Сообщение от kroleternal
если нет, как можно решить ситуацию?

А че за ситуация? Откуда эти значения берутся? Зачем менять размер фона?

kroleternal 17.01.2015 15:06

полурезиновый одностраничник, масштабируемый имейдж в фоне. по умолчанию прописано "background-size: cover", но с ним не везде все хорошо. потому написал cover "вручную", то бишь через условие -
примерно так:
var w_w_bg = $(window).width();
		var w_h_bg = $(window).height();
		if( (w_w_bg/w_h_bg) >= 1.7778 ) //соотношение сторон имейджа 16/9
		 { 
		var bg_w_res = w_w_bg;
		var bg_h_res = (w_w_bg/16*9);
		$('.bgwrapper').css( "background-size", "bg_w_res bg_h_res" );
		 }
		 else 
		 {
		var bg_h_res = ($(window).height()-$('#header').height());
		var bg_w_res = (bg_h_res/9*16);
		$('.bgwrapper').css( "background-size", "bg_w_res bg_h_res" );
		 };


этот скрипт решит мою проблему с адаптацией, если я все-таки смогу задать bg_w_res и bg_h_res

danik.js 17.01.2015 15:28

Цитата:

Сообщение от kroleternal
с ним не везде все хорошо

Вот лучше на словах объясни. Чет не хочется в коде разбираться.

kroleternal 17.01.2015 17:01

вот если на словах, то нужно чтобы в строке
$('#block').css( "background-size", "x y" );

я мог задать параметры x и y :)

поскольку на многих мобильных устройствах свойство cover работает коряво вопреки описанию, в частности бардак выходит на айфонах. сейчас используется подгон кода посредством -webkit-min-device-pixel-ratio и прочих неблагозвучностей, и такой вариант адаптации я не считаю оптимальным. поэтому и нужен мой скрипт в работоспособном виде, это сведет адаптацию к минимально корявому коду.

danik.js 17.01.2015 17:21

Цитата:

Сообщение от kroleternal
я не считаю оптимальным

Такой "неоптимальный" в твоем понимании вариант будет гораздо оптимальнее верстки, работающей на jQuery (даже писать смешно) :D .

danik.js 17.01.2015 17:24

А где твой js код айфон учитывает? Вроде нет таких строк. Только какой-то хедер вычитывает. Это стоит делать через css. И вторую сторону по первой - но и это нахер не нужно, ибо css-значение auto сделает это за тебя.

kroleternal 17.01.2015 17:43

Цитата:

Сообщение от danik.js
А где твой js код айфон учитывает?

на данный момент адаптация прописана как раз через css. в js этого нет

Цитата:

Сообщение от danik.js
будет гораздо оптимальнее верстки, работающей на jQuery

частично верстка и так на JQ, в указанном коде этого не видно. так что не так уж и смешно, поскольку библиотеки все равно задействованы

Цитата:

Сообщение от danik.js
но и это нахер не нужно, ибо css-значение auto сделает это за тебя.

сделало бы если бы. не от хорошей жизни же я начал извращаться вместо того чтобы проставить 100% auto.

спасибо за комментарии, но основной вопрос вы обходите десятой дорогой. параметры в background-size - можно или нельзя?можно - как? нельзя - почему?

danik.js 17.01.2015 17:49

Цитата:

Сообщение от kroleternal
сделало бы если бы

Что ты хочешь этим сказать?

<style>
div{
height: 50px;
background: url(http://javascript.ru/forum/images/smilies/blink.gif) no-repeat center;
}
.div1{
background-size: 50px auto;
}
.div2{
background-size: auto 50px;
}
</style>
<div class="div1"></div>
<div class="div2"></div>


Хочешь сказать, что пропорции в этом примере не соблюдаются?

danik.js 17.01.2015 17:53

Цитата:

Сообщение от kroleternal
так что не так уж и смешно

Это не смешно. Это очень печально. Я на мобиле своей js отключил. За все время не встретил пока ни одного сайта со сломавшейся из-за этого верстки. Оказывается недалекие разработчики все-таки есть, просто я на их сайты еще не попадал.

kroleternal 17.01.2015 17:53

хочу сказать что на НЕКОТОРЫХ устройствах - абсолютно верно, не соблюдается.

danik.js 17.01.2015 18:03

Цитата:

Сообщение от kroleternal
НЕКОТОРЫХ

Это каких? Мне как верстальщику не помешает знать.

DynkanMaclaud 17.01.2015 18:59

kroleternal,
$('.bgwrapper').css( "background-size", "bg_w_res bg_h_res" );
		 };


ты тут строку передал а не переменную, то в css будет background-size:bg_w_res bg_h_res

kroleternal 17.01.2015 19:13

DynkanMaclaud,
при
var bg_w_res = 600;
var  bg_h_res = 400;
$('.bgwrapper').css({backgroundSize: bg_w_res bg_h_res;});

результат Uncaught SyntaxError: Unexpected identifier

при
var bg_w_res = 600px;
var  bg_h_res = 400px;
$('.bgwrapper').css({backgroundSize: bg_w_res bg_h_res;});

результат Uncaught SyntaxError: Unexpected token ILLEGAL

при
var bg_w_res = 600+'px';
var  bg_h_res = 400+'px';
$('.bgwrapper').css({backgroundSize: bg_w_res bg_h_res;});

результат Uncaught SyntaxError: Unexpected identifier

во всех вариантах не работает
я неверно задаю параметр?

danik.js 17.01.2015 19:16

kroleternal,
Цитата:

Сообщение от danik.js
Это каких? Мне как верстальщику не помешает знать.


danik.js 17.01.2015 19:17

И вот я еще писал, ты видимо не увидел:
Цитата:

Сообщение от danik.js
Это не смешно. Это очень печально. Я на мобиле своей js отключил. За все время не встретил пока ни одного сайта со сломавшейся из-за этого верстки. Оказывается недалекие разработчики все-таки есть, просто я на их сайты еще не попадал.


kroleternal 17.01.2015 19:22

danik.js,
Цитата:

Сообщение от danik.js
Это каких? Мне как верстальщику не помешает знать.

зачем? вам ведь известны ответы на все вопросы. кроме тех которые вам задают.
если вы отключили js, то на моем проекте получите css со свойствами
background-size: cover
-webkit-background-size: cover
-o-background-size: cover
-moz-background-size: cover

и поскольку в вашей вселенной это свойство работает без проблем, то вы получите ожидаемую неломаную верстку. я же пытаюсь учесть и людей из других галактик, у которых оно может не сработать, и обезопасить верстку скриптом. и все что я просил - ответ, принимает свойство параметры или нет. и поскольку в ходе дискуссии я обрел уверенность что у вас нет ответа, то очевидно ваши комментарии направлены на увеличение количества постов, не более.

если вас действительно интересует, съехавшую верстку мой координатор обнаружил на айпаде. не уточнял каком

рони 17.01.2015 19:27

kroleternal,
bg_w_res + " " + bg_h_res

DynkanMaclaud 17.01.2015 19:47

рони,
не работает(((
var bg_w_res=$(window).width();
var bg_h_res=$(window).height();

$('div').css('background-size',bg_w_res + " " + bg_h_res);

danik.js 17.01.2015 19:51

Цитата:

Сообщение от kroleternal
принимает свойство параметры или нет

Какие блин еще параметры. Значение должно быть валидной с точки зрения css строкой, не более.

ruslan_mart 17.01.2015 20:03

Цитата:

Сообщение от DynkanMaclaud
не работает(((

bg_w_res + 'px ' + bg_h_res + 'px'

kroleternal 17.01.2015 20:20

Ruslan_xDD,
благословен будь, смертный! (или как вас там по батюшке). спасибушка)

danik.js 17.01.2015 20:28

kroleternal, удачи и побольше говнокода тебе, от всей души!

kroleternal 17.01.2015 20:35

danik.js,
благодарю! всегда обращайся

DynkanMaclaud 17.01.2015 22:18

эхх я вот только одного понять не могу, kroleternal, ты сделал этот скрипт чтобы верстка в старых браузерах не ломалась но как же она будет не разваливаться ведь на js ты используешь свойство background-size, а оно ими(старыми браузерами) не поддерживается)))))

kroleternal 17.01.2015 22:31

DynkanMaclaud,
не совсем верно. проблема решается не для старых браузеров, поскольку по загадочной прихоти дизайнера и заказчика этот сайт вообще не рассчитан на "слабый доступ": там одних бекграундов мегов на 10, тяжелые слайдеры и прочее. нафига - вопрос не ко мне)
проблема в том что на новеньких сафари ехал фон. вот для того и делается. по-хорошему я бы выкинул большую часть этого добра и все было бы красиво

kroleternal 18.01.2015 15:16

результирующее, кому понадобится:

$('#block').css( 'background-size', bg_w_res + 'px ' + bg_h_res + 'px' );
$('#block').css( 'background-position', a + 'px ' + b + 'px' ); //если фон получается больше самого блока, позиционирование необходимо задать в пикселях, а не, например, top center, иначе имейдж впишется в блок

ruslan_mart 19.01.2015 14:41

kroleternal, и много ли заказчик платит за такой "код"? :)

kroleternal 19.01.2015 19:50

Ruslan_xDD,
не за код, а за свое извращенное представление о прекрасном)


Часовой пояс GMT +3, время: 17:22.