Курси програмування для дітей безкоштовно

12. Display flex

Вітаю! На цьому занятті ми наповну випробуємо гнучкість властивості display flex і створимо свій плейліст. А ще трохи згадаємо про об’єкти та створимо елементи сторінки за допомогою javascript.

Тож готуйте навушники і свої найулюбленіші треки. Ми починаємо!

Display flex

Властивість display: flex дозволяє розташувати елементи так, щоб вони вигідно заповнювали простір сторінки. Елементи можуть бути розтягнуті пропорційно з урахуванням заданого співвідношення або стиснуті, щоб цілком вмістити всі елементи без переносів в один рядок.

Ця властивість має дуже широке застосування, тому що розташовує елементи у відповідній послідовності, скільки б їх не було на сторінці й, що дуже важливо, незалежно від того, якого розміру монітор у клієнта. Він чи вона завжди будуть бачити items (картки) з гарним розташуванням, не важливо, чи то на комп’ютері, на планшеті чи в телефоні.

Чудовий онлайн приклад, який допоможе потренуватися і побачити, як працюють різні налаштування для display: flex.

Створюємо Playlist

1: Створіть новий проєкт. Додайте код для створення першої картки з піснею. Вона матиме назву, виконавця та вбудоване відео з youtube. Клас cards – це клас, в середині якого ми створимо багато карток з піснями. Клас card відповідає на одну єдину картку. А клас container відповідає за текстову частину картки.

<div id="cards">
  <div class="card">
    <iframe width="100%" height="350px" src="https://www.youtube.com/embed/BvgNgTPTkSo?si=kXKe7HYSkHiI2lrj" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
    <div class="container">
      <h4><b>Доброго вечора ми з України</b></h4>
      <p>PROBASS ∆ HARDI</p>
    </div>
  </div>
  
  <!--  Додайте ще 2 пісні тут -->
</div> 

2: Додайте ще 2 пісні (разом 3) до плейліста. Без стилів він буде виглядати не дуже. Але ми ж тільки-но почали!

3: А тепер черга за стилями. Приклад стилів для карток можна знайти на багатьох сайтах в інтернеті. Цей конкретно взяти звідси: приклад. Додайте такі стилі:

.card {
  /* Add shadows to create the "card" effect */
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
  transition: 0.3s;
}

/* On mouse-over, add a deeper shadow */
.card:hover {
  background-color: #00BFFF;
  box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
}

/* Add some padding inside the card container */
.container {
  padding: 2px 16px;
}

Зверніть увагу на коментарі. Вони дуже багато пояснюють і полегшують читання коду.
transition – властивість, яка визначає час за який елемент .card переходить в стан, який вказаний у .card:hover.
Давайте закруглимо кути у карток за допомогою :


/* With rounded corners: */
.card {
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
  transition: 0.3s;
  border-radius: 10px; /* 5px rounded corners */
}

/* With rounded corners: */
/* Add rounded corners to the top left and the top right corner of the image */
iframe {
  border-radius: 10px 10px 0 0;
}

4: Додамо стилі для всі карток разом. Тут і попрацює наш display: flex. Спробуйте додати властивості одна за одною, щоб зрозуміти їхній ефект:

#cards {
  display: flex;
  justify-content: space-around;
  flex-wrap: wrap;
  height: 90vh;
}

display: flex; – елементи одне за одним в рядок. Включає властивості flex
justify-content: space-around; – відступи навколо кожного елементу
flex-wrap: wrap; – створює новий рядок, якщо елементів забагато, щоб розмітити в один
height: 90vh; – Розмір елемента у vh.

Область перегляду (viewport) позначає розмір початкового блоку. Іншими словами, область перегляду – це вся область всередині вікна браузера або будь-яка інша видима область на екрані. Висота області перегляду (viewport height) – це відсоток від висоти фактичного вікна перегляду, який позначається одиницями vh, а ширина області перегляду (viewport width) – це відсоток від ширини фактичного вікна перегляду, який позначається одиницями vw.

Динамічна сторінка. Переносимо теги у javascript

5: А тепер приготуйтесь видалити майже увесь html-код, який ми так довго створювали. Насправді ми створили його лише, щоб налаштувати стилі. А зараз будемо генерувати сторінку за допомогою JavaScript! Для початку збережіть ваш поточний html код або закоментуйте його (виділяємо все , далі клавіша Ctrl+/ ). Нам ще знадобляться назви пісень і посилання на Youtube. Все, що має залишитись в файлі html (решту коментуємо або видаляємо):

<div id="cards">
</div>

6: Чудово! Тепер створюємо відомий нам об’єкт. Вносимо в нього ті ж дані, що були у html-файлі:

let songs = {
  1: {
    name: "Доброго вечора ми з України",
    link: "https://www.youtube.com/embed/BvgNgTPTkSo?si=kXKe7HYSkHiI2lrj",
    singer: "PROBASS ∆ HARDI"
  },
  2: {
    name: "Я з України",
    link: "https://www.youtube.com/embed/37Azj-eHw_M?si=ZV8P_tr7MrJKG4dL",
    singer: "МЕРІ"
  },
  3: {
    name: "Пес Патрон 🐶",
    link: "https://www.youtube.com/embed/fMSS6diyXQE?si=Skwqm6Kn3OGextsN",
    singer: "KARTA SVITU"
  }
};

Змініть назви і посилання.

7: Після цього готуємо цикл, в якому перебиратимемо всі пісні :


let cards = document.getElementById("cards");
for (const [skey, song] of Object.entries(songs)) {
  console.log(song);
 // Тут вставляємо новий код. В середині циклу
}

7: В середину цього циклу (туди, де зараз коментар) додаємо код, який створить елемент div з класом card. І додасть його в середину cards. Останній шматок додає код вбудованого відео. За допомогою змінної song[“link”] вказуємо посилання на відео:

   let card = document.createElement("div"); // створюємо новий div
  card.classList.add("card"); // додаємо йому клас card
  cards.appendChild(card); //додаємо новий <div class="card"> в середину <div class="cards">
  
    card.innerHTML = `<iframe width="100%" height="350px" src="${song["link"]}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>`;

8: І ще шматочок на сьогодні додаємо відразу за попереднім (перевірте, що після нього все ще закривається фігурна дужка циклу). Цей код додає клас container з текстом. В цьому елемент заголовка для назви пісні

 let container = document.createElement("div"); // створюємо новий div
  container.classList.add("container"); // додаємо йому клас container
  card.appendChild(container); //додаємо новий <div class="container"> в середину <div class="card">

  let h4 = document.createElement("h4"); // створюємо новий h4
  container.appendChild(h4); // додаємо h4 в середину  <div class="container">
  h4.innerText = song["name"];

Створюємо форму додавання пісні

9: Для початку створимо функцію, що генерує всі пісні. Код у нас вже є, але його треба буде покласти у функцію. Це допоможе пізніше додавати нову пісню. Код, виділений фоном новий, але тут важливо правильно розташувати код, який вже є.

let songs = {
...
};

function refreshList() {
  let cards = document.getElementById("cards");
  cards.innerHTML = "";
  for (const [skey, song] of Object.entries(songs)) {
   ... // тут увесь код для циклу, який вже написали
  }
}

refreshList();

Рядок cards.innerHTML = “”; стирає всі пісні зі списку, щоб згенерувати нові. Якщо ви його забули, то у вас при кожному додаванні пісні будуть дублювати решта пісень.

В кінці викликаємо функцію, щоб при завантаженні сторінки вже мати список пісень

10: Додаємо поля для нової пісні. Стилі ми візьмемо з бібліотеки з цієї сторінки. Тому підключимо бібліотеку і створимо поля для форми (Створюємо на початку сторінки, перед списом пісень):


<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">


<form class="w3-container" id="add">
  <div class="w3-container w3-blue">
    <h2>Додати пісню</h2>
  </div>
  <label class="w3-text-blue">Назва</label>
  <input class="w3-input" id="name" type="text"  required></p>

  <input type="submit" class="w3-button w3-blue" value="Додати">
</form>

11: Додайте поле “Посилання” (link) до форми. Додайте зчитування посилання самостійно

12: Тепер додамо функцію, яка зчитає з полів нову пісню і додасть її у список :

let addForm = document.getElementById("add"); //зчитуємо форму
addForm.addEventListener("submit", (e) => { //Якщо на кнопку натиснули
  e.preventDefault();
  let name = document.getElementById("name").value; // Читаємо назву пісні
  let singer= ""; // Тут щось замініть
  let link= ""; // І тут

  id = Math.floor(Math.random() * 100);  //Генеруємо випадковий іd для пісні
  songs[id] = { //Додаємо в список нову пісню
    name: name,
    singer: singer,
    link: link
  };
  refreshList(); //Перезапускаємо функцію відображення пісень
});
Уроки програмування для дітей. Домашня робота

Домашнє завдання

1: Додайте ще пісень (мін 6 на сторінці). Замініть пісні у прикладі на ті, які подобаються вам. Додайте ці ж пісні в об’єкт songs

2: Відредагуйте стилі. Додайте стилі на ваш смак

3: Додайте два поля для картки одне з них “Виконавець” (singer), а друге “Альбом” або “Країна”. Додайте ці поля на картки через javascript (Так само, яки ми додавали назву пісні).

4: Додайте нові поля у форму для додавання пісні. Змініть код так, щоб вони також додавалися функцією.

5: Для id з назвою add додайте стиль з відступом, щоб кнопка не зливалася з піснями:

Без відступу:

З відступом:

Уроки програмування для дітей ускладнені завдання level up

Level Up

1: Відкрийте проєкт-заготовку. Зробіть Fork (кнопка внизу справа). Далі за допомогою відео спробуйте відредагувати код так, щоб добитися таких самих картинок, які показані нижче.

Важливо: змініть тільки стилі для класу .container. Результат можете відправити текстом, наприклад так:

/* Завдання1 */
.container {
  display:block;
  justify-content: center;
}
/* Завдання2 */
.container {
  display:none;
  height: 10vh;
}

Отже, вам необхідні відтворити такі картинки (підписи під картинками з завданнями можуть допомогти) :

2: Додайте до ваших пісень теги за допомогою інформації тут. Написати можете що захочете.

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Думок на тему “12. Display flex”

holiganbet   holiganbet   holiganbet   holiganbet   holiganbet   holiganbet   starzbet   starzbet   starzbet   starzbet   starzbet   zlot   zlot   zlot   meritking   betgaranti   meritking   meritking   starzbet   betsmove   betcio   egebet   phishing   child porn   hack   shell   bets10   pishing   meritking   meritking   meritking   meritking   meritking   meritking   meritking   childiren porn   hack   shell   child porn   meritking   starzbet   jojobet   jojobet   meritking   starzbet   starzbet   mariobet   mariobet   mariobet   meritking   meritking   meritking   grandpashabet   meritking   meritkin   meritking   grandpashabet   meritking   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet