> Полезные техники JavaScript, CSS и HTML | html-live

2010 год ознаменовался выходом стандарта HTML5, благодаря которому разработчики получили высокостандартизованную, абсолютно новую веб-среду. Основные мировые браузеры, в том числе Mozilla Firefox, Google Chrome, Safari и Opera очень быстро адаптировались к нововведениям и восприняли их сугубо положительно. При этом автономность упомянутых браузеров еще больше увеличилась, в чем запросто можно убедиться, наглядно изучив особенности поддержки HTML5 на www.html5readiness.com.

Кроме того, разработчики наконец-то получили возможность успешно справляться со сложностями, создаваемыми браузером Internet Explorer. За это нужно поблагодарить Google Chrome Frame, разработанный в 2010 году и позволяющий IE поддерживать HTML5. За прошедшее с тех пор время Google Chrome Frame завоевал очень большую популярность. Его можно добавить в любую из версий браузера Internet Explorer, воспользовавшись нижеприведенным-тэгом в тэгенашего сайта:

<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />

Мы можем предложить пользователям IE, загрузить приложение при помощи JavaScript.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
<script>
window.onload = function(){
   CFInstall.check({
      mode: "overlay",
      destination: "http://www.yourdomain.com"
   });
};
</script>

Наверняка многие из вас помнят, как непросто было «заставить» каждый браузер корректно отображать тот или иной сайт. Зачастую для этого приходилось писать невероятно подробные JavaScript-коды, делать огромное количество пустых элементов с ужатыми, отвратительного качества картинками. И все для того, чтобы самый примитивный функционал просто мог работать! К сожалению, сегодня эти проблемы все еще полностью не решены. Мы, как и раньше, сражаемся за абсолютный контроль, находимся в постоянном поиске наиболее удобных инструментов для «укрощения» функционала, стиля и размещения. Но сегодня эти процессы происходят на качественно ином уровне.

e3a46c1d81ac89348d9ab74b2391004c

Расположение

Clearfix

Первоначально свойство float появилось еще в CSS 2.1. Однако ему так и не суждено было стать рецептом от всех бед, как на то многие рассчитывали. Одна из наиболее остро стоящих проблем – сложность поддерживать размеры родительского элемента, если дочерний – плавающий. Для ее решения и был создан хак, в дальнейшем получивший известность как clearfix. В качестве примера возьмем такой HTML:

.cf:before,
.cf:after {
content: " ";
display: table;
}
.cf:after {
clear: both;
}
.cf {
*zoom: 1;
}
<div class="cf"> <div class="left">...</div> <div class="right">...</div> </div>

Автор хака– Николас Галлахер:

Box-sizing

Спор о том, какая боксовая модель лучше, ведется на протяжении многих лет. Однако извечное соперничество режимов Standards и Quirks в итоге сводится всего к одному простому вопросу: должны размеры элемента после их установки и при применении заполнения и границ оставаться неизменными или нет? В настоящее время многие разработчики считают, что заполнение границы не нужно добавлять к высоте и ширине элемента, а следует считать частью пространства, доступного внутри него.

Но с ростом популярности хака, меняющего размер боксов, эта дискуссия потеряла всякий смысл. Отныне именно вы будете диктовать условия браузеру, а не он вам. Создатели этой по-настоящему универсальной техники – Пол Айриш и Крис Койер. А на практике она применяется вот таким образом

* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}

Применение селектора* в CSS многие оценивают отрицательно, так как это якобы может сильно сказаться на производительности. В действительности снижение несущественное и им запросто можно пренебречь. Конечно,если речь не идет о масштабной гипероптимизации приложения или целого сайта. Функция border-box позволит браузеру добавить внутрь доступного пространства границы и заполнение. Применять режим ‘Standards Mode’ можно после установки размера боксов, равному размеру содержания.

 

Multi-columns

Традиции печати и писем оказали большое влияние на основные принципы отображения в Интернете текстовой информации. Однако по уровню развития этого аспекта он все еще находится на стадии примитивного пергамента. Решить отдельные проблемы можно при помощи внедрения стандартов CSS Regions и Paged-Media. При этом следует отметить, что первый опыт по размещению «как в журнале» был у разработчиков уже в то время, когда браузеры еще только начинали активно работать с мультиколонками CSS. Чтобы создать подобный эффект, нужно воспользоваться достаточно простым кодом:

p {
 -webkit-column-count: 2;
 -moz-column-count: 2;
 column-count: 2; 
}

Расчеты размеров

Расчет размеров элементов – очень сложное дело. В прежние времена никаких инструментов, которые можно было бы применять для подсчета единиц, задействованных в верстке, попросту не существовало. Уже не говоря об инструментах для подсчета смешанных единиц – это было просто фантастикой. Однако с появлением calc ситуация принципиально изменилась. Благодаря ей создается специальное заполнение, не использующее ничего вроде box-sizing: border-box и не оказывающее никакого влияния на оригинальную ширину элементов. Еще совсем недавно такое было возможно разве что при добавлении дополнительных элементов.

.padded {
margin: 0 auto;
position: relative;
width: -webkit-calc(100% - (20px * 2));
width: -moz-calc(100% - (20px * 2));
width: calc(100% - (20px *2));
}

