10 лучших ide и редакторов кода для веб‑разработчиков

Что такое Visual Studio Code

Visual Studio Code или просто VS Code – это бесплатный, популярный и имеющий множество дополнений текстовый редактор, который в первую очередь предназначен для создания и отладки современных веб- и облачных приложений.

Разработан он компанией Microsoft и доступен для операционных систем Windows, MacOS и Linux.

Распространяется данная программа бесплатно, исходный код её доступен на GitHub.

VS Code поддерживает большое количество языков программирования, включает в себя отладчик, средства для работы с Git, подсветку синтаксиса, технологию автодополнения IntelliSense, инструменты для рефакторинга, терминал и многое другое.

VS Code является достаточно гибким инструментом, расширяемым с помощью плагинов, доступных на Visual Studio Marketplace. Открыть панель с расширениями в программе можно через комбинацию клавиш Ctrl+Shift+X.

Плагинов для Visual Studio Code очень много, но в рамках этой статьи рассмотрим только наиболее популярные из них. В VS Code уже встроен такой плагин как Emmet. Если вы не знакомы с ним, то он предназначен для быстрого набора кода. Дополнительно его устанавливать не нужно.

Уродливый HTML

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

Для наглядности посмотрите на пример ниже:

 <div class="min-w-0 flex-auto space-y-0.5">
  <p class="text-lime-600 dark:text-lime-400 text-sm sm:text-base lg:text-sm xl:text-base font-semibold uppercase">
    <abbr title="Episode">Ep.</abbr> 128
  </p>
  <h2 class="text-black dark:text-white text-base sm:text-xl lg:text-base xl:text-xl font-semibold truncate">
    Scaling CSS at Heroku with Utility Classes
  </h2>
  <p class="text-gray-500 dark:text-gray-400 text-base sm:text-lg lg:text-base xl:text-lg font-medium">
    Full Stack Radio
  </p>
</div>

Для решения этой проблемы авторы фреймворка предлагают использовать @apply. Например в проектах, где большая часть HTML ориентирована на имена классов с компонентной областью видимости (что близко по концепции к методологии БЭМ), @apply широко используется. Но это подводит к следующему вопросу.

Доклады, мероприятия, конференции, сходки

Смотреть видео со звёздами веб-разработки, да ещё и не выходя из дома — это очень здорово! Но разве вам не хотелось бы увидеть их вживую и пообщаться с ними лично?  Мне бы очень этого хотелось! Почему? Попробую объяснить.

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

И если, например, в вашем городе ничего не намечается, а ехать куда-то далеко вам не хочется — ничего страшного. Даже в этом случае есть прекрасный выход. Мои коллеги с форума периодически проводят в своих городах сходки, мероприятия, где они собираются дружной компанией, сами готовят и делают доклады, обсуждают их и делятся своими навыками друг с другом. Причём, с каждой такой сходкой количество людей на них увеличивается, что, безусловно, говорит о пользе таких встреч.

Вопрос №3. Настройка веб-аналитики?

Почему это важно?

Я и говорю, и пишу о том, что новомодный SMM и всякие танцы вокруг новых медиа – это только 1% возможностей интернета. А веб-аналитика – вот, что является настоящим лицом профессионального интернета, который приносит компаниям реальные деньги и отбивает инвестиции. Счетчики покажут вам, что на ваш сайт зашла 1000 человек. Это хорошо или плохо?

Вы сможете понять это, только когда увидите, что 700 человек посмотрело более 2 страниц на вашем сайте, 500 из них зарегистрировалось или подписалось на рассылку, 300 человек посмотрело ваши контакты, тарифы и схему проезда, 200 из пришедших совершило сделку прямо на сайте. Все это и многое другое позволяет увидеть собственными глазами бесплатные (!) системы веб-аналитики Google Analytics и Яндекс.Метрика.

Подрядчик отвечает вам: «Да, конечно. Analytics и Яндекс.Метрика подключаются на все наши сайты. Какие целевые действия на сайте вам настроить?»

Подрядчики, которые так ведут разговор, достойны доверия. Вместе с ними определите так называемые «целевые действия пользователей» (например, пребывание на сайте более 30 сек, 2 минут, 10 минут, просмотр более 2 страниц в разделе «меню» или «наши услуги», клик на страницы «контакты», «схема проезда», «подробнее», процессы покупки – клики на странички «заказы», «подтверждение покупки», «подтверждение оплаты» и др.

Подрядчик говорит – да, это возможно. Будет стоить 2 часа нашего программиста. Платите 100 баксов.

Может быть и такое. В целом, можно заплатить и 100, и 200, и 1000 баксов, лишь бы сделали и вы в системе веб-аналитики видели результаты работы вашей платформы. Но я лично знаю, что настройка веб-аналитики и целей не занимает много времени (конечно, зависит от пряморукости людей, писавших ваш сайт). Однажды за простую настройку веб-аналитики (без целевых действий) знакомые программисты попросили с моих клиентов 100 зеленых. Тут я не выдержала, выгнала их из кабинета и настроила все сама. Платить стоит только за комплексную настройку систем!

Подрядчик говорит – нет, мы в компании не настраиваем сами. Давайте мы дадим вам телефон ребят, которые делают.

Стоит насторожиться, так как эта компания явно не привыкла делать 100% рабочие сайты. То есть, сайт будет работать (открываться, грузиться, показывать картинки итп.), но не факт, что он будет приносить вам клиентов и денег. Девиз таких программистов: «Странички показывает? Красиво смотрится? Картинки листаются? Ну и замечательно. Вот счет на оплату».

Вопрос №5. Вы могли сделать для нас a/b-тестирование целевых страниц?

Почему это важно?

Многие заказчики привыкли относиться к возможностям интернета как к оффлайн-возможностям: в интернете мы можем разметить модуль только 1 дизайна, биллборд у нашего магазина может висеть только 1 варианта итп. Страшно то, что многие разработчики точно также относятся к возможностям интернета. Дело в том, что интернет – многовариантное поле.

Главных страниц на сайте может быть 2-3 варианта! 50, 80 или 2 процентам ваших пользователей вы можете показывать вариант a, другим –вариант b. И мы можем посмотреть, какая главная страница (или любая другая важная для нас) наиболее понятна нашим пользователям. Мы не обязаны мириться с одним вариантом продающей странички, которую нам навязывает разработчик. «Давайте протестируем!» — вот слоган заказчика, для которого монетизация сайта в приоритете.

Подрядчик отвечает: «Конечно, это возможно. Потребуется забить дополнительное время наших специалистов в смету, но это окупится! Скажите, какие именно целевые страницы вы бы хотели протестировать»?

Да, тестирование – это дополнительные вложения в человеко-часы. Но подрядчик, который кинется с вами в этот эксперимент, может стать вашим партнером навечно. «С ним хоть в разведку» можно перефразировать «С ним хоть в ab-тест».

Подрядчик говорит: «Эээ…. ab-тестирование… я спрошу у наших ребят…»

Скорее всего, в этом нет ничего криминального, просто ранее разработчики не сталкивались с таким дотошным клиентом, как вы. Это будет для них увлекательным исследованием, тем более что в настройке ab-тестирования нет ничего сложного (снова же, это бесплатный сервис от Google). A/b-тест вызывает больше психологических преград, чем технических.

Подрядчик отвечает: «Эээ… а что такое ab-тестирование и целевые страницы?»

Эти ребята могут делать какие угодно красивые дизайны на хороших удобных движках. И, вполне возможно, если они вникнут в задачи вашей компании, они разберутся в системе a/b-тестирования и в том, что такое целевые действия и целевые страницы. Но нужно ли платить людям за то, что они учатся чему-то новому, благодаря вам? Возможно, нужно. Если по остальным пунктам разработчик идет вам на встречу, то разобраться для них не такая большая проблема.

Примеси

Что такое примеси?

Примеси — это общее название, используемое для описания того, что один объект должен скопировать все свойства другого объекта. В итоге примеси это не более чем продвинутый способ скопировать и вставить. «Все» известные препроцессоры имеют некое подобие примесей.

Глупое дублирование кода является глупым

Следуя синтаксису SCSS (Sass), примеси могут быть описаны и использованы следующим образом:

Что компилируется в:

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

Эта проблема не является специфичной для Sass, она также существует в LESS, и в Stylus, и в любом другом препроцессоре, который поддерживает эту возможность. Используя новый слой абстракции, разработчик не осознаёт, что он создаёт сильно дублирующийся код. Всегда сжимайте файлы CSS и JavaScript. Gzip очень хорошо сжимает дублирующиеся данные, так что эта проблема может быть несущественной на продакшене. Только учтите, что сгенерированный CSS-код будет тяжелее поддерживать в случае, если ваши будущие разработчики по каким-то причинам решат прекратить использование препроцессора и просто обновят сгенерированный CSS (может, у них не будет доступа к исходным файлам или не будет опыта работы с препроцессорами).

Признаки наплыва ботов

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

1. Самый главный триггер: увеличивается количество прямых заходов, переходов с рекомендательных сайтов (Дзен) и переходов с социальных сетей с мобильным юзерагентом. Боты очень любят атаковать страницы, результаты которых входят в ТОП-3 поисковой выдачи. Страницы с низкой посещаемостью их не интересуют и они их практически не посещают.

ДО БОТОВ: 

ПОСЛЕ БОТОВ:

2. Уменьшается количество отказов, но при этом уменьшается время на сайте и глубина просмотров.

ДО БОТОВ: 

ПОСЛЕ БОТОВ:

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

В самых запущенных случаях может быть так:

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

  • «Читают» совсем второстепенный текст, а не основной контент, главную мысль в тексте.
  • Постоянные рывки мышкой, движения вверх вниз, непонятные наворачивания кругов курсором вокруг какого-то элемента на странице
  • Быстрый скролл страницы. На такой скорости человек даже заголовки не успеет прочитать.
  • Долгие сессии (10-20 минут), но 99% времени от этих сессий — бездействие и судорожное перемещение курсора в рандомные област

5. В последнее время боты немного переориентируются и идут через поиск (не прямые заходы) по многим топовым запросам. Как мы уже писали выше, боты атакуют в основном страницы по самым конкурентным запросам, причем многие боты из поиска с высокими отказами идут с тех же самых IP-адресов, с которых идёт атака по прямым заходам

6. К прямым заходам добавляются переходы со странных сайтов, на которых, якобы, стоит бэклинк на ваш ресурс. При переходе на этот сайт ссылки на ваш сайт не обнаруживается

7. В основном боты селятся на сайтах с хорошей посещаемостью (от 500 до 1000 в сутки). Но бывают исключения и долбят ресурсы поменьше.

8. Подавляющая часть ботов идёт с IP-адресов сетей мобильных операторов Москвы или Московской области. Особой популярностью у ботоводов пользуется Metropolitan branch of OJSC MegaFon. Так же много ботов идёт с IP-сети, которая подписана как IPv4 address block not managed by the RIPE NCC. Еще один нюанс — у всех поголовно маленькое разрешение экрана (например, 375×667). Вот стандартный заход бота (конкретно здесь — с социальной сети ок.ру, где никогда не размещались ссылки на наш ресурс)

9. Количество ботов растёт планомерно. Увеличивается каждый день по чуть-чуть (10-50 заходов), но растёт. И растёт ежедневно. «Нормальным» показателем сейчас считается до 20% ботного трафика на сайте. Это, конечно, не норма, но, якобы, терпимо. А вот если доля паразитного трафика переваливает за 50%, то стоит начинать бить тревогу

10. Зачастую вместе с ботами растёт количество внешних ссылок с разных спамных и мутных ресурсов

Более высокая производительность

Написание классов Tailwind происходит быстрее, чем в CSS или CSS-in-JS. С использованием Tailwind верстка сводится к добавлению классов CSS к HTML-разметке. 

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

Рассмотрим это на примере. В обычном CSS у нас было бы:

/* Small (sm) */
@media (min-width: 640px) { /* ... */ }
 
/* Medium (md) */
@media (min-width: 768px) { /* ... */ }
 
/* Large (lg) */
@media (min-width: 1024px) { /* ... */ }
 
/* Extra Large (xl) */
@media (min-width: 1280px) { /* ... */ }

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

Теперь посмотрим на Tailwind:

<!-- Width of 16 by default, 32 on medium screens, and 48 on large screens -->
<img class="w-16 md:w-32 lg:w-48" src="...">

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

Что читать?

Чтение в жизни веб-мастера занимает далеко не последнее место и должно идти с ним по жизни. Ежедневное чтение полезной литературы и спецификаций, безусловно, окажет неоспоримую помощь верстальщику в его дороге к настоящему мастеру своего дела.

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

Стандарты веб-технологий

Как говорят умные и матёрые дядьки: «Лучшая литература — это спецификация». И я лично с ними полностью согласен. Спецификация — это последняя инстанция и главный авторитет, который описывает поведение и логику всех свойств, методов или элементов в зависимости от технологии. Можно сказать, что спецификация — это закон, которому должны следовать все браузеры без исключения. Если поведение описано в спецификации, каким бы странным оно ни казалось — то это фича, а не баг (и у этой фичи наверняка есть своя логика), а если в спецификации написано одно, а в браузерах получается другое — значит, косяк именно в браузерах, и нужно штурмовать их разработчиков баг-репортами.

Книги

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

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

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

«Какие книги посоветуете?»

Мне задавали этот вопрос настолько часто, что я даже решил придумать свой алгоритм выбора хороших книг. Со временем любая книга теряет свою актуальность (хотя бывают и исключения), поэтому приходится советовать что-то новое. Но, так как за последними новинками я не поспеваю, то и советчик из меня, мягко говоря, никакой. Поэтому представим, что нам нужна актуальная книжка по CSS, и последуем моему алгоритму:

  • Заходим на ozon.ru.
  • Вбиваем в поиске «CSS3», жмём кнопку «Найти» и попадаем в книжный раздел по CSS3.
  • В горизонтальном списке ссылок нажимаем «по новинкам».
  • Идём сверху вниз, отсеивая книги по другим технологиям (да, такие попадаются), открываем и читаем информацию и комментарии по каждой книге. А также советуемся со старшими товарищами (можно даже на форумах), забрасываем понравившуюся литературу в корзину, чтобы в дальнейшем сделать заказ.      

Стоит заметить, что ozon.ru я выбрал ради примера. Само собой, вы можете выбрать любой хороший магазин на ваш взгляд. Главное — учесть мой простой алгоритм.

Сайты и блоги

Спецификации и книжки — это, конечно же, здорово, но не меньшее внимание стоит уделять сайтам и блогам. Именно на них, как правило, появляется самая новая и актуальная информация

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

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

От себя же, пожалуй, посоветую некоторые из качественных веб-сайтов по нашим любимым технологиям:

  • smashingmagazine.com;
  • netmagazine.com;
  • impressivewebs.com;
  • lea.verou.me;
  • css-tricks.com.  

Из русскоязычных сайтов — htmlforum.io, web-standards.ru, habrahabr.ru, ну и, конечно же, не рекламы ради, а пользы для — css-live.ru:)

Гайд для веб-дизайнеров по подготовке макетов для быстрой верстки

В принципе, многое описано в статье «Как стать крутым веб-дизайнером», но здесь я приведу основные пункты именно по подготовке макетов к верстке и правильной организации работы, которые, соответственно, ускорят работу в целом:

  1. Не увеличивайте фотографию больше ее оригинального размера — в верстке такое фото будет некачественным;
  2. Не масштабируйте графику непропорционально — такой дефект версткой точно не исправить ;-);
  3. Не применяйте режимы наложения слоев, отличные от обычного (Normal) — в верстке НЕВОЗМОЖНО воспроизвести какие-либо режимы наложения, как в графическом редакторе;
  4. Старайтесь не применять фильтры на изображения, которые должны иметь несколько состояний (обычно и при наведении, например). Все наложения, изменения — только посредством наложения нового слоя. Все должно быть легко воспроизведено в HTML верстке. К ретуши и подготовке фото это не относится;
  5. Не масштабируйте фотографию до конвертации в смарт объект — верстальщик сам определит размер изображения в Responsive верстке, сохраняйте оригинал смарт-объекте;
  6. Обрезайте фотографию только посредством обтравочной маски для фигуры, оригинал фотографии, как и в предыдущем пункте, должен быть сохранен в смарт объект — не забывайте: «Каждый раз, загружая изображение для сайта и скругляя его вручную в фотошопе, где-то в мире плачет один котенок…»;
  7. Если вы рисуете иконки в Photoshop, не растрируйте их в уменьшенном размере. Не забывайте, что макету еще предстоит этап верстки и все иконки необходимо будет векторизовать. Оригинальные смарт объекты с иконками должны быть достаточно крупными для качественной трассировки;
  8. В идеале, у вас должны быть все плоские иконки и графика в формате SVG, в отдельной папке. Если вы ленивый дизайнер — предусмотрите возможнсть качественной конвертации или экспорта иконок в SVG;
  9. Всегда создавайте отдельную папку со всеми используемыми шрифтами в формате TTF или OTF. Иконочные шрифты также должны быть размещены в этой папке;
  10. Создавайте макеты 1 в 1 (72 пикс. на дюйм). При 100% отображении макеты должны быть в таком же масштабе, в котором предполагается результат HTML верстки;
  11. Обязательно используйте в работе какую-либо систему сеток. Можно разработать самому, но я рекомендую использовать систему сеток Bootstrap. Ширину контента можно кастомиировать от оригинальной ширины Bootstrap сетки, для этого можно использовать плагины для создания сеток в случае, если вы пользователь Photoshop;

