HTML/CSS Crash Course

CSS

2

План:

  1. DOM

  2. Використання кольорів

  3. Розміри та відступи

  4. Позиціонування

  5. Псевдоелементи та псевдокласи

  6. Адаптивний та респонсивний дизайн 

  7. CSS анімація

DOM

Що таке DOM?

DOM (Document Object Model) — основний інтсрумент для роботи і динамічної зміни на сторінці, що використовується для XML/HTML-документів.

 

Стилі DOM елементів та їх перевірка в браузері

  • display

  • width, height

  • position, float

  • padding, margin, border

  • color, background

  • font

  • box-sizing

  • transform, z-index

  • transition, animation

 

Використання кольорів

 

Робота з кольором

RGB

HEX

HSL

Робота з кольором: використання

/* RGB */
.section-0 {
  backgroud-color: rgb(0, 0, 0);
  color: rgb(255, 255, 255);
}

/* RGBA (with opacity) */
.section-1 {
  backgroud-color: rgb(0, 0, 0, 0.8);
  color: rgb(255, 255, 255);
}

/* HEX */
.section-2 {
  backgroud-color: #000;
  color: #fff;
}

/* HEX */
.section-2 {
  backgroud-color: hsl(0, 100%, 0%);
  color: hsl(0, 100%, 100%);
}

Робота з кольором: використання

.button-rgb {
  backgroud: rgb(0, 0, 0);
  color: rgb(255, 255, 255);
}

.button-hex {
  backgroud-color: #000;
  color: #fff;
}

.button-hsl {
  backgroud-color: hsl(0, 100%, 0%);
  color: hsl(0, 100%, 100%);
}

button {
  padding: 10px 25px;
}

Button RGB

<button class="button-rgb">Button RGB</button>
<button class="button-hex">Button HEX</button>
<button class="button-hsl">Button HSL</button>

Button HEX

Button HSL

Розміри та відступи

Відображення і розміри елементів

Значення для властивості display:

block, inline, inline-block,

table, flex, grid

 

Розміри:

height, width

 

Трансформування з допомогою transform:

translate(), scale(), rotate()

 

width

height

Відображення і розміри елементів

width

height

<body>
  <div class="w-img">
     <img src="/img/sleepy-dog.jpg"/>
  </div>
</body>
body {
  background: rgb(214, 168, 131);
}

img {
  display: inline-block;
  height: 500px;
  width: 500px;
  transform: rotate(-5deg);  
}

Відступи

margin: 40px 40px

padding-top

padding-bottom

padding-right

padding-left

margin-top

margin-bottom

margin-right

margin-left

padding: 30px 30px

border: 4px solid #000

Позиціонування

Позиціонування

Позиціонування:

relative, absolute, fixed, static

 

Значення:

top, left, bottom, right

X, Y (0, 0)

Позиціонування: absolute

X, Y (0, 0)

<body>
  <div class="w-img">
     <img src="/img/dogos.jpg"/>
  </div>
</body>
body {
  position: relative;
}

