Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Управление размеров в стилях через JavaScript (https://javascript.ru/forum/misc/70380-upravlenie-razmerov-v-stilyakh-cherez-javascript.html)

MC-XOBAHCK 01.09.2017 12:18

Управление размеров в стилях через JavaScript
 
Здравствуйте!
Подскажите пожалуйста, возможно ли при помощи JavaScript управлять значением в CSS ?
Например у меня стиль:
Код:

.test {
    border-bottom: 150px solid black;
}

Возможно ли вместо значения 150 вставить переменную из JavaScript?

Nexus 01.09.2017 12:34

MC-XOBAHCK, можно скриптом на странице переопределить это свойство.

MC-XOBAHCK 01.09.2017 12:49

Спасибо за ответ. Про возможность переопределить я знаю - поиск даёт по такому ответ.

У меня полностью стиль выглядит так:
.test {
	width:0;
	height:0;
	border-bottom: 150px solid black;
	border-left: 130px solid transparent;
}

Я бы хотел скриптом изменять именно цифры (150 и 130), чтобы они изменялись согласно значениям двух переменных из JavaScripta.

j0hnik 01.09.2017 12:52

MC-XOBAHCK,
все можно
var x = 80;
var y = 90;
document.querySelector('.test').style.borderBottomWidth = x+'px';
document.querySelector('.test').style.borderLeftWidth = y+'px';

ksa 01.09.2017 13:17

j0hnik, он хочет менять именно в теге
<style>...</style>

Менять свойства ему видать вера не позволяет... :)

j0hnik 01.09.2017 13:25

Цитата:

Сообщение от ksa (Сообщение 463326)
j0hnik, он хочет менять именно в теге
<style>...</style>

Менять свойства ему видать вера не позволяет... :)

Это можно, получаем html всего тега стайл, реплейсаем регуляркой в теге .test все цифры после border-botom и left на нужные, и перезаписываем заново весь тег стайл (довольно таки ресурсоемко получится)

ksa 01.09.2017 13:29

Цитата:

Сообщение от j0hnik
довольно таки ресурсоемко получится

Проще взять и добавить еще один тег
<style>...</style>

С нужным текстом, а каскадность сама сделает свое дело. ;)

Nexus 01.09.2017 13:34

Если css находится в отдельном файле, а изменения нужно внести сразу ко всем эл-там страницы, то можно сделать так:
var node=document.createElement('style');
newBorderBWidth=100,
newBorderLWidth=200;
node.innerHTML='html .text{'+
'border-bottom-width:'+newBorderBWidth+'px;'+
'border-left-width:'+newBorderLWidth+'px;'+
'}';

document.getElementsByTagName('body')[0].appendChild(node);

Не тестил.

j0hnik 01.09.2017 13:36

Цитата:

Сообщение от ksa (Сообщение 463329)
Проще взять и добавить еще один тег
<style>...</style>

С нужным текстом, а каскадность сама сделает свое дело. ;)

Вариант =)

Rasy 01.09.2017 14:12

Цитата:

Сообщение от MC-XOBAHCK
Подскажите пожалуйста, возможно ли при помощи JavaScript управлять значением в CSS ?

Можно. Для этого нужно правильно добраться до прототипа стилей.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    .test {
      width:0;
      height:0;
      border-bottom: 150px solid black;
      border-left: 130px solid transparent;
    }
  </style>

  <script>
    (function(options) {
      var style = document.styleSheets[0].rules[0].style;

      for (var prop in options) {
        style.setProperty(prop, options[prop]);
      }
      
    })({
      'border-bottom-width': '400px', 
      'border-left-width': '500px'
    });
  </script>

</head>
<body>
  <p class="test"></p>
</body>
</html>


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