Введение в css

CSS — текст

Помимо шрифта, CSS-команды могут настраивать многие другие свойства текста.

Межстрочный интервал

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

Это увеличит размер строки на 50%, и, поскольку размер текста не изменится, межстрочный интервал будет увеличен. Числа, относительные единицы (такие как em) и проценты могут использоваться в качестве значения высоты строки.

Межбуквенный и межстрочный интервал

Межбуквенный интервал задается letter-spacing, а межсловный интервал — word-spacing:

В приведенном выше примере указывается расстояние между буквами заголовков h1 — 10 пикселей и расстояние между словами для заголовков h2 — 2ex.

Дополнительные текстовые эффекты

Текст может быть изменен с помощью text-decoration и одного из следующих значений:

  • underline: обыкновенное подчеркивание текста;
  • overline: подчеркивание над текстом;
  • line-through: линия проходит через середину текста;
  • none: убирает подчеркивание текста, если указано;
  • blink: мигающий текст (поддерживается только Firefox и Opera).

Отступ для первой строки абзаца

Для отступа текста используется text-indent и требуемое значение. Например:

будет отступать одну букву для первой строки каждого абзаца.

Горизонтальное выравнивание

Положение текста может быть скорректировано с помощью text-align, и одним из значений:

  • left: левое выравнивание — значение по умолчанию
  • right: выровнять текст по правому краю
  • center: центрирование
  • justify: двустороннее выравнивание

Вертикальное выравнивание

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

  • sub: Как и в HTML-элементе sub, буквы записываются в виде нижнего индекса
  • sup: текст отображается в виде верхнего индекса
  • baseline: нижний край изображения расположен на уровне базовой линии
  • middle: середина изображения совпадает с серединой текстовой строки
  • text-top: верхний край элемента совпадает с верхним краем строки
  • text-bottom: нижний край элемента находится на одном уровне с нижним краем линии
  • top: верхний край элемента совпадает с верхним краем строки, размер которого изменяется, чтобы включить элемент
  • bottom: аналогично top, но выравнивание по нижней линии.

Цвет текста

С помощью color вы можете указать желаемый Вами цвет текста. Для задания конкретного цвета текста можно использовать допустимые названия цветов, RGB или HEX значений:

Более подробно о цветах вы можете прочитать в статье HTML цвета.

Преобразование в строчные или прописные буквы

Вы можете указать использование строчных или прописных букв с помощью text-transform и одного из следующих слов:

  • capitalize: первая буква каждого слова будет заглавной. Часто используемый стиль в заголовках.
  • uppercase: все буквы становятся заглавными.
  • lowercase: все буквы превращаются в маленькие.
  • none: не меняется вид буквы маленькие-большие

Регулировка пустого пространства

С помощью white-space вы можете изменить способ, которым браузер показывает пустые поля:

  • normal: по умолчанию, браузер сокращает ряд пробелов и строк до одного пробела / строки
  • pre: сохраняет пустые пробелы и строки
  • nowrap: серия пробелов будет обрезана до одного пробела, а текст будет продолжаться в одной строке, пока не будет вставлен символ перевода строки.

Часть 4. Рекомендации

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

Старайтесь использовать только внешние подключаемые CSS файлы. Внутреннюю стилизацию применяйте только если это необходимо для корректного функционирования веб-сайта;
Старайтесь стилизовать только классы. Не стилизуйте идентификаторы (задаются через id=»решетку» и пишутся через #решетку). Старайтесь меньше стилизовать теги без классов. Например, если вы стилизуете тег h3, а в дальнейшем SEO специалист решит, что заголовок здесь не уместен, обычный div должен иметь такие-же свойства с классом заголовка и отображаться также. Как вариант можно сделать дубликаты HTML тегов в классы, например, .h1, .h2, .h3, .footer, .header, .aside и стилизовать их соответствующим образом;
Старайтесь стилизовать элементы максимально автономно, сокращайте цепочку каскада до одного блока, чтобы было меньше зависимостей от родительских элементов. Это необходимо для максимально эффективного повторного использования блоков на странице и их модификации в других местах верстки. Но без фанатизма. Не стоит задавать отдельные классы каждому тегу в блоке, если не предполагается его автономное использование. Если вы перенесете блок в другое место страницы, он должен отображаться также и не зависеть от родителя. В этом вам поможет использование какой-либо методологии именования классов

Не важно, будет это БЭМ, методология, либо разработанная на основе вашего личного опыта или простые правила, предложенные мной — это лучше, чем называть классы как попало и строить нелогичные и длинные цепочки классов;
Старайтесь называть классы тегов в зависимости от того, какую функцию выполняет блок, а не от того, какое в нем будет содержание. Например, если у вас есть секция с отзывами в виде карусели, не стоит называть селекторы, используя слова reviews, otzivy и т.д

Лучше назвать carousel-once, если планируется выводит по одному пункту карусели на странице. В дальнейшем, возможно вы будете использовать эту карусель не только для оформления отзывов, а задействуете этот код например, для вывода списка коллег компании. В таком случае наименование класса reviews будет несколько неуместным;
Используйте CSS препроцессоры, в этом нет ничего сложного. Мой выбор пал на препроцессор Sass уже довольно давно и я его рекомендую к использованию. У нас есть неплохой урок, в котором я рассказываю как легко пользоваться препроцессором и как он упрощает жизнь: Sass для самых маленьких — подробное руководство;
Используйте сброс стандартных стилей браузера или нормализацию, которая приводит стандартные стили к общему для всех браузеров знаменателю. Я использую в своих проектах Normalize.css, который входит в состав CSS фреймворка Bootstrap;
Когда почувствуете, что выполняете слишком много однообразной работы в процессе верстки — переходите к использованию какого-либо CSS фреймворка или разработайте свой с наиболее часто используемыми элементами, это ускорит вашу работу. Я использую в работе только сетку Bootstrap без стилистического оформления кнопок, панелей и прочих элементов. Этого вполне достаточно для эффективной работы. Хорошая адаптивность Bootstrap сетки по умолчанию также радует;
Самостоятельно экспериментируйте со свойствами. Открывайте CSS справочник и пробуйте. Только так можно наработать опыт, запомнить какое свойство что делает и довести написание стилей документа до автоматизма.

Другие уроки по теме «HTML и CSS»

  • Создание потрясающей галереи на HTML, CSS и JavaScript | Материалы урока
  • Создание крутой 3D сцены (CSS + HTML) с эффектным дизайном | Материалы урока
  • HTML верстка «ленивого» слайдера | Верстка макета Figma. Часть 6 | Создание коммерческого сайта от А до Я. Урок 21
  • Карточки эквивалентной высоты, анимация | HTML верстка макета Figma. Часть 5 | Создание коммерческого сайта от А до Я. Урок 20
  • Верстка модального окна Micromodal.js | HTML верстка макета Figma. Часть 4 | Коммерческий сайт от А до Я. Урок 19
  • Анимированный слайдер на Swiper.js | HTML верстка макета Figma. Часть 3 | Коммерческий сайт от А до Я. Урок 18

ШАГ 2: изменяем цвета

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

Мы начнем со стилей, встроенных в HTML файл. Позже, мы положим
CSS стили и HTML разметку в разные файлы. Раздельное хранение
хорошо тем, что легче использовать те же самые стили для множества
HTML файлов: Вам нужно написать CSS стили только один раз. Но на
этом шаге мы оставим все в одном файле.

Нам нужно добавить элемент <style> к HTML файлу.
Определения стилей будут внутри этого тэга. Возвращаемся к
редактору и добавляем следующие пять строчек в заголовок HTML кода
между тэгами <head> и </head>. Строки, которые надо
добавить выделены красным (с 5-й по 9-ю).

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <title>My first styled page</title>
  <style type="text/css">
  body {
    color: purple;
    background-color: #d8da3d }
  </style>
</head>

<body>

Первая строка говорит браузеру о том, что это таблица стилей и
что она написана на CSS (“text/css”). Вторая строка говорит, что мы
применяем стиль к элементу “body”. Третья устанавливает цвет текста
в пурпурный, а следующая устанавливает цвет фона в желто-зеленый
оттенок.

Таблицы стилей CSS создаются согласно правилам. Каждое
правило состоит из трех частей:

  1. селектор (в нашем примере: “body”), которые
    говорит о том, к какой части документа применить правило;

  2. свойство (в нашем примере свойствами являются
    ‘color’ и ‘background-color’), которое указывает что именно мы
    устанавливаем у данного элемента, выбранного селектором;

  3. и значение (‘purple’ и ‘#d8da3d’), которое
    устанавливает значение атрибута.

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

body { color: purple }
body { background-color: #d8da3d }

но поскольку оба правила относятся к body мы записали “body”
один раз и поместили свойства и значения вместе. Для получения
большей информации о селекторах смотрите главу 2 из Lie & Bos.

Фон элемента body так же является фоном целого документа. Мы
явно не назначили другим элементам (p, li, address…) фона, так что
по умолчанию у них его нет (или он прозрачный). Свойство ‘color’
устанавливает цвет текста элемента body, но все остальные элементы
внутри body наследуют этот цвет, пока для них не задан другой в
виде другого правила. (Мы добавим другие цвета позже.)

Теперь сохраните этот файл (используйте команду “Сохранить” или
“Save” из файлового меню) и переключитесь обратно в браузер. Если
вы нажмете кнопку “обновить” , то изображение сменится со “скучной”
страницы на разукрашенную (но все еще однообразную) страницу. Кроме
ссылок сверху, весь текст должен быть пурпурный на желто-зеленом
фоне.

Теперь браузер показывает страницу к которой мы добавили цвет.

Структура сайта

Свойства CSS float

Float — это свойство, которое определяет, по какой стороне будет выравниваться элемент: по правой или по левой. Например, чтобы выровнять элемент по левому краю, подписываем CSS-свойство:

float: left;

Этот способ удобно использовать, например, для обтекания картинок текстом, но некоторое время назад с помощью float верстали практически все. Например, это был распространенный метод верстки меню. Чтобы пункты меню образовывали линию, каждому элементу присваивался float: left или float: right, чтобы они выстраивались друг за другом:


Выстраивание элементов в линию с помощью float: left

flexbox

Flexbox пришел на смену float в 2011 году. Его преимущество заключалось в том, что блоки стали более гибкими. Элементы сжимались и растягивались, заполняя пространство, их без проблем можно было выровнять по вертикали и горизонтали. Например, чтобы выстроить элементы меню по центру, достаточно прописать в коде:

justify-content: center;


Расположение элементов по центру с помощью CSS flexbox

Один элемент можно растянуть так, чтобы блоки заняли всю ширину страницы. Для этого для блока child (селектор класса) прописывается CSS-свойство:

flex-grow: 1;


Растягивание элементов на ширину страницы с помощью CSS flexbox

Посмотреть все возможности flexbox можно в интерактивной шпаргалке, с помощью которой можно выбрать необходимое значение и скопировать фрагмент кода.

grid

Grid появился в … году, он помогал решать многие задачи, с которыми сталкивались разработчики на протяжении долгого времени. Задачи решались методами, которые изначально для этого не предназначались. Главным нововведением стало расположение элементов относительно нескольких осей — по вертикали и по горизонтали. Растянуть элементы не несколько строк или несколько столбцов можно, присвоив каждому значения a, b, c, d и так далее. Затем прописываем в CSS-коде:

grid-template-areas: “a b c d d”“f f g d d”


В разметке значение «a» — это элемент 1, «b» — элемент 2, «c» — это элемент 3, а «d» повторяется дважды, так как занимает две колонки.

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

Курс 

Frontend-разработчик

Научитесь разрабатывать интерактивные веб-сайты и приложения на JavaScript и HTML и получите востребованную IT-профессию. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

CSS3

CSS3 — это новое поколение CSS, которое до сих пор находится в доработке. С его помощью можно анимировать элементы без использования JavaScript, создавать тени и градиенты, скруглять углы блоков.

Например, для скругления элемента header используется свойство border-radius:

header {background-color:#7695FE;border: thin #336699 solid;padding: 10px;margin: 10px;text-align: center;border-radius: 25px;}

Проблема заключается в том, что не все браузеры одновременно начинают поддерживать нововведения CSS3, поэтому в браузере, который поддерживает свойство border-radius, кнопка будет выглядеть так:

А другой может проигнорировать это свойство:

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

Что такое CSS?¶

Каскадные таблицы стилей (Cascading Style Sheets, CSS) — это стандарт, определяющий представление данных в браузере. Если HTML предоставляет информацию о структуре документа, то таблицы стилей сообщают как он должен выглядеть.

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

Таблица стилей — это совокупность стилей, применимых к гипертекстовому документу.

Каскадирование — это порядок применения различных стилей к веб-странице. Браузер, поддерживающий таблицы стилей, будет последовательно применять их в соответствии с приоритетом: сначала связанные, затем внедренные и, наконец, встроенные стили. Другой аспект каскадирования — наследование (inheritance), — означает, что если не указано иное, то конкретный стиль будет применен ко всем дочерним элементами гипертекстового документа. Например, если вы примените определенный цвет текста в теге <div>, то все теги внутри этого блока будут отображаться этим же цветом.

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

Morphing Input Field Button by

Morphing Input Field Button is a CSS input template with a gorgeous and fun look, one of those designs made by the author Caleb Sylvest.

With this input form template, the color burnt orange is chosen to fulfill the background. Don’t be worried that your texts will not be obviously seen as they are colored white in large font size. On top of that, the textbox’s location is right in the center of the template, so it can reduce distractions by attracting customers. You don’t see the textbox? Please click on the Tell me more button to have it show up!

Let’s install this effect and make your site more enjoyable!

Как поднять приоритет стилей?

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

Сделать это можно двумя способами:

  1. 1.Можно воспользоваться правилом !important. Выглядит это следующим образом:

    Данное правило дает браузеру понять, что помеченные стили имеют приоритет выше, чем остальные.

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

Давайте рассмотрим это на примере. Возьмем тот же блок site-branding и при помощи инспектора кода видим, что он находится в теге <header>, который имеет идентификатор masthead.

Копируем этот идентификатор, и перед названием класса ставим решетку, вставляем название идентификатора и ставим пробел:

PHP

#masthead . site-branding{
}

1
2
3

#masthead . site-branding{
 
}

Данное css-свойство будет работать для блока с классом site-branding, находящегося внутри блока с идентификатором masthead.

Задавая вот такие длинные селекторы, мы тем самым поднимаем приоритет наших стилей.

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

PHP

body #masthead . site-branding{
background:red;
}

1
2
3

body#masthead . site-branding{

backgroundred;

}

Указанные здесь CSS стили должны будут работать для всех блоков с классом site-branding, которые находятся внутри блока с идентификатором masthead, которые, в свою очередь, находятся внутри тега <body>.

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

Например:

PHP

body #masthead .site-branding, #masthead, .shadow-4 {
font-size:40px;
}

1
2
3

body#masthead .site-branding, #masthead, .shadow-4 {

font-size40px;

}

Подведем небольшой итог. Если какое-то css-свойство у вас не срабатывает и перекрывается стилями темы, то вы можете поднять его приоритет, либо дописав ему правило important, либо увеличив селектор для этого блока. В отдельных случаях приходится делать и то и другое.

Так же не забывайте о том, что CSS – это каскадная таблица стилей, то есть в первую очередь будут применяться те стили, которые написаны в конце.

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

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

Все это довольно обширная тема и более подробно об этом я как-нибудь расскажу в одной из отдельных статей.

Разбор файла style.css

body обращается к <body> в index.html, и задает ему серый задний фон (background-color: gray;). Здесь background-color называется CSS-свойством, а gray — это значение CSS-свойства.

Аналогично #header обращается к id=»header», а .h1 обращается к class=»h1″. То есть через # обращаемся к id, а через точку обращаемся к class.

Здесь body, #header и .h1 называются CSS-селекторами.

Вообще, в id и class можно задавать любые произвольные значения, хоть id=»abcdefg». Но желательно, чтобы их значения отображали целевое назначение html-элемента (тега).

Свойства CSS пишутся на английском: font-size — размер шрифта, color — цвет, text-align — выровнять текст и т.д.

