В данном месте раздела курса посвященного JavaScript вы уже рассмотрели реальные основы использования JavaScript, посмотрели, как находить элементы, используя
В этой лекции мы рассмотрим, как динамически обновлять использованное для элементов стилевое оформление, изменяя код CSS во время выполнения с помощью JavaScript. Для этого используется такая же техника, которую мы уже видели, но имеется несколько специальных соображений, о которых необходимо помнить при работе с CSS
Браузер предоставляет интерфейс для взаимодействия с document.styleSheets. Свойство document.styleSheets возвращает список всех link, и внутренние style. Если элементы style имеют атрибуты id, можно ссылаться на них непосредственно с помощью document.getElementById(element_id).
Можно также добавлять на страницу новые document.createElement для создания новых элементов style. Это будет полезно, когда вы хотите предоставить посетителям сайта возможность динамически изменять стили сайта, используя, возможно, некоторые управляющие кнопки. Вот небольшой пример, как можно создать новую
var sheet = document.createElement('style');
sheet.innerHTML = "div {border: 2px solid black; background-color: blue;}";
document.body.appendChild(sheet);
Удаление document.getElementById, как показано в небольшом примере ниже. Чтобы удалить parent.removeChild(element), где element является объектом parent является узлом предком sheetToBeRemoved ), вы сначала получаете предка var sheetParent = sheetToBeRemoved.parentNode - а затем вызываете removeChild с аргументом sheetToBeRemoved - sheetParent.removeChild(sheetToBeRemoved)
var sheetToBeRemoved = document.getElementById('styleSheetId');
var sheetParent = sheetToBeRemoved.parentNode;
sheetParent.removeChild(sheetToBeRemoved);
Пример доступа к
В JavaScript имеется объект ).
Давайте рассмотрим (в данный момент) теоретический пример - пусть имеется web-сайт, где представлена серия технических статей. Мы хотим привлечь внимание к некоторым из этих статей с помощью интересной анимированной карусели, но как быть с пользователями, у которых JavaScript не включен по каким-то причинам? Вспоминая полученные знания о ненавязчивом JavaScript, мы хотим, чтобы функции Web-сайта также работали для этих пользователей, но мы можем захотеть оформить сайт для этих пользователей по-другому, чтобы им было удобно использовать сайт, даже без карусели.
Мы хотим иметь disabled, который позволяет включать и выключать
Большинство свойств объекта stylesheet предназначены только для чтения, но некоторые, такие как disabled, можно изменять.
Можно также использовать свойства src может помочь идентифицировать внешние title. При последовательном просмотре document.styleSheets можно различать
function getStyleSheet(unique_title) {
for(var i=0; i<document.styleSheets.length; i++) {
var sheet = document.styleSheets[i];
if(sheet.title == unique_title) {
return sheet;
}
}
}
Для каждого объекта stylesheet, извлеченного из массива styleSheets, можно получить доступ к его свойству title, чтобы проверить, что оно содержит заголовок, который требуется найти. Действующий пример этого можно видеть в примере по добавлению и удалению
Переключение между различными
Вспомните рассмотренный выше теоретический демонстрационный сайт. Предположим, что этот сайт имеет список статей, некоторые из них посвящены CSS, некоторые HTML, а некоторые JavaScript. На нашей web-странице мы показываем все статьи одновременно, но наш пользователь хочет видеть статью только о CSS. Как это можно сделать? Так как все статьи уже показаны, мы не хотим снова обращаться к серверу, чтобы получить страницу, содержащую статьи только о CSS - это пустая трата времени.
Для решения этой проблемы можно использовать JavaScript, чтобы пройти в цикле по всем статьям и сделать видимыми только статьи о CSS (это будет показано позже), либо добавить
Объект stylesheet имеет две функции, которые помогают решить эту проблему. Первой является функция insertRule, которая выглядит следующим образом:
stylesheet.insertRule(rule,index)
где rule будет строкой, содержащей index определяет, где в списке
stylesheet.insertRule(".have-border { border: 1px solid black;}", 0);
Я создал пример, чтобы показать, как используется функция ).
Если требуется удалить это stylesheet.deleteRule(index), где index будет индексом
В примере демонстрации статей можно создать
Примечание: IE не реализует cssRules он использует rules. IE использует также removeRule вместо deleteRule и addRule( вместо insertRule.
Теперь вы должны понимать, как редактировать
С помощью style работает не совсем так, как некоторые другие свойства, определенные в элементе HTML. В отличие от element.href или element.id, которые возвращают строки, element.style возвращает объект. Это означает, что невозможно задать стиль, присваивая строку для element.style.
Объект style имеет атрибуты, которые соответствуют различным заданным свойствам CSS. Например, style.color возвращает заданный на элементе цвет. Выполняя element.style.color = "red"; можно динамически изменять стиль. Ниже показана функция, которая превращает цвет элемента в красный, когда ей передается id элемента.
function colorElementRed(id) {
var el = document.getElementById(id);
el.style.color = "red";
}
Можно также использовать setAttribute(key, value) для задания стиля элемента. Например, задать цвет элемента как красный, вызывая на элементе element.setAttribute('style', 'color: red');, но будьте осторожны, так как это удаляет любые изменения, сделанные в объекте style.
Когда стиль элемента задается таким образом, то это то же самое, как если бы мы задавали его как объявление атрибута style элемента html. Этот стиль будет применяться только в том случае, когда важность и специфичность
У некоторых из вас может возникнуть вопрос, что происходит, когда заданное свойство CSS имеет дефис. В этом случае синтаксис должен быть другой, так как, например, если написать element.style.font-size, JavaScript будет пытаться вычесть size из записи element.style.font, что будет совершенно не то, что требуется. Чтобы исключить эту проблему, все свойства CSS записаны в верблюжьей нотации ( CamelCase ). Как показано ниже, необходимо писать element.style.fontSize, чтобы получить доступ к размеру шрифта элемента. Например:
function changeElement(id) {
var el = document.getElementById(id);
el.style.color = "red";
el.style.fontSize = "15px";
el.style.backgroundColor = "#FFFFFF";
}
Помните объекты styleSheet.cssRules возвращает список объектов style, представляющих все style можно использовать также, как объекты style для других элементов. В этом случае вместо изменения одного определенного элемента на странице, изменения здесь будут изменять все элементы, к которым применяются
В примере ниже функция увеличения текста использует объект ).
Другой способ изменения стиля элемента состоит в изменении его атрибута ).
Умение динамически изменять стили, применяемые на странице, является крайне полезным для создания современных, насыщенных интерактивным взаимодействием Web-страниц - знания, представленные в этой лекции формируют основу более развитых методов, таких как анимация в JavaScript. Необходимо просто позаботиться о том, чтобы использовать модификации стилей ответственно, и не использовать их чрезмерно. Как мы также обсудили выше, модификации стилей могут улучшить эффективность взаимодействия с Web - отображение и скрытие контента может помочь избежать при некоторых обстоятельствах ненужных обращений к серверу.
setAttribute и заданием стиля через объект CSSStyleDeclaration?CSSStyleDeclaration элемента всегда изменять стиль элемента? Почему?
Грег Шехтер является пока новичком в отрасли web-технологий - он в настоящее время изучает программирование в Университете Иллинойса в Урбана-Шампань. Он стремится поскорее войти в отрасль web-приложений, где надеется создавать насыщенные и полезные web-сайты для пользователей во всем мире. Подробнее о Греге можно узнать на сайте GregTheBusker.com (http://gregthebusker.com/).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.