.w-img {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Позиціонування: absolute

<div class="user">
  <div class="status online"></div>
  Aragorn Strider
</div>
<div class="user">
  <div class="status offline"></div>
  Legolas
</div>
.user {
  position: relative;
  background: silver;
}

.status {
  position: absolute;
  top: 3px;
  right: 3px;
  width: 3px;
  height: 3px;
  border-radius: 50%;
}

.status.online { background: green; }
.status.offline { background: gray; }

Aragorn Strider

Legolas

Позиціонування: fixed

X, Y (0, 0)

<body>
  <nav>
    <ul>
      <li>About</li>
      <li>Contacts</li>
    </ul>
  </nav>
</body>
body {
  position: relative;
}

nav {
  position: fixed;
  top: 0;
  right: 0;
  width: 100%;
}

About      Contacts   

Flexbox

CSS Flexible Box Layout

Властивості flexbox

container

items

.container {
  display: flex; /* or inline-flex */
  flex-wrap: wrap; /* or no-wrap*/
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
</div>

1

2

3

4

5

6

Властивості flexbox: flex-direction

.container {
  display: flex;
  flex-wrap: wrap;
  
  /* | row-reverse
   * | column
   * | column-reverse */
  flex-direction: row;
}

1

2

3

4

5

6

Властивості flexbox: flex-direction

.container {
  display: flex;
  flex-wrap: wrap;
  
  /* | row
   * | column
   * | column-reverse */
  flex-direction: row-reverse;
}

3

2

1

6

5

4

Властивості flexbox: flex-direction

.container {
  display: flex;
  flex-wrap: wrap;
  
  /* | row-reverse
   * | column
   * | column-reverse */
  flex-direction: column;
}

1

2

3

4

Властивості flexbox: justify-content

.container {
  display: flex;
  flex-wrap: wrap;
  
  /* | flex-start 
   * | flex-end
   * | center 
   * | space-between 
   * | space-around 
   * | space-evenly 
   * | start | end 
   * | left | right ...
   *  + safe | unsafe;
   * */
  justify-content: flex-start;
}

1

2

3

1

2

3

1

2

3

flex-start

flex-end

center

Властивості flexbox: align-items

.container {
  display: flex;
  flex-wrap: wrap;
  
  /* | stretch 
   * | flex-start 
   * | flex-end 
   * | center | baseline 
   * | first baseline 
   * | last baseline 
   * | start | end 
   * | self-start | self-end 
   * + ... safe | unsafe;
   * */
  align-items: flex-start;
}

1

2

3

1

2

3

flex-start

stretch

center

1

2

3

Властивості flexbox: align-self

.container {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
}

.item:nth-child(2) {
    
  /* | stretch 
   * | flex-start 
   * | flex-end 
   * | center | baseline 
   * | first baseline 
   * | last baseline 
   * | start | end 
   * | self-start | self-end 
   * + ... safe | unsafe;
   * */
  align-self: flex-end;
}

1

2

3

Властивості flexbox: flex-grow

.container {
  display: flex;
  flex-wrap: wrap;
}

.item {
  flex-grow: 1;
}

1

2

3

4

5

Псевдоелементи та псевдокласи

before та after

псевдоелементи

Приклад із відображенням статусу

<div class="user">
  <div class="status online"></div>
  Aragorn Strider
</div>
<div class="user">
  <div class="status offline"></div>
  Legolas
</div>
.user {
  position: relative;
  padding: 10px 30px;
  background: #d6d6d6;
}

.status {
  position: absolute;
  top: 3px;
  right: 3px;
  width: 3px;
  height: 3px;
  border-radius: 50%;
}

.status.online { background: green; }
.status.offline { background: gray; }

Aragorn Strider

Legolas

З використанням псевдоелементів: before

<div class="user online">
  Aragorn Strider
</div>
<div class="user offline">
  Legolas
</div>
.user {
  position: relative;
  padding: 10px 30px;
  background: #d6d6d6;
}

.user::before {
  position: absolute;
  content: '';
  top: -5px;
  right: -5px;
  width: 20px;
  height: 20px;
  border-radius: 20px;
  background: #8bc34a;
}

.user.offline::before { background: gray; }

Aragorn Strider

Legolas

З використанням псевдоелементів: after

<div class="user online">
  Aragorn Strider
</div>
<div class="user offline">
  Legolas
</div>
.user {
  position: relative;
  padding: 10px 30px;
  background: #d6d6d6;
}

.user::after {
  position: absolute;
  content: '';
  top: -5px;
  right: -5px;
  width: 20px;
  height: 20px;
  border-radius: 20px;
  background: #8bc34a;
}

.user.offline::after { background: gray; }

Aragorn Strider

Legolas

З використанням псевдоелементів: before та after

<div class="user online">
  Aragorn Strider
</div>
<div class="user offline">
  Legolas
</div>
.user {
  position: relative;
  padding: 10px 30px;
  background: #d6d6d6;
}

.user::before {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 6px;
  background: #8bc34a;
}

.user.offline::before { background: gray; }

.user::after {
  position: absolute;
  content: '';
  top: -5px;
  right: -5px;
  width: 20px;
  height: 20px;
  border-radius: 20px;
  background: #8bc34a;
}

.user.offline::after { background: gray; }

Aragorn Strider

Legolas

З використанням псевдоелементів: before та after

<div class="pet">
  <img src="/images/felix.png" alt="Felix"/>
  <div class="name">
    Felix
  </div>
</div>
.pet {
  position: relative;
  padding: 10px 30px;
  background: #d6d6d6;
}

.pet::before {
  content: '❤️';
  position: absolute;
  top: -13px;
  right: -13px;
  font-size: 30px;
}

Felix

Псевдокласи

:hover :nth-child :checked та інші 

Псевдоклас: hover та active

<button class="subscribe">
  Subscribe
</button>
.subscribe {
  padding: 10px 20px;
  background: #000;
  color: #fff;
}

/* on hover effect */
.subscribe:hover {
  background: #d6a883;
}

/* when element is clicked/ ctivated */
.subscribe:active {
  background: #b37a4b;
  border: 1px solid #333;
}

Subscribe

Subscribe

зміна стилів при наведенні на елемент

Subscribe

зміна стилів при натисканні на елемент

Псевдоклас: checked

<form>
  <div>   
    <input type="radio" name="cat" value="cats">
    <label for="cat">Cats</label>
  </div> 
  <div>   
    <input type="radio" name="dog" value="dog">
    <label for="dog">Dogs</label>
  </div>  
  <button type="submit">Vote</button>
</form>
input:checked + label {
  color: #d6a883;
}

Vote

Cats

Dogs

Псевдоклас: focus

<form>
  <div>   
    <input type="text" name="name">
  </div> 
  <div>   
    <input type="text" name="secret">
  </div>  
  <button type="submit">Save</button>
</form>
input:focus {
  border: 2px solid #d6a883;
}

Save

Tony Stark

Iron...

Псевдоклас: disabled

<form>
  <input type="text" name="email" disabled
         value="stark@gmail.com">
  <br />
  <input type="text" name="name">
  <br />
  <input type="text" name="secret">
  <br />
  <button type="submit">Save</button>
</form>
input[type="email"]:disabled {
  color: #888888;
  border: #888888;
  pointer-events: none;
}

Save

Tony Stark

Iron...

stark@gmail.com

Псевдоклас: nth-child | first-child | last-child

.item:first-child {
  background: #000;
}

.item:last-child {
  background: #666;
}

.item:nth-child(3) {
  background: #dd7eb6;
}

.item:nth-child(3) {
  background: #dd7eb6;
}

1

2

3

4

5

6

Адаптивний та респонсивний дизайн 

Responsive vs Adaptive

  • Верхній блок - це приклад responsive дизайну
  • Нижній блок - adaptive дизайну

Responsive та Adaptive

Для того, що веб додаток адаптувався під розмір екрану, необхідно використати наступний метатег

<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • eлемент <meta> viewport надає інструкції браузеру про те, як керувати розмірами сторінки та масштабуванням
  • width=device-width пристрою встановлює ширину сторінки, що відповідає ширині екрана пристрою (зележить від пристрою)
  • розділ initial-scale=1.0 встановлює початковий рівень масштабування, коли сторінка завантажується браузером
  • всі подальші маніпуляції відбуваються в CSS (розмір, колір, позиціонування)

@media запити в CSS

     Правило @media, введене в CSS2, дозволило визначити різні правила стилю для різних типів пристроїв.

     Медіа-запити в CSS3 розширили ідею типів медіа CSS2: замість того, щоб шукати тип пристрою, вони дивляться на можливості пристрою.

     Медіа-запити можна використовувати для перевірки багатьох речей, наприклад:

  • ширина та висота вікна перегляду
  • ширина і висота пристрою
  • орієнтація (планшет/телефон знаходиться в альбомній чи портретній орієнтації?)
  • дозвіл

 

@media not|only mediatype and (expressions) {
  CSS-Code;
}

@media для мобільних пристроїв

@media only screen and (max-width: 765px) {
  body {
      background: #333;
  }
  
  .mobile-menu {
    display: block;
  }
  
  .desktop-menu {
    display: none;
  }
}

@media для планшетів

@media only screen and (min-width: 768px)
  and (max-width: 1024px) {
    
  body {
      background: #333;
  }
  
  .mobile-menu {
    display: block;
  }
  
  .desktop-menu {
    display: none;
  }
}

@media для десктопів

@media only screen and 
  (min-width: 1024px) {
 
  body {
      background: #000;
  }
  
  .mobile-menu {
    display: none;
  }
  
  .desktop-menu {
    display: block;
  }
}

Основні правила responsive дизайну

  • використовувати @media запити
  • не вказувати фіксовану ширину або висоту
  • використовувати max-width та max-height
  • задавати ширину та висоту у відсотках  або  vw (viewport width )/vh (viewport height) 
  • задавати відступи у відсотках
  • використовувати rem, em для тексту або vw
h1 {
  font-size: 6vw;
}

h2 {
  font-size: calc(1.5rem + 3vw);
}

CSS анімація

  • @keyframes описує код анімації

  • анімація створюється шляхом поступового переходу від одного набору стилів CSS до іншого

  • під час анімації ви можете змінювати набір стилів CSS багато разів

  • вказують , коли зміна стилю відбудеться у відсотках, або з ключовими словами "from" та "to", що відповідає 0% та 100%. 0% - це початок анімації, 100% - коли анімація завершена.

@keyframes & animation

@keyframes & animation

.animated { 
     position: absolute; 
     width: 100px; 
     height: 100px; 
     background: red;
     transition: color 0.2s;
     animation: move 5s infinite; 
}

@keyframes move { 
     0% {top:  0px; }
     25% {top:  200px; }
     50% {top:  50px; }
     100% {top:  10px; }
}
<div class="animated"></div>

Q & A

2 JavaScript Crash Course: HTML + CSS

By Inna Ivashchuk

2 JavaScript Crash Course: HTML + CSS

  • 241