2014-10-17 2 views
0

Я пытаюсь получить некоторый отзывчивый CSS, который изящно изменяет размер элемента изображения.Получение процентного результата CSS calc

В пределах одного диапазона (@media screen and (min-width: 600px) and (max-width: 960px)) Хочу Процентная ширина моего изображения для изменения.

В частности, на этапе 960, я хочу, чтобы это эффективно было width: 50%, но до 600, я хочу, чтобы это эффективно было width: 38.1966%. Для каждого уменьшения ширины пикселя ширина, которая мне нужна, уменьшается на 0,032787%.

До сих пор я не нашел способа получить calc(), чтобы справиться с этим.

Фактически необходимо выполнить первый расчет: (960px - 100vw). К сожалению, это дает результат в пикселях, тогда как мне нужно, чтобы он преобразовывался в число, которое я могу умножить на мою процентную процентную дисперсию.

Возможно ли это?

+0

это должно быть только CSS? вы можете использовать jQuery? – starvator

+0

Я дал ответ только с помощью CSS - но это может быть сделано намного проще с помощью чего-то вроде LESS, если вы захотите попробовать это. http://lesscss.org/ - особенно представление функций языка/операций: http://lesscss.org/features/#features-overview-feature-operations – remixdesign

ответ

0

Если вы хотите использовать JQuery:

После того как вы вычисленное значение в CSS, как вы упомянули, вы получите получить его с var itemWidth = $('#id').innerWidth();. Затем, вы можете получить ширину страницы с var bodyWidth = $('body').innerWidth();

Таким образом, вы можете написать скрипт, который использует bodyWidth и itemWidth вычислить процент var percentVar= itemWidth/bodyWidth * 100; и использовать, чтобы установить ширину элемента $("#id").css("width", percentVar);.

Итак, JQuery будет выглядеть вдоль этих линий:

var main = function(){ 
    var itemWidth = $('#id').innerWidth(); 
    var bodyWidth = $('body').innerWidth(); 
    var percentVar= itemWidth/bodyWidth * 100; 
    $("#id").css("width", percentVar); 
} 

$(document).ready(main) 

Или, если бы вы хотите использовать его, сделать функцию и положить, что в основной функции

var main = function(){ 
    element_sizer('#id'); 
    element_sizer('#id2'); 
} 

$(document).ready(main)  

function element_sizer(id) { 
    var itemWidth = $(id).innerWidth(); 
    var bodyWidth = $('body').innerWidth(); 
    var percentVar= itemWidth/bodyWidth * 100; 
    $(id).css("width", percentVar); 
} 

Примечание: вы можете использовать width, innerWidth, outerWidth в зависимости от того, что вам нужно link

+0

К сожалению, это загрязняет клиентский код с помощью встроенного css. И в то время как все остальные, кажется, думают, что все в порядке, я вижу это как отвлечение от табличных макетов. (Я считаю, что настройка на ссылку на класс, а не на идентификатор, не будет проблемой - там есть стек элементов.) Я также забыл упомянуть ... нет jQuery. – Rick

+0

@ Удачи, тогда я не думаю, что вы можете сделать это с чистым css – starvator

+0

Спасибо. Я думал так же - они оставили очень забавные вещи. – Rick

0

Pure CSS .. это hone stly беспорядок, но он будет работать:

Fiddle: http://jsfiddle.net/r9xwL0rb/

CSS:

@media screen and (min-width: 600px) and (max-width: 960px){img{width: 50%;}} 
@media screen and (min-width: 600px) and (max-width: 959px){img{width: 49.96721278%;}} 
@media screen and (min-width: 600px) and (max-width: 958px){img{width: 49.93442556%;}} 
@media screen and (min-width: 600px) and (max-width: 957px){img{width: 49.90163833%;}} 
... etc (see fiddle for complete source) 
+0

Спасибо @remixdesign, я полагаю, что это действительно так. (Хотя они могут быть сгруппированы по группам 3-5, к тому моменту, когда вы уменьшаетесь до 40%, как 0.Для изменения ширины на пиксель требуется 2% разницы.) Но согласился - проклятый беспорядок. – Rick

+0

Добро пожаловать. Незначительное обновление (не вложенные медиа-запросы внутри основного - это был надзор.) Создал скрипку для вас! Пожалуйста, примите ответ, если это поможет! – remixdesign

Смежные вопросы