КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Способы использования PNG, в том числе для отображения теней
Формы Табы Меню Логотип При оформлении графического логотипа, слогана и т.п. используется подмена текста изображением: HTML: <strong class="logo"> Logo Name </strong>
CSS: .logo { display: block; width: 100px; height: 100px; background: url(logo.gif); text-indent: -3000px; overflow: hidden; }
Если логотип – PNG- изображение (работа с PNG подробнее рассмотрена в «Способы использования PNG для отображения теней») и в то же время ссылка, то надо для IE6 применить хитрость: HTML: <a href=”#” class="logo"> Logo Name </a>
CSS: a.logo { display: block; width: 100px; height: 100px; background: url(logo.png); text-indent: -3000px; overflow: hidden; } * html a.logo{ backgound-position: -100% -100%; background-repeat: none; filter: progid:dximagetransform.microsoft. } Таким образом, в местах прозрачности курсор не будет «проваливаться» и переставать видеть ссылку. Это полезно, если логотип выглядит, как текст. Меню оформляется с использованием ul / li:
HTML: <ul> <li> <a href=”#”>List1</a> </li> <li> <a href=”#”>List2</a> </li> <li> <a href=”#”>List3</a> </li> </ul>
Подобным образом оформляются и вложенные меню:
HTML: <ul> <li><a href="#">List1</a> <ul> <li> <a href="#">List1.1</a> </li> <li> <a href="#">List1.2</a> </li> <li> <a href="#">List1.3</a> </li> </ul> </li> <li><a href="#">List2</a> <ul> <li> <a href="#">List2.1</a> </li> <li> <a href="#">List2.2</a> </li> <li> <a href="#">List2.3</a> </li> </ul> </li> <li><a href="#">List3</a> <ul> <li> <a href="#">List3.1</a> </li> <li> <a href="#">List3.2</a> </li> <li> <a href="#">List3.3</a> </li> </ul> </li> </ul>
Для реализации выпадающего меню добавляем id для корневого ul, это нужно для IE. Для остальных браузеров хватит CSS: HTML: <ul id="nav"> <li><a href="#">List1</a> <ul> <li><a href="#">List1.1</a></li> <li><a href="#">List1.2</a></li> <li><a href="#">List1.3</a></li> </ul> </li> <li><a href="#">List2</a> <ul> <li><a href="#">List2.1</a></li> <li><a href="#">List2.2</a></li> <li><a href="#">List2.3</a></li> </ul> </li> <li><a href="#">List3</a> <ul> <li><a href="#">List3.1</a></li> <li><a href="#">List3.2</a></li> <li><a href="#">List3.3</a></li> </ul> </li> </ul>
CSS: #nav li { border: 1px solid #000; width:150px; background:#fff; list-style:none; } #nav li.hover, #nav li:hover { position: relative; } #nav li.hover ul, #nav li:hover ul { display: block; } #nav ul { display: none; position: absolute; left: 50%; top: 50%; /* left и top смещение относительно родительского элемента */ }
JS: initNav = function() { var lis = document.getElementById("main-navigation").getElementsByTagName("li"); for (var i=0; i<lis.length; i++) { lis[i].onmouseover = function() { this.className += " hover"; } lis[i].onmouseout = function() { this.className = this.className.replace(" hover", ""); } } } if (document.all &&!window.opera && (typeof document.body.style.maxHeight == 'undefined')) attachEvent("onload", initNav);
HTML: <div class="tabset"> <a href="#tab1" class="tab active">Tab1</a> <a href="#tab2" class="tab">Tab2</a> <a href="#tab3" class="tab">Tab3</a> </div> <div class="tab" id="tab1">Tab1 text</div> <div class="tab" id="tab2">Tab2 text</div> <div class="tab" id="tab3">Tab3 text</div>
CSS: .tabset {float:left;} a.tab { border: 1px solid #000; float: left; margin: 0 0 -1px; position: relative; } a.active{border-bottom-color: #fff;} div.tab { border:1px solid #000; clear: both; }
JS: function initTabs() { var sets = document.getElementsByTagName("div"); for (var i = 0; i < sets.length; i++) { if (sets[i].className.indexOf("tabset")!= -1) { var tabs = []; var links = sets[i].getElementsByTagName("a"); for (var j = 0; j < links.length; j++) { if (links[j].className.indexOf("tab")!= -1) { tabs.push(links[j]); links[j].tabs = tabs; var c = docu.getElementById(links[j].href.substr(links[j].href.indexOf("#") + 1)); if (c) if (links[j].className.indexOf("active")!= - c.style.display = "block"; else c.style.display = "none"; links[j].onclick = function () { var c = docu.getElementById(this.href.substr(this.href.indexOf("#") + 1)); if (c) { //reset all tabs for (var i = 0; i < this.tabs.length; { document.getElementById(this.tabs[i].href.substr(this.tabs[i].href.indexOf("#") + 1)).style.display = e"; this.tabs[i].className =.tabs[i].className.replace("active", ""); } this.className += " active"; c.style.display = "block"; return false; } } } } } } }
if (window.addEventListener) window.addEventListener("load", initTabs, false); else if (window.attachEvent) window.attachEvent("onload", initTabs); Основняые тэги, используемые при верстке форм указаны в 6.1 При оформлении форм необходимо учитывать, что при прикручивании к движку на сервере тэг form может быть удален из тела документа (в ASP.NET тэг form должен быть один на весь документ). Т.е. делаем так: HTML: <form action="#"> <div class="form"> ... </div> </form>
И теперь все оформление привязываем к div.form. Привыкнув так оформлять формы, мы убиваем двух зайцев: избавляемся от возможных проблем с клиентским ASP и пишем валидный код под XHTML 1.0 Strict, где элементы форм относительно тэга <form> должны быть завернуты в блочный элемент.
При оформлении форм необходимо использовать определение полей label с привязкой к соответствующему полю ввода: HTML: <label for="first-name">First Name</label> <input type="text" id="firstName"/>
<label for="country">Country</label> <select id="country"> <option>Afghanistan</option> <option>Albania</option> ... </select>
Важно! Для обеспечения правильного отображения информации при отключенном CSS (а это одно из требований accessibility) необходимо располагать тэг label непосредственно перед соответствующим ему элементом формы. Важно! Параметр name в элементах формы вводить не надо, это сделают программисты в соответствии со своими потребностями.
При идущих подряд полях ввода с одним описанием привязку делаем на первое поле: HTML: <label for="date">Date</label> <select id="date"> <option>Year</option> <option>1972</option> <option>1973</option> ... </select> <select> <option>Month</option> <option>1</option> <option>2</option> ... </select> <select> <option>Month</option> <option>January</option> <option>February</option> ... </select>
Поле ввода типа textarea должно содержать параметры col и row:
HTML: <textarea cols="20" rows="5"></textarea>
Замечание в принципе col и row можно оставить пустым, но хорошим тоном считается оформить textarea так, что бы и без CSS вид был приличный.
При визуальном оформлении элементов форм можно пользоваться как чистым CSS, так и внешними скриптами, берущими на себя эту задачу (частично, как будет видно далее). При оформлении средствами CSS надо учитывать, что:
Рассмотрим NiceForms (http://www.badboy.ro/articles/2007-01-30/niceforms/) на данный момент версии 1.0 Стандартный вид (в IE) Вид с включенным NiceForms (в IE) Скрипт занимается подстановкой изображений (края, уголки, чекбоксы, флаги и т.п.) к уже оформленным через CSS элементам форм. Область действия определяется назначением класса niceform на тэг form, т.е. при порезке под ASP определить, какие блоки оформлять, а какие нет – нельзя: оформлены будут или все формы, или ни одна (хотя, конечно, можно отредактировать родной JS и поменять критерии поиска блока, в котором скрипт будет работать). Имена изображений можно менять в «родном» JS. Ограничения для всех подобных решений – невозможно сделать оформление для полей типа text, textarea, button, file в Safari. Есть способ оформить поле ввода типа file, но сделать его одинаково корректно работающим во всех браузерах невозможно, поэтому он рассматриваться не будет, и лучше этого не делать вообще. При использовании PNG в качестве фонового рисунка надо учитывать, что IE версий ниже 7 (далее под IE понимается IE≤6) не понимает прозрачность в PNG. Для реализации в IE надо использовать фильтр: CSS: div{ background:url(image.png); } * html div{ background:none; filter:progid:dximagetransform.microsoft.alphaimageloader(src='image.png', sizingmethod='crop'); } Важно! Параметр src указывается относительно страницы, а не CSS, т.е. если css-файл лежит в папке CSS, a image.png в IMAGES, то код будет выглядеть так: CSS: div{ background:url(../images/image.png); } * html div{ background:none; filter:progid:dximagetransform.microsoft.alphaimageloader(src='images/image.png', sizingmethod='crop'); }
В то же время, если поместить в контейнер, например, ссылку, то в IE ссылка не будет рабочей, т.к. фильтр перекроет собой ссылку. У этой проблемы есть два варианта решения: либо вырезаем в PNG на месте ссылки дыру и тогда фильтр пропустит фокус на ссылку, либо назначаем ссылке свойство position:relative и ссылка, образно выражаясь, поднимется выше фильтра и станет активна. Второй вариант, как правило, наиболее приемлем им и будем пользоваться. При использовании PNG в качестве тянущегося фона (тени): в строке filter:progid… необходимо указывать параметр sizingmethod='scale', в этом случае изображение будет растянуто по размеру всего блока. И снова все дочерние блоки окажутся перекрыты фильтром и ссылки не будут активными. Указываем первому дочернему блоку position:relative и проблема решается. HTML: <div class="shadow"> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec quis risus. Nam et <a href="#">ipsum ut justo</a> condimentum… </p> <p>Nullam sit amet libero. Pellentesque… </p> </div>
CSS: .shadow{ width:410px; background:url(shadow.png) repeat-y; padding:5px 0 100px; margin:0 auto; } * html.shadow{ background:none; filter:progid:dximagetransform.microsoft.alphaimageloader(src='shadow.png', sizingmethod='scale'); } .shadow p{ position:relative; margin:0 20px 16px; font:11px/16px solid tahoma,sans-serif; }
Следующий момент надо запомнить, как догму и при использовании фильтра в IE всегда учитывать: так как фильтр в IE не является полноправным заменителем свойства background, то и ни один из параметров этого свойства на него не распространяется: -repeat – номинально заменяется методом sizingmethod, но: при значении scale изображение растягивается, а не повторяется, при значении crop изображение обрезается, по размеру блока; -position – не работает совсем, невозможно позиционировать изображение относительно блока; -color – тоже никак не реализуется средствами непосредственно фильтра. Но если Важно не забывать всегда обрабатывать готовые PNG-файлы программой pngout.exe (см. 3.4)
Дата добавления: 2014-12-16; Просмотров: 403; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |