Web-дизайн. 4 курс. Лабораторное занятие №2. Подгруппа 1. Google Material-дизайн


Вам нужно создать страницу, реализованную по принципам material дизайна, включающую в себя:
- две иллюстрации
- несколько блоков текста со стартовыми буквами
- плавающую кнопку с субменю
- верхнее активное меню

На странице рекомендовано использовать два контрастных цвета и сопутствующие им палитры. Для перевода цветов в RGB можно использовать сайт: https://rgb.to/
Для создания страницы потребуется конфигурация стилей в CSS, библиотека JS, динамический сценарий JavaScript и подключение этих стилей к коду страницы в HTML.

Рекомендуемая тема для выполнения задания: Contempo 1. В настройках темы необходимо отключить фоновую картинку.

I) Параметры стилей
CSS в данном проекте состоит из трех компонентов – плавающая круглая кнопка (компонент 1), верхнее меню (компонент 2) и  стартовые буквы (компонент 3).

Круглая кнопка:

1) Задаем универсальные параметры стилей:

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
  font-family: 'Roboto', sans-serif;
  font-weight: 400;
  font-size: 16px;
  line-height: 1.3;
}

2) Указываем параметры фото, которое будет основным на странице:

#image {
  z-index: 0;
}

#image img {
  display: block;
  margin-right: auto;
  margin-left: auto;
  width: 100%;
  max-width: 820px;
}

3) Параметры текста с отступами:

#text {
  z-index: 0;
  padding: 18px 38px;
}

4) Перекрывающий слой при активности круглой кнопки. Выберите свой цвет:

#overlay {
  z-index: 2;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(70, 130, 180, 0.7);
  visibility: hidden;
  opacity: 0;
  transition: all 0.2s ease-in
  will-change: opacity;
}

#overlay.show {
  visibility: visible;
  opacity: 1;
}

5) Идентификатор кнопки и ее цвет:

#materialpage {
  z-index: 10;
  position: fixed;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  bottom: 10%;
  right: 5%;
  background-color: #0000FF;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  cursor: pointer;
  box-shadow: 2px 2px 10px rgba(10, 10, 10, 0.3);
  transition: all 0.2s ease-in-out;
}


6) Иконки меню кнопки и их цвет:

#materialpage .icon-bar {
  display: block;
  background-color: #FFFFFF;
  width: 22px;
  height: 2px;
  transition: all 0.3s ease-in-out;
}

#materialpage .icon-bar + .icon-bar {
  margin-top: 4px;
}

7) Расположение навигации и иконки:

.nav {
  z-index: 9;
  position: fixed;
  bottom: 10.5%;
  right: 5.5%;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background-color: #f9f9f9;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  visibilty: hidden;
  opacity: 0;
  box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.48);
  cursor: pointer;
  transition: all 0.3s ease-in;
}

.material-icons {
  font-size: 24px;
  color: rgba(0, 0, 0, 0.54);
}

8) Идентификаторы ссылок и их активность:

#link1.show {
  -webkit-transform: translateY(-125%);
          transform: translateY(-125%);
}

#link2.show {
  -webkit-transform: translateY(-250%);
          transform: translateY(-250%);
}

#link3.show {
  -webkit-transform: translateY(-375%);
          transform: translateY(-375%);
}

#link4.show {
  -webkit-transform: translateY(-500%);
          transform: translateY(-500%);
}

9) Идентификатор кнопки и его активность:

#materialpage.show {
  box-shadow: 7px 7px 10px 0px rgba(0, 0, 0, 0.48);
}

#materialpage.show #wrapper {
  transition: -webkit-transform 0.4s ease-in-out;
  transition: transform 0.4s ease-in-out;
  transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
  -webkit-transform: rotateZ(90deg);
          transform: rotateZ(90deg);
}

#materialpage.show #one {
  -webkit-transform: translateY(6px) rotateZ(45deg) scaleX(0.9);
          transform: translateY(6px) rotateZ(45deg) scaleX(0.9);
}

#materialpage.show #thr {
  -webkit-transform: translateY(-6px) rotateZ(-45deg) scaleX(0.9);
          transform: translateY(-6px) rotateZ(-45deg) scaleX(0.9);
}

#materialpage.show #two {
  opacity: 0;
}

10) Отображение самой навигации:

.nav.show {
  visibility: visible;
  opacity: 1;
}


Верхнее меню
11) Перекрывающий слой. Укажите в нем фон нужного цвета для отображения (лучше всего - прозрачный):

#header-overlay {
  height: 100vh;
  width: 100%;
  background:?;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1000;
}

12) Вводный заголовок с границами перехода:

#intro {
  position: absolute; 
  top: 25%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  text-align: center;
  color: rgba(96, 125, 139,1.0);
}

#intro h3 {
  font-family: 'Roboto', serif;
  font-size: 50px;
  text-transform: capitalize;
  font-weight: 400;
  padding-bottom: 7px;
  transition: .7s ease-in-out;
  color: rgba(70,130,180);
  
}

#intro a {
  font-family: 'Roboto', sans-serif;
  font-size: 14px;
  border: 1px solid rgba(96, 125, 139,1.0);
  padding: 10px 30px;
  position: absolute;
  transition: .3s ease-in-out;
  cursor: pointer;
  left: 0;
  top: 0;
}

13) Контейнер кнопки:

#button-container {
  height: 40px;
  width: 118px;
  position: absolute;
  left: 50%;
  transform: translate(-50%, 50%);
  transition: .3s ease-in-out;
}

14) Заполняемый бар с цветом rgba (укажите свой):

#button-overlay {
  height: 40px;
  width: 0;
  top: 0;
  left: 0;
  position: absolute;
  background: rgba(255, 255, 240);
  transition: .3s ease-in-out;
}

15) Классы загрузки цвета и его рамка:

.grow {
  width: 118px !important;
}

.grow2 {
  color: #000;
  border: 1px solid rgba(255, 255, 240) !important;
}

16) Классы загрузчика:

.fuller {
  margin-left: -8%;
  opacity: 0;
  visibility: hidden;
}

.fuller2 {
  visibility: hidden;
  opacity: 0;
}


17) Контейнер меню и его кнопка:

#menu-button-container {
  display: inline-block;
  float: right;
  padding: 20px;
}

#menu-button {
  height: 30px;
  width: 32px;
  position: relative;
  cursor: pointer;
  z-index: 2000;
  overflow: hidden;
}


18) Идентификатор открытого меню:

#menu-button div {
  height: 3px;
  width: 100%;
  background: rgba(0, 0, 255);
  position: absolute;
  top: 14px;
  transition: .4s ease-in-out;
}

19) Активность иконки меню:

#menu-button div:nth-child(1) {
  top: 7px;


#menu-button div:nth-child(2), #menu-button div:nth-child(3) {
  top: 14px;
}

#menu-button div:nth-child(4) {
  top: 21px;
}


#menu-button.animate div:nth-child(1), #menu-button.animate div:nth-child(4) {
    top: 14px;
    opacity: 0;
  }

#menu-button.animate div:nth-child(2) {
    transform: rotate(45deg);
  }

#menu-button.animate div:nth-child(3) {
  transform: rotate(-45deg);
  
}

20) Цвет кнопки при положении курсора:

#menu-button.change-color div {
  background: rgba(0, 0, 255); /* курсор на кнопке закрыть */
}

#menu-button.hover-animation div:nth-child(1), #menu-button.hover-animation div:nth-child(4) {
  width: 80%;
}

#menu-button.hover-color div {
  background: rgba(0, 0, 255); /* активность на кнопке закрыть */
}

#menu-button.hover-color2 div {
  background: rgba(255, 255, 255) !important; /* курсор за пределом кнопки */
}

21) Перекрывающее меню с фото и высота его показа в пикселях (выровняйте в зависимости от высоты ваших фото):

#menu-overlay {
  position: absolute;
  height: 0;
  width: 100%;
  background: url(""); /* ваша перекрывающее фото */
  left: 0;
  top: 0;
  transition: .5s ease-in;
  z-index: 2000;
}

.reveal {
  height: 610px !important; 
}

22) Контейнер навигации с позицией букв относительно верхнего и левого краев - у меня 10% сверху и 60% слева (укажите подходящие вам параметры):

#nav-container {
  position: absolute;
  top: ?; 
  left: ?;
  transform: translate(-50%, -50%);
  z-index: 2000;
  transition: 1s ease-out;
}

#nav-container ul li {
  list-style: none;
  transition: .6s ease-in-out;
}

23) Цвет букв меню при наведенном курсоре (укажите свой):