Заключение

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

Моё отношение к этим препроцессорам такое же как и к CoffeeScript: отличный синтаксис и возможности, но слишком много накладных расходов для не такой реальной выгоды. Синтаксис в JavaScript это не проблема для меня, точно так же как и в CSS (и в большинстве языков). Вам всё равно необходимо понимать, как работает блочная модель, специфичность, каскадирование, селекторы, обтекание и так далее. Вы всего лишь добавляете абстрактную прослойку между собой и интерпретируемыми таблицами стилей, создаёте ещё один барьер для будущих разработчиков и увеличиваете шанс появления чрезмерного проектирования. Разметка может стать проще (с меньшим количеством классов/идентификаторов), но она приходит с большим количество недостатков.

Для меня главной проблемой являются разработчики, которые пишут на CSS без знаний необходимых для построения легко сопровождаемых масштабируемых структур. Таблицу стилей полную примесей, операций сравнения, циклов, переменных, функций будет так же тяжело поддерживать, как и раздутую вручную созданную таблицу стилей, а может даже и сложнее. Разработчики унаследовали желание быть «умными», а это обычно как красный флаг.

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

Я использовал подход OOCSS на большинстве моих последних проектов и, скорее всего, продолжу использовать его, пока не найду лучшего. Для тех вещей, которыми я занимаюсь, важнее иметь возможность быстро верстать и вносить обновления на этапе разработки, нежели поддерживать/развивать проект в течение многих месяцев/лет. Мне кажется маловероятным, что придётся делать значительные изменения в дизайне без правки разметки. На моих последних 100 проектах это случилось 2-3 раза. CSS zen garden — классный концепт, но не очень практичный. Такая возможность, как крутая штука, но обычно дизайнеры предоставляют мне цветовую палитру, которую надо использовать на всём сайте, и я не так часто дублирую одни и те же значения. Если значения дублируются, я везде могу их поменять, используя «поиск и замену» внутри всех CSS-файлов и закончить на этом. Используя функцию генерирующую цвет (где вы понятия не имеете, какое значение получится) вы не сможете так просто сделать поиск и замену, поскольку вы не знаете, какое значение ищете в исходном коде (я предпочитаю просто использовать Color Picker).

Я знаю, что мой опыт сильно отличается от опыта большинства людей, поэтому мой подход тоже отличается. Если мне когда-нибудь придётся использовать любой из этих инструментов, это не будет для меня проблемой. Я только не думаю, что они сэкономят мне так много времени, что это перевесит количество недостатков. Выбирайте инструменты основываясь на ваших проектах и рабочем процессе. И не стоит отказываться использовать препроцессоры из-за пары проблем, которые я обозначил. Для многих задач препроцессоры будут отличным способом сгенерировать таблицы стилей. Думайте о недостатках и об ответственности.

P.S. Я люблю CSS, для меня это одна из самых стоящих задач в разработке сайтов, это как собирать сложный пазл…

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: