Сделай Сам Свою Работу на 5

Язык программирования JavaScript

 

JavaScript - прототипно-ориентированный сценарный язык программирования. Является диалектом языка ECMAScript.

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

Основные архитектурные черты: динамическая типизация, слабая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса.

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке.

Название «JavaScript» является зарегистрированным товарным знаком компании Oracle Corporation.

JavaScript является объектно-ориентированным языком, но используемое в языке прототипирование обуславливает отличия в работе с объектами по сравнению с традиционными класс-ориентированными языками. Кроме того, JavaScript имеет ряд свойств, присущих функциональным языкам — функции как объекты первого класса, объекты как списки, карринг, анонимные функции, замыкания - что придаёт языку дополнительную гибкость.

Несмотря на схожий с Си синтаксис, JavaScript по сравнению с языком Си имеет коренные отличия:

· объекты, с возможностью интроспекции;

· функции как объекты первого класса;

· автоматическое приведение типов;

· автоматическая сборка мусора;

· анонимные функции.

В языке отсутствуют такие полезные вещи, как:

· модульная система: JavaScript не предоставляет возможности управлять зависимостями и изоляцией областей видимости;

· стандартная библиотека: в частности, отсутствует интерфейс программирования приложений по работе с файловой системой, управлению потоками ввода/вывода, базовых типов для бинарных данных;

· стандартные интерфейсы к веб-серверам и базам данных;

· система управления пакетами, которая бы отслеживала зависимости и автоматически устанавливала их.



Семантика и синтаксис.

Синтаксис языка JavaScript во многом напоминает синтаксис Си и Java, семантически же язык гораздо ближе к Self, Smalltalk или даже Лиспу.

В JavaScript:

· все идентификаторы регистрозависимы,

· в названиях переменных можно использовать буквы, подчёркивание, символ доллара, арабские цифры,

· названия переменных не могут начинаться с цифры,

· для оформления однострочных комментариев используются //, многострочные и внутристрочные комментарии начинаются с /* и заканчиваются */.

Структура языка.

Структурно JavaScript можно представить в виде объединения трёх чётко различимых друг от друга частей:

· ядро (ECMAScript),

· объектная модель браузера (Browser Object Model или BOM (de)),

· объектная модель документа (Document Object Model или DOM).

Если рассматривать JavaScript в отличных от браузера окружениях, то объектная модель браузера и объектная модель документа могут не поддерживаться.

Объектную модель документа иногда рассматривают как отдельную от JavaScript сущность, что согласуется с определением DOM как независимого от языка интерфейса документа. В противоположность этому ряд авторов находят BOM и DOM тесно взаимосвязанными.

Взаимодействие.

В некоторых языках программирования существуют средства поддержки взаимодействия с JavaScript-кодом.

· Для PHP имеется пакет HTML_Javascript, предоставляющий интерфейс создания простых JavaScript-программ.

· Соответствующий пакет для TCL называется ::javascript. Он предоставляет команды генерации кода HTML и JavaScript.

· Пакет для Perl Data::JavaScript позволяет переносить структуры данных Perl в JavaScript-код.

Поддержка браузерами.

На сегодняшний день поддержку JavaScript обеспечивают современные версии всех наиболее часто используемых браузеров. В Internet Explorer, Mozilla Firefox, Safari, Google Chrome, Opera имеется полная поддержка третьей редакции ECMA-262. При этом в Mozilla Firefox предпринята попытка осуществления поддержки четвёртой редакции спецификации, а первым браузером, в котором появилась неполная поддержка спецификации 3.1, явился Internet Explorer 8.

Допущенные разработчиками популярных браузеров ошибки в реализации спецификации, как правило, незначительны. По состоянию на ноябрь 2009 года объектная модель документа имеет более ограниченную поддержку.

По мнению создателя языка, поддержка в Internet Explorer компанией Microsoft одного из существующих и применяющихся в других браузерах быстрых движков JavaScript способно привести к появлению приложений, работающих с трёхмерной графикой, написанных на JavaScript 3D-игр, использованию JavaScript в задачах, в которых ранее применялась технология Adobe Flash.

При генерации страниц в Web возникает дилемма, связанная с архитектурой «клиент-сервер». Страницы можно генерировать как на стороне клиента, так и на стороне сервера. В 1995 году специалисты компании Netscape создали механизм управления страницами на клиентской стороне, разработав язык программирования JavaScript.

Таким образом, JavaScript – это язык управления сценариями просмотра гипертекстовых страниц Web на стороне клиента.

Основная идея JavaScript состоит в возможности изменения значений атрибутов HTML-контейнеров и свойств среды отображения в процессе просмотра HTML- страницы пользователем. При этом перезагрузки страницы не происходит[14].

На практике это выражается в том, что можно, например, изменить цвет фона страницы или интегрированную в документ картинку, открыть новое окно или выдать предупреждение.

Для создания механизма управления страницами на клиентской стороне было предложено использовать объектную модель документа. Суть модели в том, что каждый HTML-контейнер – это объект, который характеризуется тройкой:

· свойства;

· методы;

· события.

Объектную модель можно представить как способ связи между страницами и браузером. Объектная модель – это представление объектов, методов, свойств и событий, которые присутствуют и происходят в программном обеспечении браузера, в виде, удобном для работы с ними кода HTML и исходного текста сценария на странице. Мы можем с ее помощью сообщать наши пожелания браузеру и далее – посетителю страницы. Браузер выполнит наши команды и соответственно изменит страницу на экране.

Объекты с одинаковым набором свойств, методов и событий объединяются в классы однотипных объектов. Классы – это описания возможных объектов. Сами объекты появляются только после загрузки документа браузером или как результат работы программы. Об этом нужно всегда помнить, чтобы не обратиться к объекту, которого нет.

Многие HTML-контейнеры имеют атрибуты. Например, контейнер якоря <A ...>...</A> имеет атрибут HREF, который превращает его в гипертекстовую ссылку:

<A HREF=intuit.htm>intuit</A>

Если рассматривать контейнер якоря <A ...>...</A> как объект, то атрибут HREF будет задавать свойство объекта «якорь». Программист может изменить значение атрибута и, следовательно, свойство объекта:
document.links[0].href="intuit.htm";

Не у всех атрибутов можно изменять значения. Например, высота и ширина графической картинки определяются по первой загруженной в момент отображения страницы картинке. Все последующие картинки, которые заменяют начальную, масштабируются до нее. Справедливости ради следует заметить, что в Microsoft Internet Explorer размер картинки может меняться.

Для общности картины свойствами в JavaScript наделены объекты, которые не имеют аналогов в HTML-разметке. Например, среда исполнения, называемая объектом Navigator, или окно браузера, которое является вообще самым старшим объектом JavaScript.

В терминологии JavaScript методы объекта определяют функции изменения его свойств. Например, с объектом «документ» связаны методы open(), write(), close().

Эти методы позволяют сгенерировать или изменить содержание документа.

Например:

function hello()

{ id=window.open("","example","width=400, height=150");

id.focus(); id.document.open();

id.document.write("<H1>Привет!</H1>");

id.document.write("<HR><FORM>");

id.document.write("<INPUT TYPE=button VALUE='Закрыть окно' ");

id.document.write("onClick='window.opener.focus();window.close();'>");

id.document.close();

}

В этом примере метод open() открывает поток записи в документ, метод write() осуществляет эту запись, метод close() закрывает поток записи в документ. Все происходит так же, как и при записи в обычный файл.

Кроме методов и свойств объекты характеризуются событиями. Собственно, суть программирования на JavaScript заключается в написании обработчиков этих событий. Например, с объектом типа button (контейнер INPUT типа button – «Кнопка») может происходить событие click, т.е. пользователь может нажать на кнопку. Для этого атрибуты контейнера INPUT расширены атрибутом обработки события click – onClick. В качестве значения этого атрибута указывается программа обработки события, которую должен написать на JavaScript автор HTML- документа:

<INPUT TYPE=button VALUE="Нажать" onClick="window.alert('Пожалуйста, нажмите еще раз');">

Обработчики событий указываются в тех контейнерах, с которыми эти события связаны. Например, контейнер BODY определяет свойства всего документа, поэтому обработчик события завершения загрузки всего документа указывается в этом контейнере как значение атрибута onLoad.

Примечание. Строго говоря, каждый браузер, будь то Internet Explorer, Netscape Navigator или Opera, имеет свою объектную модель.

Объектные модели разных браузеров (и даже разные версии одного) отличаются друг от друга, но имеют принципиально одинаковую структуру. Поэтому нет смысла останавливаться на каждой из них по отдельности.

Схема URL (Uniform Resource Locator) – это один из основных элементов Web- технологии. Каждый информационный ресурс в Web имеет свой уникальный URL.

URL указывают в атрибуте HREF контейнера A, в атрибуте SRC контейнера IMG, в атрибуте ACTION контейнера FORM и т.п. Все URL подразделяются на схемы доступа, которые зависят от протокола доступа к ресурсу, например, для доступа к FTP-архиву применяется схема ftp, для доступа к Gopher-архиву - схема gopher, для отправки электронной почты – схема smtp. Тип схемы определяется по первому компоненту URL: http://intuit.ru/directory/page.html

В данном случае URL начинается с http - это и есть определение схемы доступа (схема http).

Основной задачей языка программирования гипертекстовой системы является программирование гипертекстовых переходов. Это означает, что при выборе той или иной гипертекстовой ссылки вызывается программа реализации гипертекстового перехода. В Web-технологии стандартной программой является программа загрузки страницы. JavaScript позволяет поменять стандартную программу на программу пользователя. Для того чтобы отличить стандартный переход по протоколу HTTP от перехода, программируемого на JavaScript, разработчики языка ввели новую схему URL –JavaScript:

<A HREF="JavaScript:JavaScript_код">...</A>

<IMG SRC="JavaScript:JavaScript_код">

В данном случае текст "JavaScript_код" обозначает программы-обработчики на JavaScript, которые вызываются при выборе гипертекстовой ссылки в первом случае и при загрузке картинки – во втором.

Например, при нажатии на гипертекстовую ссылку «Внимание!!!» можно получить окно предупреждения:

<A HREF="JavaScript:alert('Внимание!!!');"> Внимание!!!</A>

А при нажатии на кнопку типа submit в форме можно заполнить текстовое поле этой же формы:

<FORM NAME=f METHOD=post

ACTION="JavaScript:window.document.f.i.VALUE='Нажали кнопку

Click';void(0);">

<INPUT TYPE=submit VALUE=Click>

</FORM>

В URL можно размещать сложные программы и вызовы функций. Следует только помнить, что схема JavaScript работает не во всех браузерах, а только в версиях Netscape Navigator и Internet Explorer, начиная с четвертой.

Такие программы, как обработчики событий (handler), указываются в атрибутах контейнеров, с которыми эти события связаны. Например, при нажатии на кнопку происходит событие click:

<FORM><INPUT TYPE=button VALUE="Кнопка"
onClick="window.alert('intuit');"></FORM>

Контейнер SCRIPT – это развитие подстановок до возможности генерации текста документа JavaScript-кодом. В этом смысле применение SCRIPT аналогично Server Side Includes, т.е. генерации страниц документов на стороне сервера.

При разборе документа HTML-парсер передает управление интерпретатору после того, как встретит тег начала контейнера SCRIPT. Интерпретатор получает на исполнение весь фрагмент кода внутри контейнера SCRIPT и возвращает управление HTML-парсеру для обработки текста страницы после тега конца контейнера SCRIPT.

Контейнер SCRIPT выполняет две основные функции:

1. размещение кода внутри HTML-документа;

2. условная генерация HTML-разметки на стороне браузера.

Первая функция аналогична декларированию переменных и функций, которые потом можно будет использовать в качестве программ переходов, обработчиков событий и подстановок. Вторая – это подстановка результатов исполнения JavaScript-кода в момент загрузки или перезагрузки документа.

Объектно-ориентированный язык программирования предполагает наличие иерархии классов объектов. В JavaScript такая иерархия начинается с класса объектов Window, т.е. каждый объект приписан к тому или иному окну. Для обращения к любому объекту или его свойству указывают полное или частичное имя этого объекта или свойства объекта, начиная с имени объекта старшего в иерархии, в который входит данный объект:

Вообще говоря, JavaScript не является классическим объектным языком (его еще называют облегченным объектным языком). В нем нет наследования и полиморфизма. Программист может определить собственный класс объектов через оператор function, но чаще пользуется стандартными объектами, их конструкторами и вообще не применяет деструкторы классов. Это объясняется тем, что область действия JavaScript-программы обычно не распространяется за пределы текущего окна.

Иногда у разных объектов JavaScript бывают определены свойства с одинаковыми именами. В этом случае нужно четко указывать, свойство какого объекта программист хочет использовать. Например, Window и Document имеют свойство location. Только для Window это объект класса Location, а для Document – строковый литерал, который принимает в качестве значения URL загруженного документа.

Следует также учитывать, что для многих объектов существуют стандартные методы преобразования значений свойств объектов в обычные переменные.

Например, для всех объектов по умолчанию определен метод преобразования в строку символов: toString(). В примере с location, если обратиться к window.location в строковом контексте, будет выполнено преобразование по умолчанию, и программист этого не заметит:

<SCRIPT>

document.write(window.location);

document.write("<BR>");

document.write(document.location);

</SCRIPT>

Однако разница все-таки есть, и довольно существенная. В том же примере

получим длины строковых констант:

<SCRIPT>

w=toString(window.location);

d=toString(document.location);

h=window.location.href;

document.write(w.length);

document.write(d.length);

document.write(h.length);

</SCRIPT>

Результат исполнения получите сами.

Как легко убедиться, при обращении к свойству объекта типа URL, а свойство location как раз является объектом данного типа, длина строки символов после преобразования будет другой.

Класс объектов Window - это самый старший класс в иерархии объектов JavaScript. К нему относятся объект Window и объект Frame.

Объект Window ассоциируется с окном программы-браузера, а объект Frame — с окнами внутри окна браузера, которые порождаются последним при использовании автором HTML-страниц контейнеров FRAMESET и FRAME.

В JavaScript строка является любым фрагментом текста. Как и многие другие объекты в JavaScript, строки можно определять несколькими различными способами:

var myString = 'Hello, World!';

var myString = new String('Hello, World!');

Первый метод используется наиболее часто. Второй метод применяется редко и только для гарантии, что получаемый объект является строкой. Например:

var n = 5;

var s = new String(n*20);

В этом примере s будет строкой “ 100”. Если просто задать s как n*20, то s будет содержать число 100. Однако поскольку JavaScript является слабо типизированным языком, то эти различия не будут существенно влиять на то, что вы делаете.

Строковые объекты (var n = new String('Hello World')) технически являются в Internet Explorer более медленными при некоторых операциях, чем строковые литералы (var n = 'Hello World'). Однако это поведение совершенно противоположно в других браузерах. В любом браузере различие редко бывает настолько заметно, чтобы об этом беспокоиться.

Единственное важное различие состоит в том, что eval() не работает со строковыми объектами.

Что, если в строке имеется апостроф? Следующий код работать не будет:

var n = 'The dog took it's bone outside';

Легко видеть, что апостроф в “it's " заканчивает строку. Поэтому мы получаем строку “The dog took it ", за которой следует “ s bone outside' «. Это продолжение само по себе не является допустимым кодом JavaScript (или правильным грамматически, если на то пошло), поэтому будет получена ошибка[15].

Здесь можно сделать две вещи. Так как строка определяется с помощью одиночных или двойных кавычек, то можно задать строку с помощью двойных кавычек. Другая возможность состоит в экранировании апострофа. Чтобы экранировать символ, необходимо просто подставить перед ним символ \. Символ \ в этом контексте сообщает JavaScript, что следующий символ необходимо воспринимать в точности так, как он есть, в номинальном значении, а не как специальный символ.

var n = "The dog took it's bone outside";

var n = 'The dog took it\'s bone outside';

Если в строке должен присутствовать символ \, то он экранируется таким же образом: '\\'.

В предыдущей лекции мы встречались с функциями indexOf и lastIndexOf.

Напомним, что они делают. Функция indexOf возвращает число, определяющее первую позицию одной строки в другой. Если разыскиваемая строка не существует, то indexOf возвращает -1. Функция lastIndexOf идентична indexOf, но возвращает не первую позицию вхождения строки, а последнюю.

Тот факт, что функции indexOf и lastIndexOf возвращают -1, если строка не существует, является очень полезным и позволяет использовать эти функции для достаточно распространенной задачи - проверки того, что одна строка существует внутри другой.

Существует несколько других полезных функций для работы со строками.

· charAt() сообщает, какой символ находится в определенной позиции строки.

Поэтому 'Test'.charAt(1) = 'e'.

· length сообщает длину строки . 'Test'.length = 4.

· substring() выдает строку между двумя индексами. 'Test'.substring(1, 2) = 'e'.

· substr() аналогична substring(), только второе число является не индексом, а длиной возвращаемой строки. Если это число указывает на позицию за пределами строки, то substr() вернет существующую часть строки.
'Test'.substr(1, 2) = 'es';

· toLowerCase() и toUpperCase() делают то, что обозначают: преобразуют строку в нижний или верхний регистр символов соответственно.

'Test'.toUpperCase() = 'TEST';

Примеры всех приведенных выше функций:

alert('This is a Test'.indexOf('T')); // 0

alert('This is a Test'.lastIndexOf('T')); // 10

alert('This is a Test'.charAt(5)); // i

alert('This is a Test'.length); // 14

alert('This is a Test'.substring(5, 9)); // is a

alert('This is a Test'.substr(5, 9)); // is a Test

alert('This is a Test'.toUpperCase()); // THIS IS A TEST

alert('This is a Test'.toLowerCase()); // this is a test

Последней строковой функцией, которая будет рассмотрена, является eval(). eval() получает строку и выполняет строку, как если бы это был код JavaScript.

eval("alert('Hello, World!')");

В этом примере будет выведено сообщение “Hello, World!”, как если бы функция alert была написана обычным образом. Это может быть очень полезно, так как позволяет создать содержащую код строку, а затем ее выполнить.

Объект Math в JavaScript содержит функции, позволяющие сделать почти все, что можно сделать с числами помимо обычной арифметики. Math.PI, например, содержит просто число 3.141592653589793. В нем содержатся тригонометрические функции (sin, cos, tan, и т.д.), функции для округления чисел (Math.floor возвращает число, округленное с недостатком, Math.ceil возвращает число, округленное с избытком, а Math.round округляет число "нормально") и многие другие.

Двумя наиболее распространенными задачами, связанными с числами, являются преобразование числа в строку и строки в число. JavaScript является слабо типизированным языком, а это означает, что типы данных не имеют большого значения, но существуют некоторые случаи, когда надо быть уверенным, что имеется число или строка. Если надо сложить, например, 5 и число, которое вводит пользователь, то надо быть уверенным, что введено число, а не слово «Привет «.

var n = parseInt("3.14"); // 3

var n = parseFloat("3.14") // 3.14

Функция parseInt возвращает целое значение своего аргумента. Аргументы “3.14 ", “3 ", “3.00001 " и “3.9999 " превратятся в значение 3.

Функция parseFloat, с другой стороны, возвращает также любое десятичное значение. Обе эти функции пытаются "очистить" данные перед возвращением числа. Например, parseInt("3a") вернет значение 3.

Существует также несколько методов, которые можно использовать, когда надо преобразовать число в строку:

var n = 5;

var m = n.toString();

var m = n+'';

var m = new String(n);

Предпочтительным методом является "n.toString() ", но необходимо отметить, что часто используется второй метод. Например, если имеется уведомление alert('Имеется ' + apples + ' яблок'), то число apples автоматически преобразуется в строку.

Массив является по сути списком элементов. Каждый элемент массива может быть чем угодно, но обычно они связаны друг с другом. Если, например, необходимо отследить 30 студентов класса, то можно создать массив студентов:

var students = new Array();

students[0] = 'Sam';

students[1] = 'Joe';

students[2] = 'Sue';

students[3] = 'Beth';

Как можно видеть, определить массив очень просто, так же, как и присвоить значения его элементам. Однако пример выше имеет слишком много кода для относительно небольшого результата. Нет ничего удивительного в том, что существует несколько методов для создания массива. Значительно более компактным будет следующий пример:

var students = ['Sam', 'Joe', 'Sue', 'Beth'];

Это код создает точно такой же массив, что и предыдущий пример, но, как можно видеть, он значительно более компактный и ничуть не сложнее для понимания. Скобки ([ и ]) в этом примере сообщают коду, что будет создан массив. Простая запись "var students = []; " является тем же самым, что и запись "var students = new Array(); ".

Чтобы обратиться к любому элементу массива, необходимо знать его индекс. В первом примере можно видеть, что в скобках находятся числа (0-3). Это индексы. Если требуется узнать имя третьего студента, то надо будет написать "alert(students[2]); ". Массивы в JavaScript начинают индексацию с 0, а не с 1. Поэтому первым элементом в массиве будет students[0], вторым - students[1], сотым - students[99], и т.д. Для этого не существует никакой реальной причины, просто так устроен JavaScript и многие другие языки программирования. Некоторые другие языки используют в качестве первого индекса 1.

Наиболее распространенной задачей при работе с массивами, помимо изменения его данных, является проверка его длины, обычно для того, чтобы можно было перебрать весь массив и выполнить некоторую задачу с каждым элементом.

var students = ['Sam', 'Joe', 'Sue', 'Beth'];

var suffixes = ['1st', '2nd', '3rd', '4th'];

for(var i=0; i<students.length; i++){

alert(suffixes[i]+' студент -- '+students[i]);

}

Важный момент, который необходимо знать о массивах, состоит в том, что каждый элемент массива может содержать любой произвольный объект. В этих примерах каждый элемент массива является строкой, но они могут быть также числами, объектами, функциями, даже другими массивами. Электронная таблица (такая, как Excel) является хорошим примером массива, содержащего другие массивы.

Прежде всего имеется массив столбцов. Каждый столбец будет в свою очередь содержать в себе массив строк. Этот массив создается точно таким же образом, как и массив students:

var spreadsheet = [

['A1', 'B1', 'C1', 'D1'],

['A2', 'B2', 'C2', 'D2'],

['A3', 'B3', 'C3', 'D3'],

['A4', 'B4', 'C4', 'D4']

];

Переносы строк в JavaScript обычно не имеют значения. В этом примере переносы строк используются для придания коду большей наглядности и не влияют на код никаким образом. [16]

 

Таблица стилей CSS

 

CSS (англ. Cascading Style Sheets - каскадные таблицы стилей) - формальный язык описания внешнего вида документа, написанного с использованием языка разметки.

Преимущественно используется как средство описания, оформления внешнего вида веб-страниц, написанных с помощью языков разметки HTML и XHTML, но может также применяться к любым XML-документам, например, к SVG или XUL.

CSS используется создателями веб-страниц для задания цветов, шрифтов, расположения отдельных блоков и других аспектов представления внешнего вида этих веб-страниц. Основной целью разработки CSS являлось разделение описания логической структуры веб-страницы (которое производится с помощью HTML или других языков разметки) от описания внешнего вида этой веб-страницы (которое теперь производится с помощью формального языка CSS). Такое разделение может увеличить доступность документа, предоставить большую гибкость и возможность управления его представлением, а также уменьшить сложность и повторяемость в структурном содержимом. Кроме того, CSS позволяет представлять один и тот же документ в различных стилях или методах вывода, таких как экранное представление, печатное представление, чтение голосом (специальным голосовым браузером или программой чтения с экрана), или при выводе устройствами, использующими шрифт Брайля[17].

Способы подключения CSS к документу.

Правила CSS пишутся на формальном языке CSS и располагаются в таблицах стилей, то есть таблицы стилей содержат в себе правила CSS. Эти таблицы стилей могут располагаться как в самом веб-документе, внешний вид которого они описывают, так и в отдельных файлах, имеющих формат CSS. (По сути, формат CSS — это обычный текстовый файл. В файле .css не содержится ничего, кроме перечня правил CSS и комментариев к ним.)
То есть, эти таблицы стилей могут быть подключены, внедрены в описываемый ими веб-документ четырьмя различными способами:

· когда таблица стилей находится в отдельном файле, она может быть подключена к веб-документу посредством тега <link>, располагающегося в этом документе между тегами <head> и </head>. (Тег <link> будет иметь атрибут href, имеющий значением адрес этой таблицы стилей). Все правила этой таблицы действуют на протяжении всего документа;

<head>

.....

<link rel="stylesheet" type="text/css" href="style.css"/>

</head>

· когда таблица стилей находится в отдельном файле, она может быть подключена к веб-документу посредством директивы @import, располагающейся в этом документе между тегами <style> и </style> (которые, в свою очередь, располагаются в этом документе между тегами <head> и </head>) сразу после тега <style>, которая также указывает (в своих скобках, после слова url) на адрес этой таблицы стилей. Все правила этой таблицы действуют на протяжении всего документа;

<head>

.....

<style type="text/css" media="all">

@import url(style.css);

</style>

</head>

· когда таблица стилей описана в самом документе, она может располагаться в нём между тегами <style> и </style> (которые, в свою очередь, располагаются в этом документе между тегами <head> и </head>). Все правила этой таблицы действуют на протяжении всего документа;

<head>

.....

<style type="text/css">

body {

color: red;

}

</style>

</head>

· когда таблица стилей описана в самом документе, она может располагаться в нём в теле какого-то отдельного тега (посредством его атрибута style) этого документа. Все правила этой таблицы действуют только на содержимое этого тега.

<p style="font-size: 21px; color: green;">Рассказ о том, как вредно красить батареи</p>

В первых двух случаях говорят, что к документу применены внешние таблицы стилей, а во вторых двух случаях - внутренние таблицы стилей.

Для добавления CSS к XML-документу, последний должен содержать специальную ссылку на таблицу стилей. Например:

<?xml-stylesheet type="text/css" href="style.css"?>

Иерархия элементов внутри документа.

Как известно, HTML-документы строятся на основании иерархии элементов, которая может быть наглядно представлена в древовидной форме. Элементы HTML друг для друга могут быть родительскими, дочерними, элементами-предками, элементами-потомками, сестринскими.

Элемент является родителем другого элемента, если в иерархической структуре документа он находится сразу, непосредственно над этим элементом. Элемент является предком другого элемента, если в иерархической структуре документа он находится где-то выше этого элемента.
Например, в документе присутствуют два абзаца p, включающие в себя шрифт с полужирным начертанием b. Тогда элементы b будут дочерними элементамисвоих родительских элементов p, и потомками своих предков body. В свою очередь, для элементов p элемент body будет являться только родителем. И кроме того, эти два элемента p будут являться сестринскими элементами, как имеющими одного и того же родителя - body.

В CSS могут задаваться при помощи селекторов не только одиночные элементы, но и элементы, являющиеся потомками, дочерними или сестринскими элементами других элементов (см. подраздел «виды селекторов»).

Правила построения CSS.

В первых трёх случаях подключения таблицы CSS к документу (см. выше) каждое правило CSS из таблицы стилей имеет две основные части — селектор и блок объявлений. Селектор, расположенный в левой части правила, определяет, на какие части документа распространяется правило. Блок объявлений располагается в правой части правила. Он помещается в фигурные скобки, и, в свою очередь, состоит из одного или более объявлений, разделённых знаком «;». Каждое объявление представляет собой сочетание свойства CSS и значения, разделённых знаком ": ". Селекторы могут группироваться в одной строке через запятую. В таком случае свойство применяется к каждому из них.

селектор, селектор { свойство: значение; свойство: значение; свойство: значение;}

В четвёртом случае подключения таблицы CSS к документу (см. список) правило CSS (являющееся значением атрибута style тега, на который оно действует) представляет собой перечень объявлений («свойство CSS : значение»), разделённых знаком «;».

Виды селекторов.

Селекторы правила CSS могут быть:

· универсальный селектор;

* {margin:0; padding:0;}

· селекторами элементов;

p {font-family: Garamond, serif;}

· селекторами классов;

.note {color: red; background: yellow; font-weight: bold;}

· селекторами идентификаторов;

#paragraph1 {margin: 0;}

· селекторами атрибутов;

a[href="http://www.somesite.com"]{font-weight:bold;}

· селекторами потомков (контекстными селекторами);

div#paragraph1 p.note {color: red;}

· селекторами дочерних элементов;

p.note > b {color: green;}

· селекторами сестринских элементов;

h1 + p {font-size: 24pt;}

· селекторами псевдоклассов;

a:active {color:yellow;}

· селекторами псевдоэлементов.

p::first-letter {font-size: 32px;}

· Также в CSS существует так называемый универсальный селектор, обозначающий любой элемент, встречающийся в документе. Например, * {color: red;}. Перед любым селектором, задающим класс или идентификатор, можно поставить знак универсального селектора, в результате получится эквивалентное выражение, например, .first {…} и *.first {…} имеют один и тот же смысл.

Классы элементов. Идентификаторы элементов.

Класс или идентификатор может быть присвоен какому-нибудь элементу (тегу) HTML посредством атрибутов class или id этого элемента (тега):

<div id="first"> ... </div><p class="big"> ... </p>

Основное отличие между классами элементов и идентификаторами элементов в том, что в документе какой-нибудь класс может быть присвоен сразу нескольким элементам, а идентификатор - только одному. Также отличие в том, что могут существовать множественные классы (когда класс элемента состоит из нескольких слов, разделённых пробелами). Для идентификаторов такое невозможно.

Важно отметить следующее отличие идентификатора от класса: идентификаторы широко используются в JavaScript для нахождения уникального элемента в документе[18].

Имена классов и идентификаторов, в отличие от названий тегов и их атрибутов, чувствительны к регистру ввода букв.

Свойства классов и идентификаторов задаются с помощью соответствующих селекторов. Причём может быть задано как свойство класса в целом (в таком случае селектор начинается с «.»), или свойство идентификатора самого по себе (в таком случае селектор начинается с «#»), так и свойство какого-нибудь элемента этого класса или с этим идентификатором.

В CSS помимо классов, задаваемых автором страницы, существует также ограниченный набор так называемых псевдоклассов, описывающих вид гиперссылок с определённым состоянием в документе, вид элемента, на котором находится фокус ввода, а также вид элементов, являющихся первыми дочерними элементами других элементов. Также в CSS существует четыре так называемых псевдоэлемента: первая буква, первая строка, применение специальных стилей до и после элемента.

Наследование. Каскадирование. Приоритеты стилей CSS.

Применение CSS к документам HTML основано на принципах наследования и каскадирования. Принцип наследования заключается в том, что свойства CSS, объявленные для элементов-предков, наследуются элементами потомками. Но, естественно, не все свойства CSS наследуются - например, если для тега параграфа p средствами CSS задана рамка, то она не будет наследоваться ни одним тегом, содержащимся в данном теге p, а вот если для параграфа p средствами CSS задан цвет шрифта (например, color:green;), то это свойство будет унаследовано каждым элементом-тегом, находящимся в параграфе.

Принцип каскадирования применяется в случае, когда какому-то элементу HTML одновременно поставлено в соответствие более одного правила CSS, то есть, когда происходит конфликт значений этих правил. Чтобы разрешить такие конфликты вводятся правила приоритета.

Наиболее низким приоритетом обладает стиль браузера;

Следующим по значимости является стиль, заданный пользователем браузера в его настройках.

И наиболее высоким приоритетом обладает стиль, заданный непосредственно автором страницы. И далее, уже в этом авторском стиле приоритеты расставляются следующим образом:

· Самым низким приоритетом обладают стили, наследуемые в документе элементом от своих предков;

· Более высоким приоритетом обладают стили, заданные во внешних таблицах стилей, подключённых к документу;

· Ещё более высоким приоритетом обладают стили, заданные непосредственно селекторами всех десяти видов (см. подраздел «виды селекторов»), содержащимися в контейнерах style данного документа. Нередки случаи, когда к какому-нибудь элементу имеют отношение, задают его вид, несколько таких селекторов. Такие конфликты между ними разрешаются с помощью расчёта специфичности каждого такого селектора и применения этих селекторов к данному элементу в порядке убывания их специфичностей. При расчёте специфичности селектора принимается во внимание:

· количество идентификаторов (#id) в селекторе — ((1,0,0,0) за каждый объявленный идентификатор в селекторе правила CSS);

· количество атрибутов ([attr], [attr="value"]) в селекторе — ((0,1,0,0) за каждый объявленный атрибут в селекторе правила CSS);

· количество классов (.class) и псевдоклассов (:pseudoclass) в селекторе — ((0,0,1,0) за каждый объявленный класс и псевдокласс в селекторе правила CSS);

· количество тегов в селекторе (H1, INPUT) — ((0,0,0,1) за каждый объявленный тег в селекторе правила CSS).

Принцип расчёта таков, что, например, (1,0,0,0) будет иметь большую специфичность, соответственно — бо́льший приоритет, чем даже (0,10,0,0), (0,1,0,0) будет иметь большую специфичность, больший приоритет, чем (0,0,10,0), а (0,0,1,0) будет иметь больший приоритет, чем (0,0,0,10). Если же рассчитанные таким образом специфичности окажутся одинаковыми, то к элементу будет применено правило, описанное селектором, расположенным в документе ниже других.

· Ещё более высоким приоритетом обладают стили, объявленные непосредственно в теге данного элемента посредством атрибута style этого тега;

· И наконец самым высоким приоритетом обладают стили, объявленные автором страницы или пользователем, с помощью сопроводительного слова !important. Если таких свойств несколько, то предпочтение отдаётся в первую очередь стилям, заданным пользователем, а для остальных свойств (которые будут являться задаваемыми автором страницы) потребуется определить их специфичности по принципам, описанным выше, и применять эти свойства в порядке убывания этих их специфичностей[19].

Пример таблицы стилей.



©2015- 2019 stydopedia.ru Все материалы защищены законодательством РФ.