Input text test by

Input text test is a CSS input template with a minimalist look, one of those designs created by the author Martino. This look is suitable for any online store, especially those in technology and web development.

About the input form template, you can see the background of it is covered by the color black. Right in the center is My Name box. This is where your customers can leave their names on. Besides, the blue border of the textbox is located under to make the textbox more attractive.

The layout of the template is designed such that it can help you eliminate causes that lead to distractions and make your website more professional so you should try it!

Методология CSS

Методология — это стандарт написания CSS таким образом, чтобы его можно было поддерживать и читать другим членам команды или сторонним разработчикам. Другими словами, это правила, которые будут понятны человеку со стороны, чтобы он мог разобраться в коде без автора и внести правки. Рекомендации по написанию и называются методологиями CSS.

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

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

Например, в любом проекте есть значения:

  • padding — внутренние отступы со всех сторон элемента;
  • margin — внешние отступы со всех сторон элемента.

Одинаковые значения { padding: 5px; } и { margin: 5px; } можно унифицировать в $space-1: 5px, а значения { padding: 10px; } и { margin: 10px; } преобразовать в универсальное значение $space-2: 10px:

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

CSS-in-JS. Эта методология предлагает вместо подключения CSS-файлов подключить к HTML один JS-модуль, в котором можно будет использовать преимущества языка JavaScript. Преимущество такого подхода — это более мощный CSS, так как можно использовать абсолютно все его функции без ограничений. Например, выбранные цвета из дизайн-проекта можно осветлять или затемнять с помощью кода JS:

import color from ‘color’const red = Color (‘red’)const styles = {color: red.lighten(10).toHex()}

Еще одно преимущество CSS-in-JS — это сокращение объема кода и числа файлов. Например, в этой методологии точно не придется создавать отдельный CSS-файл для одного маленького компонента, в котором прописано 2–3 правила. А в других методологиях таких файлов бывает много.

Методология CSS-in-JS в первую очередь создана для удобства разработчиков и повышения качества DX (Developer Experience), который, в свою очередь, повлияет и на удобство пользователей — UX (User Experience). А эти явления действительно связаны напрямую, так как чем комфортнее работать разработчику — без багов и костылей, — тем более качественным получается функционал интерфейса.

Курс

Frontend-разработчик

Изучите HTML, CSS и Javascript, чтобы получить перспективную и творческую IT-профессию.

  • 6 месяцев обучения;
  • вебинары в прямом эфире с разбором кода;
  • тренажеры для отработки знания кода;
  • сайт, слайдер и веб-приложение в портфолио.

Узнать больше

 Промокод BLOG +5% скидки

Вычисленные стили: getComputedStyle

Итак, изменить стиль очень просто. Но как его прочитать?

Например, мы хотим знать размер, отступы, цвет элемента. Как это сделать?

Свойство оперирует только значением атрибута , без учёта CSS-каскада.

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

Например, здесь не может видеть отступы:

…Но что, если нам нужно, скажем, увеличить отступ на ? Для начала нужно его текущее значение получить.

Для этого есть метод: .

Синтаксис:

element
Элемент, значения для которого нужно получить
pseudo
Указывается, если нужен стиль псевдоэлемента, например . Пустая строка или отсутствие аргумента означают сам элемент.

Результат вызова – объект со стилями, похожий на , но с учётом всех CSS-классов.

Например:

Вычисленное (computed) и окончательное (resolved) значения

Есть две концепции в :

  1. Вычисленное (computed) значение – это то, которое получено после применения всех CSS-правил и CSS-наследования. Например, или .
  2. Окончательное () значение – непосредственно применяемое к элементу. Значения или являются относительными. Браузер берёт вычисленное значение и делает все единицы измерения фиксированными и абсолютными, например, или . Для геометрических свойств разрешённые значения могут иметь плавающую точку, например, .

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

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

требует полное свойство!

Для правильного получения значения нужно указать точное свойство. Например: , , . При обращении к сокращённому: , , – правильный результат не гарантируется.

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

Есть и другие несоответствия. Например, некоторые браузеры (Chrome) отображают в документе ниже, а некоторые (Firefox) – нет:

Стили, применяемые к посещённым ссылкам, скрываются!

Посещённые ссылки могут быть окрашены с помощью псевдокласса .

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

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

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

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

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

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