Jquery как изменить css свойства

Использование метода jQuery css для установления, изменения, удаления и получения стилей (style) элемента.

Статья, в которой разберем, как в jQuery осуществляется работа со стилями (style) элемента.

jQuery - Работа со стилями элемента

В jQuery работа со стилями HTML элементов осуществляется через метод css. Данный метод используется как получения значения стилей, так и для их добавления, изменения и удаления.

Первый вариант метода css — это получение окончательного значения CSS-свойства непосредственно применяемого к элементу.

Синтаксис метода css:

// Вариант 1 (получение окончательного одного CSS свойства)
.css( propertyName )
// propertyName (тип: Строка) – имя CSS-свойства, значение которого нужно получить
.css( propertyNames )
// propertyName (тип: Массив) – массив, состоящий из одного или нескольких CSS-свойств, значения которых нужно получить

Данный метод, если его применить к набору элементов, возвращает значение CSS свойства только для первого его элемента.

Пример, в котором получим цвет фона непосредственно применённого к элементу #header:

var bgHeader = $('#header').css('background-color');

В jQuery названия CSS-свойств можно указывать как в CSS, так и как это принято в JavaScript. Т.е. убирать дефисы и заменять буквы, следующие за каждым дефисом на прописные.

// можно и так
var bgHeader = $('#header').css('backgroundColor');

Если необходимо получить значения указанного CSS свойства или набора этих свойств у всех элементов текущего набора, то в этом случае необходимо использовать, например, метод each.

Например, определим значение свойства display у всех выбранных элементов и выведем их в консоль:

// переберём все элементы .container
$('.container').each(function(index){
  // значение css-свойства display текущего элемента набора
  var display = $(this).css('display');
  // выведем результат в консоль (индекс элемента в наборе и его значение css-свойства display)
  console.log(index + '. display = '+ display);
});

Кроме этого, метод css позволяет также получить сразу несколько CSS свойств у элемента.

Например, при нажатии на HTML элемент div выведим его ширину и высоту:

<div style="width: 100px; height: 100px; background-color: bisque;"></div>
<div style="width: 200px; height: 200px; background-color: lightseagreen;"></div>
...
<script>
  // при нажатии на элемент div
  $('div').click(function () {
    // создадим переменную, которая будет содержать результат
    var output = [];
    // получим значения сразу нескольких CSS свойств
    var cssProperties = $(this).css(['width', 'height']);
    // переберём полученные свойства
    $.each(cssProperties, function (prop, value) {
      // добавим в массив элемент, содержащий имя свойства и значения
      output.push(prop + ": " + value);
    });
    //выведем массив в качестве содержимого элемента
    $(this).html(output.join('<br>'));
  });
</script>

Как изменить или добавить стиль к элементу в jQuery

Установить стиль элементу осуществляется тоже с помощью метода css, но в этом случае используется следующий синтаксис:

// 1 вариант (для установки одного стиля элементу)
.css( propertyName, value )
// 2 вариант (установка значения стиля с помощью функции)
css( propertyName, function )
// 3 вариант (для установки несколько стилей элементу)
css( properties )
// Описание параметров:
// propertyName (тип: String) – имя CSS-свойства
// value (тип: String или Number) – значение, которое нужно установить CSS-свойству
// function – функция, результат выполнения которой будет установлен в качестве значения CSS-свойству
//   Синтаксис функции:
//     Function( Integer index, String value ) => String или Number
//     В качестве аргументов функция получает индекс элемента (index) и текущее окончательное значение CSS-свойства (value)
// properties (тип: объект JavaScript, содержащий ноль или более пар ключ-значение) – объект, состоящий из пар DOM-свойство-значение, которые нужно установить элементу.

При установлении стилей с помощью метода css, они задаются ко всем элементам текущего набора.

Например, добавим ко всем элементам .info серый цвет фона (background):

<div class="info">...</div>
<div class="info">...</div>

<script>
$('.info').css('background', 'grey');
</script>

Если необходимо применить к каждому элементу текущего набора сразу несколько CSS свойств, то в качестве параметра этого метода необходимо использовать объект JavaScript, содержащий пары ‘имяСвойства’ : значение.

.css({'имяСвойства1':значение, 'имяСвойства2':значение,...})

Пример, в котором показано как можно задать несколько CSS-свойств к элементам .success:

$('.success').css({
  'color':'green',
  'font-size':'16px'
});

В качестве значения строки также можно использовать относительные значения, которые начинаются с += или -=. Первое выражение используется для увеличения текущего значения CSS свойства, а второе — для уменьшения.

