Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2016, 10:41
Аватар для Black_Star
Профессор
Отправить личное сообщение для Black_Star Посмотреть профиль Найти все сообщения от Black_Star
 
Регистрация: 11.07.2016
Сообщений: 300

обращение к псевдоклассам CSS через jQuery
Добрый день уважаемые. Возник такой вопрос, есть ли возможность обращения к псевдоклассам стилей CSS через jQuery, и работать с их параметрами ? Вот простой пример
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<style type="text/css">
    #field {
        position: relative;
        width: 400px;
        height: 400px;
        margin-left: 10%;
        margin-top: 10%;
        background-color: yellow;
        border: 3px solid black;
    }

    .block {
        float: left;
        margin-left: 5%;
        margin-top: 20%;
        width: 40px;
        height: 40px;
        background-color: rgba(0, 0, 255, 1);
        border: 1px solid black;

    }

    .block:before {
        content: "";
        position: absolute;
        height: 0;
        width: 0;
        top: 40px;

        border-width: 0 21.5px 40px;
        border-style: solid;
        /*border-color: transparent transparent rgba(0, 0, 255, 0.5);*/
 *!*  border-bottom-color: rgba(0, 255, 0, 1); */!*
        border-left-color: transparent;
        border-right-color: transparent;
        border-top-color: transparent;
    }
</style>
<body>
<div id="field">
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
</div>
<input id="button" type="button" value="Push me!">
</body>
<script type="text/javascript">
    window.onload = function () {

        var i, r, g, b,
            block = $('.block'),
     *!*  blockBef = $('.block:before'),*/!*
            allBlock = $('#field > div'),
            len = allBlock.length,
            but = $('#button');

        but.on('click', allBlock, function () {

            console.log(allBlock.length + '=blocks');

            r = 255;
            g = 0;
            b = 0;

            block.css({backgroundColor: "rgba(" + r + ", " + g + ", " + b + ", " + 0.5 + ")"});
         *!*   blockBef.css({borderBottomColor: "rgba(" + r + ", " + g + ", " + b + ", " + 0.5 + ")"});*/!*

        })

    }

</script>

</html>

Вопрос, есть ли возможность поменять цвет треугольничкам по клику ?
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2016, 14:09
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

Black_Star,
Через jquery это больно. Делай по-другому:
1) У тебя в стилях есть твой элемент и элемент:before
2) Короче делаешь так элемент.класс_поведения:befor e
То есть вешаешь классы на элемент и прописываешь как должен выглядеть :before в стилях
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2016, 14:17
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

можно до таблицы стилей достучаться
<!doctype html>
<head>
    <style id="myStyle">
        .test:before {
            content: 'before content';
            color: red;
        }
    </style> 
    <script>
        function ChangeCss() {
            var styleTag = document.getElementById("myStyle"),
                sheet = styleTag.sheet ? styleTag.sheet : styleTag.styleSheet,
                rules = sheet.cssRules ? sheet.cssRules : sheet.rules,
                rule = rules[0];

            rule.style.color = "green";
        }
    </script> 
</head>
<body>
    <div class=test>
      div content
    <div>
    <button onclick="ChangeCss()">Поменять цвет псевдоэлемента!</button>
</body>
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2016, 15:12
Аватар для Black_Star
Профессор
Отправить личное сообщение для Black_Star Посмотреть профиль Найти все сообщения от Black_Star
 
Регистрация: 11.07.2016
Сообщений: 300

Сообщение от Coriolan161
Короче делаешь так элемент.класс_поведения:befor e
То есть вешаешь классы на элемент и прописываешь как должен выглядеть :before в стилях
Не очень понял, можно подробнее, или краткий пример.
Сообщение от Coriolan161
 function ChangeCss() {
            var styleTag = document.getElementById("myStyle"),
                sheet = styleTag.sheet ? styleTag.sheet : styleTag.styleSheet,
                rules = sheet.cssRules ? sheet.cssRules : sheet.rules,
                rule = rules[0];
 
            rule.style.color = "green";
        }
