Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   псевдоклассы и js (https://javascript.ru/forum/dom-window/45541-psevdoklassy-i-js.html)

BratKilla 05.03.2014 01:22

псевдоклассы и js
 
я так и не понял есть у js доступ к псевдоклассам css или нет? (библиотеками не пользуюсь)

danik.js 05.03.2014 02:29

нету. хотя может уже че придумали. Но ты можешь создать таблицу стилей и управлять ее правилами. Таким образом можно изменять свойства для псевдоклассов и псевдоэлементов из js.

BratKilla 05.03.2014 02:59

danik.js,
Вот, например, псевдокласс :hover, в два счёта можно заменить на js. Но я хочу через style элемента добраться до его свойства background. Как всё это выглядит? Не затрагивая тег <style> вообще, всё управление из js

danik.js 05.03.2014 03:15

Ниче не понял. Это?
<style>
    div{
        background: blue;
        color: white;
    }
    div:hover{
        background: red;
    }
</style>

<div style="height:150px;"></div>

<script>
    var div = document.querySelector('div');
    setInterval(function() {
        div.textContent = getComputedStyle(div).backgroundColor;
    }, 100);
</script>

BratKilla 05.03.2014 04:02

danik.js,
Неее. Но на этом примере точно поймёшь. Пусть всё так останется, но при наведении на левую половину div, background в div:hover будет red, а при наведении на правую - black.

т.е. было:
div:hover{
background: red;
}

стало:
div:hover{
background: black;
}

но изменение значения только с помощью js.

danik.js 05.03.2014 04:04

Дык ты пиши сразу в style элемента. Причем тут псевдокласс?

danik.js 05.03.2014 04:09

<div style="height:150px;"></div>
 
<script>
    var div = document.querySelector('div');
    div.addEventListener('mousemove', function(event) {
        if (event.offsetX > div.offsetWidth / 2)
            div.style.backgroundColor = 'black';
        else
            div.style.backgroundColor = 'red';
    });
</script>

danik.js 05.03.2014 04:15

<style>
    .bla{
        position: relative;
        height: 150px;
    }
    .half{
        width: 50%;
        height: 100%;
        position: absolute;
    }
    .left-half{
        left: 0;
    }
    .left-half:hover ~ .background{
        background: red;
    }
    .right-half{
        right: 0;
    }
    .right-half:hover ~ .background{
        background: black;
    }
    .background{
        height: 100%;
        background: blue;
    }
</style>
<div class="bla">
    <div class="half left-half"></div>
    <div class="half right-half"></div>
    <div class="background"></div>
</div>

BratKilla 05.03.2014 04:26

danik.js,
это понятно, что можно и без псевдокласса обойтись.
:hover это же css событие. Вот я и думал что его как то применить в js можно. Что то вроде:

div.style.hover.backgroundColor = 'black';

danik.js 05.03.2014 05:13

Цитата:

Сообщение от BratKilla
:hover это же css событие

Это не событие. Это псевдокласс. Можешь себе представить что это просто класс, будто бы .hover, только браузер его как-бы сам добавляет при наведении на элемент мышки, и убирает когда уводишь. Ну и вместо одной точки - две точки. То есть разницы то практически нет.

Класс - это всего лишь способ задать стили элементу, не более.
Способ задать стили элементу из js также имеется. Через style. (стиль запишется в атрибут style, который имеет преимущество перед стилями из таблицы стилей (окромя !important)). Так чего же тебе не хватает?

Вот с псевдоэлементами да, проблема. Для них действительно нет способа задавать стили из js (без манипуляции с таблицой стилей). Интересно то, что способ получать стили имеется:

<style>
 h3:after {
   content: ' rocks!';
   color: red;
 }
</style>

<h3>generated content</h3> 

<script>
  var h3       = document.querySelector('h3'), 
      result   = getComputedStyle(h3, ':after').color;

  alert('the generated content color is: ' + result);
</script>

BratKilla 05.03.2014 05:43

danik.js,
спасибо брат, теперь я всё понял! Я раньше думал, что hover'ом в js можно onmousemove заменить... остальные знания пойду в тематической статье добирать

BratKilla 05.03.2014 07:42

danik.js,
Последний вопрос. Как в любом из этих примеров, с помощью js задать плавный переход цвета, к примеру в 0.5 секунды. Хотя бы ссылку на статью.

danik.js 05.03.2014 08:18

css3:
transition: background-color 0.5s;

либо анимируй на js (хуже производительность, но лучше поддержка браузерами), используя requestAnimationFrame. Писать с нуля не советую. Лучше воспользуйся какой-нибудь готовой либой.

kotamirov 09.03.2014 12:02

Цитата:

Сообщение от BratKilla (Сообщение 301105)
danik.js,
Неее. Но на этом примере точно поймёшь. Пусть всё так останется, но при наведении на левую половину div, background в div:hover будет red, а при наведении на правую - black.

т.е. было:
div:hover{
background: red;
}

стало:
div:hover{
background: black;
}

но изменение значения только с помощью js.

именно css файл ты не изменишь, хотя можно влезть в стиль сторонницы найти и переписать в style разделе то что тебе нужно и перезагрузить сторонницу )) но как то мрачно звучит ))!
если хочешь поменять стиль элемента, тогда как-то так можно попробовать !

css
.exchange_on_red:hover{
background: red;
}
.exchange_on_black:hover{
background: black;
}

js
var new_div = createElement('div');
new_div.id='id_new_div';
new_div.className='exchange_on_black';

ну и меняем по какому либо событию
var class = document.getElementById('id_new_div').className;
document.getElementById('id_new_div').className = class.replace(/exchange_on_black/g,' exchange_on_red');

kotamirov 09.03.2014 12:05

Цитата:

Сообщение от danik.js (Сообщение 301132)
css3:
transition: background-color 0.5s;

либо анимируй на js (хуже производительность, но лучше поддержка браузерами), используя requestAnimationFrame. Писать с нуля не советую. Лучше воспользуйся какой-нибудь готовой либой.

не 0.5s ,а .5s!
+ анимировать на css можно, затрат ресурсных меньше,
все что можно сделать на css лучше делать на css!
вот пример background loading:

/*part for loading processing*/
.loading_processing{
width:224px;
height:100px;
top:35%;
margin:0 auto 0 auto;
background:url('__BASE_URL__/i/loading_processing.png') no-repeat 0 0;
background-size: contain;
}
.loading_processing>div{
width:98px;
height:98px;
float:left;
background:url('__BASE_URL__/i/left_part_loading_processing.png') no-repeat 0 0;
background-size: cover;
-webkit-animation:go_loading_processing 2s cubic-bezier(0, 0, 1, 1) infinite;
-o-animation:go_loading_processing 2s cubic-bezier(0, 0, 1, 1) infinite;
-moz-animation:go_loading_processing 2s cubic-bezier(0, 0, 1, 1) infinite;
}
@-webkit-keyframes go_loading_processing{
0%{-webkit-transform:rotate(0deg);}
100%{-webkit-transform:rotate(360deg);}
}
@-moz-keyframes go_loading_processing{
0%{-moz-transform:rotate(0deg);}
100%{-moz-transform:rotate(360deg);}
}
@-0-keyframes go_loading_processing{
0%{-o-transform:rotate(0deg);}
100%{-o-transform:rotate(360deg);}
}
/*part for loading processing END*/

danik.js 09.03.2014 15:25

Цитата:

Сообщение от kotamirov
не 0.5s ,а .5s!

Поясни пожалуйста, я не понимаю.
Цитата:

Сообщение от kotamirov
все что можно сделать на css лучше делать на css!

Как верстальщик со стажем, полностью поддерживаю
Можешь оформить пример через теги [html run] . Картинки можешь встроить через data:uri

kotamirov 09.03.2014 19:20

Цитата:

Сообщение от danik.js (Сообщение 301895)
Поясни пожалуйста, я не понимаю.Как верстальщик со стажем, полностью поддерживаю
Можешь оформить пример через теги [html run] . Картинки можешь встроить через data:uri

Значения в css которые меньше 0 можно и даже нужно писать без 0!

danik.js 09.03.2014 19:38

Ну что можно - это я знаю. Но почему именно нужно?
Для меня привычней запись 0.5 нежели .5

kotamirov 10.03.2014 00:19

Цитата:

Сообщение от danik.js (Сообщение 301928)
Ну что можно - это я знаю. Но почему именно нужно?
Для меня привычней запись 0.5 нежели .5

чем меньше код тем, сам знаешь ))

BratKilla 10.03.2014 09:27

Я вообще стараюсь все css свойства переносить в js, там их создавать, изменять. Тег style вообще не создаю... не уверен в правильности подхода, но мне больше нравится когда всё в одном месте. Не знаю правда, сейчас вообще кто-нибудь js отключает? а то крах и падение обеспечены моим стараниям

danik.js 10.03.2014 10:04

Цитата:

Сообщение от BratKilla
Не знаю правда, сейчас вообще кто-нибудь js отключает?

Некоторые отключают, чтоб не надоедала реклама, всякие баннеры слайдеры вертелки перделки и тд.
Цитата:

Сообщение от BratKilla
Тег style вообще не создаю

Сысле твоя страница развалится как корыто если не загрузится скрипт?
А пока он будет грузиться - я буду любоваться белым экраном? Офигенно придумано!
Не, ну конечно все зависит от направленности сайта. Если это блог, ИМ, визитка, лендинг или еще че - то это fail однозначно.

kotamirov 10.03.2014 10:18

Цитата:

Сообщение от BratKilla (Сообщение 301955)
Я вообще стараюсь все css свойства переносить в js, там их создавать, изменять. Тег style вообще не создаю... не уверен в правильности подхода, но мне больше нравится когда всё в одном месте. Не знаю правда, сейчас вообще кто-нибудь js отключает? а то крах и падение обеспечены моим стараниям

ты бы еще html элементы в js создавал АХАХХА

BratKilla 10.03.2014 14:14

Вообще-то я ещё ни одного проекта не сделал) хочется максимум интерактивности, переплетающихся событий и всяких интересных вещей, вот и кручу js как вздумается. Хотя предстоит огромная работа над оптимизацией, совместимостью и остальных, стандартных для нормального разработчика, операций создания стабильности. Знаю, что всего в меру, но к программированию больше тянет чем к вёрстке.

kotamirov 10.03.2014 15:19

Цитата:

Сообщение от BratKilla (Сообщение 301995)
Вообще-то я ещё ни одного проекта не сделал) хочется максимум интерактивности, переплетающихся событий и всяких интересных вещей, вот и кручу js как вздумается. Хотя предстоит огромная работа над оптимизацией, совместимостью и остальных, стандартных для нормального разработчика, операций создания стабильности. Знаю, что всего в меру, но к программированию больше тянет чем к вёрстке.

html css js php sql
надо знать все, каждый из них важен, и в полной мере не заменят друг друга!
html css js - для визитки пойдет )))

BratKilla 10.03.2014 16:39

kotamirov,
спасибо, я знаю о существовании этих языков, альтернатив и их ролей, без сомнения объём знаний пропорционален возможностям. Но не всё сразу. Ищу ответы на интересующие меня вопросы, такой подход позволяет с головой погрузиться в программирование. Пополняю знания по мере необходимости. Хотя согласен с тем что нет необходимости в том о чём ничего не знаешь)


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