Например, увеличим отступ слева и справа у элементов .container на 10px:

$('.container').css({
  "padding-left": "+=10",
  "padding-right":"+=10"
});

Ещё один способ использования метода css — это применение в качестве 2 параметра функции.

.css('имяСвойства',функция)
// функция: Function( Integer index, String value ) => String или Number

Вариант использования метода css, у которого в качестве второго параметра используется функция обычно находить применение, когда значение необходимо как-то вычислить или определить по какому-то алгоритму.

Например, установим всем элементам .text, у которых цвет шрифта не равен чёрному, CSS свойство color, равное red.

$('.text').css('color',function(index,value){
  if (value!=='rgb(0, 0, 0)') {
    return 'red';
  }
});

Например, поменяем значение CSS свойства width у всех элементов img на странице, находящихся #content:

$('#content img').css('width','300px');

Как удалить определённый стиль у элемента

Для того чтобы в jQuery убрать определённый стиль у элемента, ему необходимо присвоить просто пустую строку.

Например, уберём у всех изображений на странице CSS свойство height:

$('img').css('height','');

Get the value of a computed style property for the first element in the set of matched elements or set one or more CSS properties for every matched element.

Contents:

  • .css( propertyName )

    • .css( propertyName )
    • .css( propertyNames )
  • .css( propertyName, value )

    • .css( propertyName, value )
    • .css( propertyName, function )
    • .css( properties )

.css( propertyName )Returns: String

Description: Get the computed style properties for the first element in the set of matched elements.

  • version added: 1.0.css( propertyName )

    • propertyName

      A CSS property.

  • version added: 1.9.css( propertyNames )

    • propertyNames

      An array of one or more CSS properties.

The .css() method is a convenient way to get a computed style property from the first matched element, especially in light of the different ways browsers access most of those properties (the getComputedStyle() method in standards-based browsers versus the currentStyle and runtimeStyle properties in Internet Explorer prior to version 9) and the different terms browsers use for certain properties. For example, Internet Explorer’s DOM implementation refers to the float property as styleFloat, while W3C standards-compliant browsers refer to it as cssFloat. For consistency, you can simply use "float", and jQuery will translate it to the correct value for each browser.

Also, jQuery can equally interpret the CSS and DOM formatting of multiple-word properties. For example, jQuery understands and returns the correct value for both .css( "background-color" ) and .css( "backgroundColor" ). This means mixed case has a special meaning, .css( "WiDtH" ) won’t do the same as .css( "width" ), for example.

Note that the computed style of an element may not be the same as the value specified for that element in a style sheet. For example, computed styles of dimensions are almost always pixels, but they can be specified as em, ex, px or % in a style sheet. Different browsers may return CSS color values that are logically but not textually equal, e.g., #FFF, #ffffff, and rgb(255,255,255).

Retrieval of shorthand CSS properties (e.g., margin, background, border), although functional with some browsers, is not guaranteed. For example, if you want to retrieve the rendered border-width, use: $( elem ).css( "borderTopWidth" ), $( elem ).css( "borderBottomWidth" ), and so on.

An element should be connected to the DOM when calling .css() on it. If it isn’t, jQuery may throw an error.

As of jQuery 1.9, passing an array of style properties to .css() will result in an object of property-value pairs. For example, to retrieve all four rendered border-width values, you could use $( elem ).css([ "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth" ]).

As of jQuery 3.2, CSS Custom Properties (also called CSS Variables) are supported: $( "p" ).css( "--custom-property" ). Note that you need to provide the property name as-is, camelCasing it won’t work as it does for regular CSS properties.

Examples:

Get the background color of a clicked div.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

<span id="result">&nbsp;</span>

<div style="background-color:blue;"></div>

<div style="background-color:rgb(15,99,30);"></div>

<div style="background-color:#123456;"></div>

<div style="background-color:#f11;"></div>

$( "div" ).click(function() {

var color = $( this ).css( "background-color" );

$( "#result" ).html( "That div is <span style='color:" +

color + ";'>" + color + "</span>." );

Demo:

Get the width, height, text color, and background color of a clicked div.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

color: rgb(255, 255, 255);

background-color: rgb(15, 99, 30);

background-color: #123456;

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

<p id="result">&nbsp;</p>

$( "div" ).click(function() {

var html = [ "The clicked div has the following styles:" ];

var styleProps = $( this ).css([

"width", "height", "color", "background-color"

$.each( styleProps, function( prop, value ) {

html.push( prop + ": " + value );

$( "#result" ).html( html.join( "<br>" ) );

Demo:

.css( propertyName, value )Returns: jQuery

Description: Set one or more CSS properties for the set of matched elements.

  • version added: 1.0.css( propertyName, value )

    • propertyName

      A CSS property name.

    • value

      A value to set for the property.

  • version added: 1.4.css( propertyName, function )

    • propertyName

      A CSS property name.

    • function

      A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.

  • version added: 1.0.css( properties )

    • properties

      An object of property-value pairs to set.

As with the .prop() method, the .css() method makes setting properties of elements quick and easy. This method can take either a property name and value as separate parameters, or a single object of key-value pairs.

Also, jQuery can equally interpret the CSS and DOM formatting of multiple-word properties. For example, jQuery understands and returns the correct value for both .css({ "background-color": "#ffe", "border-left": "5px solid #ccc" }) and .css({backgroundColor: "#ffe", borderLeft: "5px solid #ccc" }). Notice that with the DOM notation, quotation marks around the property names are optional, but with CSS notation they’re required due to the hyphen in the name.

When a number is passed as the value, jQuery will convert it to a string and add px to the end of that string. If the property requires units other than px, convert the value to a string and add the appropriate units before calling the method.

When using .css() as a setter, jQuery modifies the element’s style property. For example, $( "#mydiv" ).css( "color", "green" ) is equivalent to document.getElementById( "mydiv" ).style.color = "green". Setting the value of a style property to an empty string — e.g. $( "#mydiv" ).css( "color", "" ) — removes that property from an element if it has already been directly applied, whether in the HTML style attribute, through jQuery’s .css() method, or through direct DOM manipulation of the style property. As a consequence, the element’s style for that property will be restored to whatever value was applied. So, this method can be used to cancel any style modification you have previously performed. It does not, however, remove a style that has been applied with a CSS rule in a stylesheet or <style> element. Warning: one notable exception is that, for IE 8 and below, removing a shorthand property such as border or background will remove that style entirely from the element, regardless of what is set in a stylesheet or <style> element.

Note: .css() doesn’t support !important declarations. So, the statement $( "p" ).css( "color", "red !important" ) does not turn the color of all paragraphs in the page to red as of jQuery 3.6.0. Do not depend on that not working, though, as a future version of jQuery may add support for such declarations. It’s strongly advised to use classes instead; otherwise use a jQuery plugin.

As of jQuery 1.8, the .css() setter will automatically take care of prefixing the property name. For example, take .css( "user-select", "none" ) in Chrome/Safari will set it as -webkit-user-select, Firefox will use -moz-user-select, and IE10 will use -ms-user-select.

As of jQuery 1.6, .css() accepts relative values similar to .animate(). Relative values are a string starting with += or -= to increment or decrement the current value. For example, if an element’s padding-left was 10px, .css( "padding-left", "+=15" ) would result in a total padding-left of 25px.

As of jQuery 1.4, .css() allows us to pass a function as the property value:

1

2

3

$( "div.example" ).css( "width", function( index ) {

This example sets the widths of the matched elements to incrementally larger values.

Note: If nothing is returned in the setter function (ie. function( index, style ){} ), or if undefined is returned, the current value is not changed. This is useful for selectively setting values only when certain criteria are met.

As of jQuery 3.2, CSS Custom Properties (also called CSS Variables) are supported: $( "p" ).css( "--custom-property", "value" ). Note that you need to provide the property name as-is, camelCasing it won’t work as it does for regular CSS properties.

Examples:

Change the color of any paragraph to red on mouseover event.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

<p>Just roll the mouse over me.</p>

<p>Or me to see a color change.</p>

$( "p" ).on( "mouseover", function() {

$( this ).css( "color", "red" );

Demo:

Increase the width of #box by 200 pixels the first time it is clicked.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

<div id="box">Click me to grow</div>

$( "#box" ).one( "click", function() {

$( this ).css( "width", "+=200" );

Demo:

Highlight a clicked word in the paragraph.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

Once upon a time there was a man

who lived in a pizza parlor. This

man just loved pizza and ate it all

the time. He went on to be the

happiest man in the world. The end.

var words = $( "p" ).first().text().split( /s+/ );

var text = words.join( "</span> <span>" );

$( "p" ).first().html( "<span>" + text + "</span>" );

$( "span" ).on( "click", function() {

$( this ).css( "background-color", "yellow" );

Demo:

Change the font weight and background color on mouseenter and mouseleave.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

<p>Move the mouse over a paragraph.</p>

<p>Like this one or the one above.</p>

.on( "mouseenter", function() {

"background-color": "yellow",

.on( "mouseleave", function() {

backgroundColor : "#ddd",

Demo:

Increase the size of a div when you click it.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<script src="https://code.jquery.com/jquery-3.6.3.js"></script>

$( "div" ).on( "click", function() {

width: function( index, value ) {

return parseFloat( value ) * 1.2;

height: function( index, value ) {

return parseFloat( value ) * 1.2;

Demo:

jquery-and-cssДавно в моем блоге не было статей про JQuery. Нет, статьи с его применением были, конечно, но он там выступал в роле вспомогательного инструмента, а рубрика «Изучаем JQuery» тем временем покрывалась пылью. А между тем, пришло время, перейти к самой интересной части обучения – добавлению различных эффектов, именно то, из-за чего его берутся изучать многие люди. И в сегодняшней статье вы узнаете, как изменять CSS-свойства «на лету».

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

Однако бывают случаи, когда вам нужно изменить стиль CSS, которого нет в файле стилей, или который описать нельзя. Для таких случаев в JQuery существует метод .css().

Для того чтобы получить значение CSS-свойства, мы должны просто передать имя свойства в качестве строки, примерно так .css(‘backgroundColor’).

Свойства, состоящие из нескольких слов, можно записывать через дефис, как в CSS-файле (background-color), или разным регистром, как они записываются в DOM (backgroundColor). Для установки свойств CSS, метод .css() использует два способа. Первый способ – два параметра, название CSS-свойства и его значение, через запятую. Второй – карта, состоящая из пар свойство-значение.

Пример:

.css('property','value')

.css({property1: 'value1', 'property-2': 'value2'})

Мы будем использовать метод .css(), точно так же как использовали .addClass() – объединим их селектором и привяжем событие. Давайте разберем метод .css() на конкретном примере. Нам понадобится следующая HTML-разметка:

<div id="textbox">
   Коллекции на вкладке "Вставка" содержат элементы, 
   которые определяют общий вид документа. Эти коллекции 
   служат для вставки в документ таблиц, колонтитулов, списков, 
   титульных страниц и других стандартных блоков. При создании рисунков, 
   диаграмм или схем они согласовываются с видом текущего документа.
</div>
		
<input id="increase" type="submit" value="увеличить" />
<input id="decrease" type="submit" value="уменьшить">	

И немного CSS:

#textbox{
       border: 1px solid #000;
       background: #DFECFF;
       margin: 20px auto;
       text-align: left;
       padding: 10px;
       width: 400px;
       color: #0000a0;
       font-style: italic;
       clear: both;
}

В результате у нас появится вот такая страничка:

пример с текстом

На странице присутствуют две кнопки – для увеличения и уменьшения шрифта. В принципе здесь можно использовать метод .addClass(), описанный в предыдущей статье, но давайте немного усложним задачу, и представим, что нам нужно уменьшать или увеличивать текст, при каждом нажатии соответствующей кнопки. Это конечно можно реализовать, через описание отдельного класса для каждого клика, но гораздо проще будет получать текущий размер текста, и увеличивать (уменьшать) его по заданному значению.

Наш код традиционно начинается с $(document).ready() и обработчика событий кнопки $("#increase").click():

$(document).ready(function(){
	    $("#increase").click(function(){				
	});			
})

Далее, размер шрифта можно легко получить через с помощью $(“#textbox”).css('fontSize'). Однако, возвращаемое значение будет содержать как число так и единицы измерения, поэтому нам нужно сохранить каждую часть в собственную переменную, после чего мы сможем увеличить число, и заново присоединить к нему единицы измерения. Также, мы планируем использовать объект JQuery более одного раза, следовательно, было бы неплохо и его сохранить в переменную.

$(document).ready(function() {
  $("#increase").click(function() {
         var $speech = $('div.speech');
         var currentSize = $speech.css('fontSize');
         var num = parseFloat(currentSize, 10);
         var unit = currentSize.slice(-2);
         num *= 1.4;
         $speech.css('fontSize', num + unit);
      });
});

Первая строка внутри функции .click() сохраняет переменную c блоком #textblock.

Обратите внимание, что мы используем символ $, в имени переменной $speech. Поскольку $ — это допустимый символ для переменных JavaScript, мы можем использовать его в качестве напоминания, что это переменная хранит объект JQuery. Следующая строка – сохраняет в переменную размер шрифта блока #textblock – например, 12px.

После этого мы используем parseFloat() и slice(). Функция parseFloat() используется для конвертирования строковых значений в числовые (десятичные). Например, строку 12, будет конвертирована в число 12. Если строка начинается с нечислового символа, parseFloat() вернет NaN, что означает:  «Не числовое значение» (Not a Number).Второй аргумент функции parseFloat(), гарантирует, что число будет конвертировано именно в десятеричное значение.

Метод .sice() возвращает подстроку, начинающуюся с определенного символа строки. Поскольку название единиц измерения, которые мы используем  длиной в два символа (px), мы указываем, что подстрока должна начинаться с двух последних символов основной строки.

Все что нам осталось это умножить полученное значение переменной num на 1.4, а затем установить размер шрифта, путем склеивания двух переменных num и unit:

$(document).ready(function(){
	$("#increase").click(function(){
		var $speech = $("#textbox");
		var currentSize = $speech.css('fontSize');
		var num = parseFloat(currentSize, 10);
		var unit = currentSize.slice(-2);
		num*=1.4;
		$speech.css('fontSize', num + unit);
	});
})

Теперь после клика по кнопке «Увеличить», текст в блоке увеличивается, как на представленном скриншоте:

пример работы скрипта

Следующий клик по этой же кнопке, продолжает увеличивать текст в блоке.

Для того чтобы сделать работающей кнопку «Уменьшить», мы будем делить значение переменной – num/=1.4. И чтобы не увеличивать размер кода, мы можем объединить два обработчика событий .click() в один, через класс button. Затем, после установки переменных, мы легко можем умножать или делить, основываясь на ID кнопки, которая была нажата. Вот как должен выглядеть код:

$(document).ready(function(){
	$("input").click(function(){
		var $speech = $("#textbox");
		var currentSize = $speech.css('fontSize');
		var num = parseFloat(currentSize, 10);
		var unit = currentSize.slice(-2);				
		if (this.id=="increase"){
			num*=1.4;
		} else if(this.id=="decrease"){
			num/=1.4;
		}
		$speech.css('fontSize', num + unit);
	});				
})

Выше был приведен простейший пример использования метода .css() на практике. Можно привести еще один пример использования этого метода.

Разделение пунктов меню

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

Для такого меню потребуется следующая HTML-разметка:

<div id="menu">
   <ul>
	<li><a href="#">первый пункт</a></li>
	<li><a href="#">второй пункт</a></li>
	<li><a href="#">третий пункт</a></li>
	<li><a href="#">четвертый пункт</a></li>
   </ul>
</div>

CSS-стили:

ul{
     list-style: none;
}
		
ul li{
     list-style: none;
     float: left;
     background: #DFECFF;
     display: block;
     padding: 10px;
     border-right: 1px gray solid;
}
		
ul li a{
     text-decoration: none;
     color: #000;
}

Вот так будет выглядеть наше меню:

меню

А для того чтобы убрать правый разделитель у последнего пункта меню (четвертый пункт), можно использовать вот такой код:

$(document).ready(function(){
         $("#menu ul li:last").css('border-right', 'none');
});

И в результате у нас получается вот такое меню:

меню после применения javascript

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

Архив с приведенными примерами.

raselgit

Никак не удается справиться с задачей. Подскажите, как правильно сделать:

У меня есть блок .rs-seat-more, при нажатии на который у блока .rs-seat-right-block div должен изменяться CSS на: max-height: initial; и еще при нажатии на тот же блок у блока .rs-seat-wrap должен изменяться CSS на: max-height: initial;

Я просто только начал изучать JavaScript, поэтому для меня это проблема.


  • Вопрос задан

    более трёх лет назад

  • 3104 просмотра

Ни в коем случае не слушайте тех, кто советует делать это через .css(). Это дурной тон, никогда не нужно менять слили непосредственно через js.
Задавайте нужные стили классу-модификатору, и добавляйте/удаляйте его через .addClass() / .removeClass()

Пригласить эксперта

$('.block').css('color','red');

$('.rs-seat-more).click(function(){
$('.rs-seat-right-block').css('max-height','initial');
$('.rs-seat-wrap').css('max-height','initial');
});

Примерно так.

// элемент, на котором кликаем
$(‘.rs-seat-more’).on(‘click’,
function(){
$(.rs-seat-right-block div’).css(‘max-height’, ‘initial’); // элемент, который изменяем
});

ну и не забудьте обернуть это в init


  • Показать ещё
    Загружается…

09 февр. 2023, в 23:14

1500 руб./за проект

09 февр. 2023, в 23:00

1500 руб./за проект

09 февр. 2023, в 22:06

500 руб./за проект

Минуточку внимания

Понравилась статья? Поделить с друзьями:
  • Jquery validation error class
  • Jquery validate error list
  • Jquery validate error element
  • Jquery validate error custom
  • Jquery validate error class