#nav-container ul li a {
  text-decoration: none;
  font-family: 'Roboto', serif;
  font-size: 50px;
  line-height: 28px;
  color: rgba(255, 255, 255);
  transition: .3s ease-in-out;
}

24) Скрытое меню:

.hidden {
  opacity: 0;
  visibility: hidden;
  margin-left: -60%;
}


25) Анимация меню с цветом (укажите свой):

.nav-animate {
  color: rgba(0, 0, 255) !important; 
}

26) Тень меню – выберите цвет или оставьте пустым:

.nav-shadow {
}

Стартовые буквы
27) Объявите стартовые буквы любым классом и укажите в нем ваш цвет и следующие параметры:

color: ?;
 float: left;
 font-size: 84px;
 line-height: 64px;
 padding-top: 4px;
 padding-right: 8px;
 padding-left: 3px;
 font-family: 'Roboto', sans-serif;


II) Динамический сценарий JavaScript
28) Сначала указываем сценарий для круглой кнопки:

$('#materialpage').click(function() {
  $('#materialpage').toggleClass('show');
  $('#overlay').toggleClass('show');
  $('.nav').toggleClass('show');
});

29) Затем сценарий динамического заголовка:

$(document).ready(function(){

   /* intro scenrio*/
   
  $("#intro h3").delay(1000).queue(function(n){
    $(this).toggleClass("fuller")
    n()
  })
  
  $("#intro a").delay(1400).queue(function(n){
    $(this).toggleClass("fuller2")
    n()
  })

   30) Активная кнопка раскрытия:

     /* button hover scenario */
   
   $("#intro a").hover(function(){
     $("#button-overlay").toggleClass("grow")
     $("#button-container a").toggleClass("grow2")
   })
   

   31) Сценарии меню:

   /* menu button scenario */
   
   $("#menu-button").hover(function(){
     $("#menu-button").toggleClass("hover-animation")
     $("#menu-button").toggleClass("hover-color")
   })

/* menu links scenario*/
   
   
   $('#nav-container ul li a').hover(function(){
  $('#nav-container ul li a').toggleClass('nav-animate');
  $(this).toggleClass('nav-animate')
    /* $(this).toggleClass('nav-shadow') */

});

32) И сценарии кнопок:

    /* click button scenario */
   
   
   
  $("#menu-button").click(function (){
  
    /* hides intro */
    $("#intro h3").toggleClass("fuller")
  
    $("#intro a").toggleClass('fuller2')
    
    
    $("#menu-button").toggleClass("animate")

    $("#menu-overlay").toggleClass("reveal")

    $("#menu-button").toggleClass("change-color")
    
    $("#menu-button").hover(function(){
      $("#menu-button").toggleClass('hover-color')
      $("#menu-button").toggleClass('hover-color2')
    })
    
    /* shows and hides nav */

    $("#nav-container").delay(200).queue(function(n){
      $(this).toggleClass("hidden")
      n()
    })

    $("#nav1").delay(400).queue(function(n){
      $(this).toggleClass("hidden")
      n()
    })

    $("#nav2").delay(600).queue(function(n){
      $(this).toggleClass("hidden")
      n()
    })

    $("#nav3").delay(800).queue(function(n){
      $(this).toggleClass("hidden")
      n()
    })
  })
   
   
})

33) В HTML также потребуется встроить библиотеку JS. Ее можно взять здесь: https://sites.google.com/site/konoplevmedia/jqm.js

III) Собственно сам HTML:
34) Указываем doctype, внутри <head> прописываем метаданные и стандартный заголовок:

<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>GM button</title>
<meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">

35) Подключаем шрифты Google:

<link rel='stylesheet' href='https://fonts.googleapis.com/icon?family=Material+Icons'>  
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Roboto'>

36) Встраиваем CSS и закрываем </head>
37) Внутри тега <body> указываем идентификаторы элементов из CSS:

<div id="header-container">
  <div id="header-bg"></div>
  <div id="header-overlay">
    <div id="intro">

38) Основной заголовок страницы:

      <h3 class="fuller">Lorenzo Villoresi</h3>
      <div id="button-container">
        <div id="button-overlay"></div>
       
39) Текст на фуллере с идентификатором закладки:
        <a class="fuller2" href="#1">Discover</a>

40) Закрываем классы и открываем меню:
      </div>
       </div>

   <div id="menu-overlay"></div>