calc() обеспечивает правильный расчет ширины, основываясь на ширине материнского элемента, от которого отнимается некое заполнение в 20px. Для каждой стороны элемента 2 я выполнил умножение на два; центровку элемента произвел при помощи относительного поцизионирования. А затем просто установил автоматические рамки – правую и левую.

eee99f297e6d67123ff0ebd69c3c97e3

Стили

Прозрачность

Если перед вами стояла задача оформить элемент в том или ином стиле, вы в первую очередь прибегали к инструментам, доступным в CSS на тот момент. Одним из самых первых поддерживаемых свойств была прозрачность – она появилась еще примерно в начале 2000-х годов. С момента выхода HTML5 непрозрачность реализована в браузерах по умолчанию. Более того, в них появилась поддержка альфа-канала, наподобие того, что реализовано в стандарте ColorModule. Он включает, в том числе, руководства по HSLA и RGBA.

 

a {
color: rgba(0,255,0,0.5);
background: rgba(0,0,255,0.05);
border: rgba(255,0,0,0.5);
}

Если имеются значения HEX, цветовые модели HSLA и RGBA можно применять постоянно. Также разработчикам доступно множество необычных оттенков –просмотреть их можно сразу в данном стандарте. Эти необычные оттенки вполне можно использовать для динамичного смешения элементов.

Фильтры

Экспериментировать в CSS с различными фильтрами – одно удовольствие. Вы можете менять ощущение и вид элементов на странице в динамическом режиме, и при этом вам не нужны сторонние дополнения. Это действительно очень интересно. Кроме того, вы экономите время, проводимое с Photoshop.

<img src="market.jpg">
img {
-webkit-filter: grayscale(100%);
}

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

f0ac4ca23aaaac29937593e5572dfe10

Благодаря фильтрам CSS вы можете дорабатывать картинки прямо на страницах в браузере. Большое количество примеров доступных фильтров – здесь

Замена изображений

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

.hide-text {
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
}

Второй метод предложил Николас Галлахер

.hide-text {
font: 0/0 a;
text-shadow: none;
color: transparent;
}

Адаптивное видео

В адаптивной верстке добиться отображения аудиовизуальных элементов в правильном масштабе совсем непросто. А так как многие современные сайты обладают самонастраивающейся конструкцией, разработчику нужно обеспечить корректную обработку разрешения элементов и их размеров. Одним из наиболее «непослушных» аудиовизуальных средств является встроенное видео. Объясняется это тем, что за поставку контента отвечают дополнительные сервера. Таким образом, встраивание видеоролика с YouTube будет выглядеть примерно следующим образом:

<div class="video">
<iframe width="640" height="390" src="http://www.youtube.com/embed/oHg5SJYRHA0" frameborder="0" allowfullscreen=""></iframe>
</div>
.video {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
}
.video iframe,
.video object,
.video embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}

Данный метод основывается на установке wrapper’spadding-bottom видео: 56,25%; Применение заполнения говорит о том, что процентные значения будут основаны на ширине родительского элемента; ‘56,25%’ дает разрешение 16:9. При желании вы можете посчитать все и самостоятельно. 9 / 16 = 0,5625. 0,5625 * 100 = 56,25 (значение в процентах).

Функциональные возможности

Простой выбор элементов

По мере увеличения популярности jQuery и других библиотек JavaScript, стандартная комиссия W3C и комитет ECMAScript заметили, что разработчикам очень сильно не хватало выбора элементов. А ведь это – основополагающий аспект функциональности. Безусловно, getElementsByClassName() и getElementByID() как методы довольно быстры, однако им не хватает надежности и гибкости selector engines из сообщества разработчиков. Эта гибкость была сымитирована комиссией по стандартизации в виде querySelectorAll(), представляющем собой оригинальный метод-селектор.

var items = document.querySelectorAll('#header .item');

querySelectorAll() рассчитана на одновременную работу с множественными и разными селекторами. Более подробную информацию об этом вы найдете здесь

Создание новых массивов данных

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

var people = ['Kevin', 'Kari', 'James','Heather'];
var welcomes = people.map(function(name){
return 'Hi ' + name + '!';
});

Если прогнать вышеописанный код с функцией console.log(welcomes), то в новом массиве можно увидеть приветствия [‘HiKevin!’, ‘HiKari!’, ‘HiJames!’, ‘HiHeather!’ ].

«Чистка» документов

Нередко некоторые библиотеки JavaScript просто-напросто вмешиваются как в объекты в окне браузера, так и в исходные документы. Это, что и говорить, очень неудобно и для разработчика, и для многих отдельных библиотек. Так что лучше позаботиться о том, чтобы у вас получились «чистые» версии объектов и создать каждому новую копию. Реализовать это на практике проще всего при помощи создания элемента iframe и его вставки в модель DOM. В таком виде новые копии объектов и будут храниться.

var iframe = document.createElement('iframe');
iframe.style.display = "none";
iframe = document.body.appendChild(iframe);
var _window = iframe.contentWindow;
var _document = iframe.contentDocument ||
iframe.contentWindow.document;
document.body.removeChild(iframe);

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

Categories: Css, Html, JavaScript 0 like

Leave a Reply

You must be logged in to post a comment.