псевдоклассы и js
я так и не понял есть у js доступ к псевдоклассам css или нет? (библиотеками не пользуюсь)
|
нету. хотя может уже че придумали. Но ты можешь создать таблицу стилей и управлять ее правилами. Таким образом можно изменять свойства для псевдоклассов и псевдоэлементов из js.
|
danik.js,
Вот, например, псевдокласс :hover, в два счёта можно заменить на js. Но я хочу через style элемента добраться до его свойства background. Как всё это выглядит? Не затрагивая тег <style> вообще, всё управление из js |
Ниче не понял. Это?
<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> |
danik.js,
Неее. Но на этом примере точно поймёшь. Пусть всё так останется, но при наведении на левую половину div, background в div:hover будет red, а при наведении на правую - black. т.е. было: div:hover{ background: red; } стало: div:hover{ background: black; } но изменение значения только с помощью js. |
Дык ты пиши сразу в style элемента. Причем тут псевдокласс?
|
<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> |
<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> |
danik.js,
это понятно, что можно и без псевдокласса обойтись. :hover это же css событие. Вот я и думал что его как то применить в js можно. Что то вроде: div.style.hover.backgroundColor = 'black'; |
Цитата:
Класс - это всего лишь способ задать стили элементу, не более. Способ задать стили элементу из 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> |
danik.js,
спасибо брат, теперь я всё понял! Я раньше думал, что hover'ом в js можно onmousemove заменить... остальные знания пойду в тематической статье добирать |
danik.js,
Последний вопрос. Как в любом из этих примеров, с помощью js задать плавный переход цвета, к примеру в 0.5 секунды. Хотя бы ссылку на статью. |
css3:
transition: background-color 0.5s; либо анимируй на js (хуже производительность, но лучше поддержка браузерами), используя requestAnimationFrame. Писать с нуля не советую. Лучше воспользуйся какой-нибудь готовой либой. |
Цитата:
если хочешь поменять стиль элемента, тогда как-то так можно попробовать ! 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'); |
Цитата:
+ анимировать на 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*/ |
Цитата:
Цитата:
Можешь оформить пример через теги [html run] . Картинки можешь встроить через data:uri |
Цитата:
|
Ну что можно - это я знаю. Но почему именно нужно?
Для меня привычней запись 0.5 нежели .5 |
Цитата:
|
Я вообще стараюсь все css свойства переносить в js, там их создавать, изменять. Тег style вообще не создаю... не уверен в правильности подхода, но мне больше нравится когда всё в одном месте. Не знаю правда, сейчас вообще кто-нибудь js отключает? а то крах и падение обеспечены моим стараниям
|
Цитата:
Цитата:
А пока он будет грузиться - я буду любоваться белым экраном? Офигенно придумано! Не, ну конечно все зависит от направленности сайта. Если это блог, ИМ, визитка, лендинг или еще че - то это fail однозначно. |
Цитата:
|
Вообще-то я ещё ни одного проекта не сделал) хочется максимум интерактивности, переплетающихся событий и всяких интересных вещей, вот и кручу js как вздумается. Хотя предстоит огромная работа над оптимизацией, совместимостью и остальных, стандартных для нормального разработчика, операций создания стабильности. Знаю, что всего в меру, но к программированию больше тянет чем к вёрстке.
|
Цитата:
надо знать все, каждый из них важен, и в полной мере не заменят друг друга! html css js - для визитки пойдет ))) |
kotamirov,
спасибо, я знаю о существовании этих языков, альтернатив и их ролей, без сомнения объём знаний пропорционален возможностям. Но не всё сразу. Ищу ответы на интересующие меня вопросы, такой подход позволяет с головой погрузиться в программирование. Пополняю знания по мере необходимости. Хотя согласен с тем что нет необходимости в том о чём ничего не знаешь) |
Часовой пояс GMT +3, время: 14:35. |