<div id="menu-button-container">
  <div id="menu-button">

41) Указываем блоки разделителя и закрываем оставшийся класс:

    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div></div>
</div>

42) Прописываем скрываемое меню. Пропишите в нем имена вкладок и ссылки:

  <div id="nav-container" class="hidden">
    <ul>
      <li id="nav1" class="hidden"><a href="#">первая ссылка</a></li>
      <li id="nav2" class="hidden"><a href="#">вторая</a></li>
      <li id="nav3" class="hidden"><a href="#">третья</a></li>
    </ul>
  </div>

43) Указываем классы бара иконок:

<div id="materialpage">
  <div id="wrapper">
    <span class="icon-bar" id="one"></span>
    <span class="icon-bar" id="two"></span>
    <span class="icon-bar" id="thr"></span>
  </div>
</div>

44) Прописываем меню круглой кнопки. Пропишите в нем имена вкладок и задайте ссылки:

<div class="nav" id="link1">
  <i class="material-icons">one</i>
</div>
<div class="nav" id="link2">
  <i class="material-icons">two</i>
</div>
<div class="nav" id="link3">
  <i class="material-icons">three</i>
</div>
<div class="nav" id="link4">
  <i class="material-icons">four</i>
</div>
45) Открываем основной раздел страницы и в классе фото указываем расположение исходного фото на странице:

<main>
  <div id="image">
    <img src="https://sites.google.com/site/konoplevmedia/lv0.png">
  </div>

46) Открываем класс текста:

<div id="text">

47) Для каждого абзаца текста после тега абзаца указываем класс с буквой, например:
<p><span class="first-character fl">В</span>аш текст</p>

Обратите внимание, что стили будут запрашиваться из класса CSS – каким вы его указали.

48) Для закладки выделите произвольный абзац текста тегом секции и идентификатором, который был указан в фуллере, например:

<section class="section" id="1"><p>ваш текст</section>

49) Закрываете тег </div>, указываете идентификатор
  <div id="overlay"></div>
И затем закрываете основной блок:
</main>

50) Встраиваете ваш JavaScript и библиотеку и закрываете все оставшиеся теги.

Если все верно, то ваша страница будет выглядеть примерно так: https://konoplevtech4.blogspot.com/2019/08/google-material-page.html#1 Ссылки на выполненное задание принимаются в комментариях к этому посту до 23:59 5 октября.

В связи с трудностями, которые вызвало это задание, срок выполнения продлен до 20:00 пятницы, 11 октября.

Комментарии

  1. https://dsdsa3123.blogspot.com/2019/09/flat-design-2019.html
    Предыдущее)

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

      Удалить
  2. https://borisovaanna56.blogspot.com/2019/10/gm-button-250-1-2-3-4-2001.html

    ОтветитьУдалить
    Ответы
    1. Оценка "отлично". Единственное замечание - заполняемый цвет у вас выходит за границы фуллера при наведении курсора.

      Удалить
  3. Ответы
    1. Оценка "отлично". По заполняемой цветом рамке то же замечание.

      Удалить
  4. https://audtioria.blogspot.com/2019/10/google-material.html

    ОтветитьУдалить
    Ответы
    1. Оценка "отлично". Но с заполняемой рамкой тоже небольшое упущение - полностью цветом она не заполняется.

      Удалить
  5. Ответы
    1. Оценка "хорошо", overlay-фото не совпадает по размерам с фото-подложкой и дублируется.

      Удалить
  6. https://svetlanagaus.blogspot.com/2019/10/gm-button-discover.html

    ОтветитьУдалить
    Ответы
    1. Оценка "хорошо", overlay-фото меньше фото-подложки, заполняемая рамка лишь частично закрывается цветом при наведении курсора.

      Удалить
  7. Ирина Швец https://irishvec.blogspot.com/2019/10/gm-button-best-1-2-3-4.html

    ОтветитьУдалить
    Ответы
    1. Оценка "отлично". С заполняемой рамкой есть небольшие недочеты.

      Удалить
  8. Софья Балдина:
    https://sonya98.blogspot.com/2019/10/gm-button-gm-button.html

    ОтветитьУдалить
    Ответы
    1. Оценка "хорошо", overlay-фото больше фото-подложки и выходит за его границы, создавая собственный дубль.

      Удалить

Популярные сообщения