2013-10-01 3 views
0

Мне интересно, можно ли изменить высоту правила сопоставленного CSS с помощью jquery/javascript.Изменение согласованного правила CSS

Это мой код до сих пор:

CSS

.ac-container input:checked ~ article.prorate{ 
    height: 450px; 
} 

.prorateTax { 
    display: none; 
    background: #CEF6CE; 
} 

JQuery

<script type="text/javascript"> 
$('.checkTax').change(function() { 
    if ($(this).attr("checked")) { 
     $('.prorateTax').fadeIn(); 
     $('.ac-container input:checked ~ article.prorate').css("height", "+=47px"); 
    } else { 
     $('.prorateTax').fadeOut(); 
     $('.ac-container input:checked ~ article.prorate').css("height", "-=47px"); 
    } 
}); 
</script> 

У меня есть флажок вы можете выбрать, какой будет исчезать в скрытый DIV, а затем увеличить высоту другого div, чтобы он соответствовал новому разделу. Я надеялся, что он просто изменит высоту css-совпадения, предоставленную в css. Однако вместо этого он устанавливает element.style текущего div для установки высоты. можно ли просто изменить согласованное правило CSS?

+0

Это должно быть сделано без JS. Вы должны быть в состоянии соответствовать высоте, я бы установил 2 jsfiddles один без соответствия js и один, чтобы посмотреть, какой из них работает лучше всего. Дайте мне знать, когда у вас есть одна из причин, почему это легко. – Cam

+0

Пожалуйста, покажите код HTML. –

+0

[Вы говорите что-то подобное] (http://stackoverflow.com/questions/18899448/is-possible-to-make-an-important-property-value-from-css-selector-a-non-importan/ 18899540 # 18899540) ('Проверить обновленные js'). –

ответ

1

css() работает только над стилями инлайн:

При использовании .css() как сеттер, JQuery изменяет свойство стиля элемента.

0

Нет, вы не можете перезаписать правило CSS, насколько я знаю.
.css() только записывает в атрибут стиля элемента, который имеет самый высокий specificity.

Альтернативой было бы добавить второй класс с более высокой специфичностью, но вы все равно будете делать то же самое. Основное преимущество этого подхода заключается в том, что вы удаляете css-материал из javascript, что делает его ненавязчивым.

CSS

.ac-container input:checked ~ article.prorate{ 
    height: 450px; 
} 

.ac-container input:checked ~ article.prorate.fadein{ 
    height: 497px; 
} 

.prorateTax { 
    display: none; 
    background: #CEF6CE; 
} 

JQuery

$('.checkTax').change(function() { 
    if ($(this).is(":checked")) { 
     $('.prorateTax').fadeIn(); 
     $('.ac-container input:checked ~ article.prorate').addClass("fadein"); 
    } else { 
     $('.prorateTax').fadeOut(); 
     $('.ac-container input:checked ~ article.prorate').removeClass("fadein"); 
    } 
}); 
+0

Мне нравится это предложение, однако, мой фрагмент включает только 1 из нескольких div, которые нужно затушевать. В ситуации, когда пользователь может выбрать 3-4 divs, нужно будет регулировать высоту несколько раз и отслеживать из. – Kizzim

1

Есть две проблемы с вашим кодом, AFAICS.

  • Вы должны использовать $(this).prop("checked") вместо attr()
  • В else ветви, вы должны либо использовать селектор input:not(:checked) или опустить :checked вообще
$('.checkTax').change(function() { 
    if ($(this).prop('checked')) { 
     $('.prorateTax').fadeIn(); 
     $('.ac-container input:checked ~ article.prorate').css("height", "+=47px"); 
    } else { 
     $('.prorateTax').fadeOut(); 
     $('.ac-container input:not(:checked) ~ article.prorate').css("height", "-=47px"); 
    } 
}); 

JSFiddle

+1

Или вы можете использовать '$ (this) .is (": checked ")', как в [этом примере] (http://jsfiddle.net/4ezAL/2/) – ShadowScripter

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