как-то сложно к пониманию, есть что то аналогичное на jQuery ?
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2016, 15:34
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Сообщение от Black_Star Посмотреть сообщение
Не очень понял, можно подробнее, или краткий пример.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
	    #field {
	        position: relative;
	        width: 400px;
	        height: 400px;
	        margin-left: 10%;
	        margin-top: 10%;
	        background-color: yellow;
	        border: 3px solid black;
	    }
	 
	    .block {
	        float: left;
	        margin-left: 5%;
	        margin-top: 20%;
	        width: 40px;
	        height: 40px;
	        background-color: rgba(0, 0, 255, 1);
	        border: 1px solid black;
	 
	    }
	 
	    .block:before {
	        content: "";
	        position: absolute;
	        height: 0;
	        width: 0;
	        top: 40px;
	        border-width: 0 21.5px 40px;
	        border-style: solid;
	        /*border-color: transparent transparent rgba(0, 0, 255, 0.5);*/
	   border-bottom-color: rgba(0, 255, 0, 1);
	        border-left-color: transparent;
	        border-right-color: transparent;
	        border-top-color: transparent;
	    }

	    *!*.red{
			background-color: rgba(255, 0, 0, 0.5);
	    }
	    .red:before{
			border-bottom-color: rgba(255, 0, 0, 0.5);
	    }*/!*
	</style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript">
    $(function () {
 
        var i, r, g, b,
            block = $('.block'),
            allBlock = $('#field > div'),
            len = allBlock.length,
            but = $('#button');
 
        but.on('click', allBlock, function () {
 
            console.log(allBlock.length + '=blocks');
            block.addClass('red')
 
        })
 
    })
</script>
</head>


<body>
<div id="field">
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
</div>
<input id="button" type="button" value="Push me!">
</body>
</html>
Сообщение от Black_Star Посмотреть сообщение
как-то сложно к пониманию, есть что то аналогичное на jQuery ?
Нет.

Кстати конкретно вашу задачу можно решить использовав назначение цвета текста, оставив цвет бордера по умолчанию:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
	    #field {
	        position: relative;
	        width: 400px;
	        height: 400px;
	        margin-left: 10%;
	        margin-top: 10%;
	        background-color: yellow;
	        border: 3px solid black;
	    }
	 
	    .block {
	        float: left;
	        margin-left: 5%;
	        margin-top: 20%;
	        width: 40px;
	        height: 40px;
	        background-color: rgba(0, 0, 255, 1);
	        border: 1px solid black;
	        *!*color: rgba(0, 255, 0, 1);*/!*
	 
	    }
	 
	    .block:before {
	        content: "";
	        position: absolute;
	        height: 0;
	        width: 0;
	        top: 40px;
	        border-width: 0 21.5px 40px;
	        border-style: solid;
	        /*border-color: transparent transparent rgba(0, 0, 255, 0.5);*/

	        border-left-color: transparent;
	        border-right-color: transparent;
	        border-top-color: transparent;
	    }
	</style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript">
    $(function () {
 
        var i, r, g, b,
            block = $('.block'),
            allBlock = $('#field > div'),
            len = allBlock.length,
            but = $('#button');
 
        but.on('click', allBlock, function () {
 
            console.log(allBlock.length + '=blocks');
            r = 255;
            g = 0;
            b = 0;
 
            block.css({
                backgroundColor: "rgba(" + r + ", " + g + ", " + b + ", " + 0.5 + ")",
                *!*color: "rgba(" + r + ", " + g + ", " + b + ", " + 0.5 + ")"*/!*
            });
 
        })
 
    })
</script>
</head>


<body>
<div id="field">
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
    <div class="block"></div>
</div>
<input id="button" type="button" value="Push me!">
</body>
</html>
__________________
29375, 35

Последний раз редактировалось Aetae, 07.11.2016 в 16:03.
Ответить с цитированием
  #6 (permalink)  
Старый 07.11.2016, 15:45
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

Black_Star,
mySelector {
    /*...*/
   }
   
   mySelector:before {
     /*...*/
   }

   mySelector .bg-black {
    /*...*/
   } 

   mySelector .bg-black:before {
    /*...*/
   } 

   mySelector .text-green {
     /*....*/
   }

   mySelector .text-green:before {
     /*....*/
   }
Ответить с цитированием
  #7 (permalink)  
Старый 07.11.2016, 17:55
Аватар для Black_Star
Профессор
Отправить личное сообщение для Black_Star Посмотреть профиль Найти все сообщения от Black_Star
 
Регистрация: 11.07.2016
Сообщений: 300

Всем спасибо, за помощь.
Aetae к сожалению первый вариант не подошел, поскольку класс red меняет цвет и домикам(родителям), а у меня есть необходимость разделять цвета, крыш и домиков. Но вот второй вариант, подошел.
Coriolan161 Спасибо, так понятнее
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД JSON вывод через jQuery Infinity178 jQuery 13 09.03.2015 21:32
не работает обращение к блоку выведенному через append imediasun1 Элементы интерфейса 1 09.03.2014 08:55
Jquery. загрузка части документа через ajax-запрос InviS jQuery 8 01.03.2010 17:47
jQuery, jsTree - обновление дерева через ajax extremum.func jQuery 2 09.11.2009 14:48
подгрузка файлов через jQuery imdogma jQuery 4 05.05.2009 21:46