@ -0,0 +1,133 @@ |
||||
# Logs |
||||
logs |
||||
*.log |
||||
|
||||
# Runtime data |
||||
pids |
||||
*.pid |
||||
*.seed |
||||
*.pid.lock |
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover |
||||
lib-cov |
||||
|
||||
# Coverage directory used by tools like istanbul |
||||
coverage |
||||
|
||||
# nyc test coverage |
||||
.nyc_output |
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) |
||||
.grunt |
||||
|
||||
# Bower dependency directory (https://bower.io/) |
||||
bower_components |
||||
|
||||
# node-waf configuration |
||||
.lock-wscript |
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html) |
||||
build/Release |
||||
|
||||
# Dependency directories |
||||
node_modules/ |
||||
jspm_packages/ |
||||
|
||||
# TypeScript v1 declaration files |
||||
typings/ |
||||
|
||||
# Optional npm cache directory |
||||
.npm |
||||
|
||||
# Optional eslint cache |
||||
.eslintcache |
||||
|
||||
# Optional REPL history |
||||
.node_repl_history |
||||
|
||||
# Output of 'npm pack' |
||||
*.tgz |
||||
|
||||
# Yarn Integrity file |
||||
.yarn-integrity |
||||
|
||||
# dotenv environment variables file |
||||
.env |
||||
|
||||
# parcel-bundler cache (https://parceljs.org/) |
||||
.cache |
||||
|
||||
# next.js build output |
||||
.next |
||||
|
||||
# nuxt.js build output |
||||
.nuxt |
||||
|
||||
# Nuxt generate |
||||
dist |
||||
|
||||
# vuepress build output |
||||
.vuepress/dist |
||||
|
||||
# Serverless directories |
||||
.serverless |
||||
|
||||
# IDE |
||||
.idea |
||||
.vscode |
||||
config.js |
||||
/yarn-error.log |
||||
package-lock.json |
||||
jsconfig.json |
||||
|
||||
|
||||
# GP | Files ext |
||||
*.sql |
||||
*.tgz |
||||
*.tar.gz |
||||
*.tar |
||||
*.rar |
||||
*.zip |
||||
*.wav |
||||
*.flv |
||||
*.db |
||||
*.psd |
||||
*.pdf |
||||
*.doc |
||||
*.docx |
||||
*.txt |
||||
*.text |
||||
*.log |
||||
*.config |
||||
*.xml |
||||
*.tbk |
||||
*.csv |
||||
*.json |
||||
|
||||
# GP | Dirs & files |
||||
/bower_components/ |
||||
/node_modules/ |
||||
/nbproject/ |
||||
/cache/ |
||||
.cache/ |
||||
/phpMyAdmin-* |
||||
/timthumb_cache/ |
||||
/webstat/ |
||||
/.idea/ |
||||
/.csscomb.json |
||||
/.htaccess |
||||
/sitemap*.xml |
||||
/sftp-config.json |
||||
/robots.txt |
||||
/bower.json |
||||
/.bowerrc |
||||
/backup_rsync/ |
||||
.bash_history |
||||
.idea/ |
||||
.fleet/ |
||||
.DS_Store |
||||
.config/ |
||||
.bash* |
||||
.vim* |
||||
test*.php |
||||
gp-test*.php |
@ -1 +1,34 @@ |
||||
# triumph-clinic |
||||
# Требования к верстке |
||||
|
||||
|
||||
## С точки зрения веб-разработки: |
||||
* верстаем на чистом HTML/CSS с использованием flex и grid (без подключение библиотек типа bootstrap и т.п.) |
||||
* при именовании блоков используем методологию **БЭМ в стиле "Two Dashes"**: |
||||
`block-name__elem-name--mod-name--mod-val` |
||||
+ имена записываются латиницей в нижнем регистре |
||||
+ для разделения слов в именах БЭМ-сущностей используется дефис (-) |
||||
+ имя элемента отделяется от имени блока двумя подчеркиваниями (__) |
||||
+ модификаторы отделяются от имения блока или элемента двумя дефисами (--) |
||||
+ значение модификатора отделяется от его имени двумя дефисами (--) |
||||
* из конечного HTML-файла убрать все комментарии, если такие имеются |
||||
<!-- * для всех страниц прописывать уникальный класс в \<body\>, от которого строить CSS-правила --> |
||||
|
||||
|
||||
## С точки зрения SEO: |
||||
* все теги использовать строго по назначению! Текстовые (strong, b, i, em, h1-h6… p) используем только в текстовых блоках и заголовках. Для дизайна используем div и span. Например не нужно втыкать в подвал, шапку или формы захвата h4 или закрывать просто крупный текст, который не является заголовком в h2. |
||||
* на странице должен быть только один заголовок первого уровня (h1) |
||||
* должны присутствовать все основные теги и атрибуты — html, head, body, title, description, lang=ru, content=html, charset=utf8 |
||||
* для кнопок, нажатие на которые не требует редиректа используем тег \<button\>, а не \<a\> |
||||
* для \<img\> самостоятельно проставляем атрибут alt="", со значением описывающим того что изображено на картинке |
||||
|
||||
|
||||
## Оптимальный порядок действий |
||||
1. Сначала определить CSS-переменные для основных цветов/градиентов, начертаний шрифтов (толщина, размер, модификация, межтрочный интервал) и занести в специально подгтовленный CSS-файл style-core.css |
||||
2. Все шрифты выкачать и сохранить локально в директорию /assets/fonts/ и подключить их в файле style-core.css |
||||
3. Далее начинать стоит с верстки UI kit (должен быть предоставлен в макете дизайнером), для того чтобы переиспользовать готовые элементы по ходу верстки макетов. Для удобства подготовлен файл "ui_kit.html" |
||||
3. Как UI kit будет готов, можно смело переходить к верстке основных листов макета "*.html" |
||||
|
||||
|
||||
### Примечания |
||||
|
||||
Для работы с Figma рекомендуем использовать плагин ["Inspect Styles"](https://www.figma.com/community/plugin/1254262542670221199) для инспевтирования CSS-свойсв. |
@ -0,0 +1,11 @@ |
||||
/* |
||||
|
||||
ШАБЛОН использования глобальных переменных: |
||||
|
||||
:root { |
||||
--main-text: #e1667c; |
||||
--main-color: #8da6cb; |
||||
--font-family: "Craftwork Grotesk", sans-serif; |
||||
} |
||||
|
||||
*/ |
@ -0,0 +1,4 @@ |
||||
/* Стили для лептопов */ |
||||
@media only screen and (max-width: 1720px) { |
||||
|
||||
} |
@ -0,0 +1,5 @@ |
||||
/* Стили для мобильных устройств */ |
||||
@media only screen and (max-width: 480px) { |
||||
|
||||
|
||||
} |
@ -0,0 +1,5 @@ |
||||
/* Стили для планшетов */ |
||||
@media only screen and (max-width: 1024px) { |
||||
|
||||
|
||||
} |
@ -0,0 +1,2 @@ |
||||
/* Стили для ультрашироких экранов */ |
||||
@media only screen and (min-width: 1720px) {} |
@ -0,0 +1,157 @@ |
||||
html { |
||||
font-size: 16px; |
||||
font-family: "Montserrat", sans-serif; |
||||
font-weight: 400; |
||||
font-style: normal; |
||||
scroll-behavior: smooth; |
||||
} |
||||
|
||||
body { |
||||
position: relative; |
||||
margin: 0; |
||||
overflow-y: scroll; |
||||
color: #2d2d2d; |
||||
background-color: #ededed; |
||||
} |
||||
|
||||
a, |
||||
button, |
||||
input, |
||||
textarea { |
||||
font-family: "Montserrat", sans-serif; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
a { |
||||
transition: all ease-in-out 0.1s; |
||||
} |
||||
a:hover { |
||||
color: #609eff; |
||||
} |
||||
a:active { |
||||
color: #3081ff; |
||||
} |
||||
|
||||
figure { |
||||
margin: 0; |
||||
} |
||||
|
||||
img { |
||||
max-width: 100%; |
||||
height: auto; |
||||
} |
||||
|
||||
.container { |
||||
max-width: 1236px; |
||||
width: 100%; |
||||
margin: 0 auto; |
||||
padding: 0 15px; |
||||
box-sizing: border-box; |
||||
} |
||||
|
||||
.logo__link { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 22px; |
||||
} |
||||
.logo__figure { |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
} |
||||
.logo__figure-image { |
||||
display: block; |
||||
max-width: 100%; |
||||
width: 35px; |
||||
height: auto; |
||||
} |
||||
.logo__text { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 5px; |
||||
} |
||||
.logo__text-name { |
||||
font-weight: 600; |
||||
font-size: 26px; |
||||
letter-spacing: 0.04em; |
||||
text-transform: uppercase; |
||||
color: #2d2d2d; |
||||
} |
||||
.logo__text-slogan { |
||||
font-weight: 400; |
||||
font-size: 9px; |
||||
letter-spacing: 0.05em; |
||||
text-transform: uppercase; |
||||
color: #878787; |
||||
} |
||||
|
||||
.social-link { |
||||
display: inline-block; |
||||
height: 29px; |
||||
width: 29px; |
||||
border-radius: 32px; |
||||
background-position: center; |
||||
background-repeat: no-repeat; |
||||
} |
||||
.social-link--whatsapp { |
||||
background-image: url(../img/icons/whatsapp.svg); |
||||
background-color: #2aa81a; |
||||
} |
||||
.social-link--whatsapp:active { |
||||
background-color: #42d030; |
||||
} |
||||
.social-link--tg { |
||||
background-image: url(../img/icons/telegram.svg); |
||||
background-color: #178ec9; |
||||
} |
||||
.social-link--tg:active { |
||||
background-color: #45b3ea; |
||||
} |
||||
.social-link--phone { |
||||
width: auto; |
||||
height: auto; |
||||
margin-left: 17px; |
||||
font-weight: 600; |
||||
font-size: 24px; |
||||
color: #2d2d2d; |
||||
} |
||||
|
||||
.button { |
||||
border-radius: 100px; |
||||
background-color: #ffffff; |
||||
transition: all ease-in-out 0.1s; |
||||
cursor: pointer; |
||||
} |
||||
.button--order { |
||||
display: inline-block; |
||||
padding: 14px 29px; |
||||
font-weight: 500; |
||||
font-size: 14px; |
||||
letter-spacing: 0.01em; |
||||
border: 1px solid #cacaca; |
||||
} |
||||
|
||||
.header { |
||||
padding: 26px 0 29px; |
||||
} |
||||
.header .container { |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: space-between; |
||||
gap: 24px; |
||||
} |
||||
.header__nav { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 36px; |
||||
padding: 0 30px 0 35px; |
||||
} |
||||
.header__nav-link { |
||||
font-weight: 400; |
||||
font-size: 15px; |
||||
} |
||||
.header__social { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 17px; |
||||
} |
After Width: | Height: | Size: 190 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 722 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.1 KiB |
@ -0,0 +1,29 @@ |
||||
@mixin desktop { |
||||
@media (max-width: 1240px) { |
||||
@content; |
||||
} |
||||
} |
||||
|
||||
@mixin laptop { |
||||
@media (max-width: 992px) { |
||||
@content; |
||||
} |
||||
} |
||||
|
||||
@mixin tablet { |
||||
@media (max-width: 768px) { |
||||
@content; |
||||
} |
||||
} |
||||
|
||||
@mixin mobile { |
||||
@media (max-width: 576px) { |
||||
@content; |
||||
} |
||||
} |
||||
|
||||
@mixin mobilesm { |
||||
@media (max-width: 400px) { |
||||
@content; |
||||
} |
||||
} |
@ -0,0 +1,44 @@ |
||||
html { |
||||
font-size: 16px; |
||||
font-family: 'Montserrat', sans-serif; |
||||
font-weight: 400; |
||||
font-style: normal; |
||||
scroll-behavior: smooth; |
||||
} |
||||
|
||||
body { |
||||
position: relative; |
||||
margin: 0; |
||||
overflow-y: scroll; |
||||
color: $black; |
||||
background-color: $greybg; |
||||
} |
||||
|
||||
a, |
||||
button, |
||||
input, |
||||
textarea { |
||||
font-family: 'Montserrat', sans-serif; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
a { |
||||
transition: all ease-in-out 0.1s; |
||||
|
||||
&:hover { |
||||
color: $blue; |
||||
} |
||||
|
||||
&:active { |
||||
color: $darkblue; |
||||
} |
||||
} |
||||
|
||||
figure { |
||||
margin: 0; |
||||
} |
||||
|
||||
img { |
||||
max-width: 100%; |
||||
height: auto; |
||||
} |
@ -0,0 +1,9 @@ |
||||
// colors |
||||
|
||||
$black: #2d2d2d; |
||||
$grey: #878787; |
||||
$lightgrey: #cacaca; |
||||
$blue: #609eff; |
||||
$darkblue: #3081ff; |
||||
$greybg: #ededed; |
||||
$white: #ffffff; |
@ -0,0 +1,2 @@ |
||||
.footer { |
||||
} |
@ -0,0 +1,28 @@ |
||||
.header { |
||||
padding: 26px 0 29px; |
||||
|
||||
& .container { |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: space-between; |
||||
gap: 24px; |
||||
} |
||||
|
||||
&__nav { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 36px; |
||||
padding: 0 30px 0 35px; |
||||
|
||||
&-link { |
||||
font-weight: 400; |
||||
font-size: 15px; |
||||
} |
||||
} |
||||
|
||||
&__social { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 17px; |
||||
} |
||||
} |
@ -0,0 +1,2 @@ |
||||
.main { |
||||
} |
@ -0,0 +1,15 @@ |
||||
.button { |
||||
border-radius: 100px; |
||||
background-color: $white; |
||||
transition: all ease-in-out 0.1s; |
||||
cursor: pointer; |
||||
|
||||
&--order { |
||||
display: inline-block; |
||||
padding: 14px 29px; |
||||
font-weight: 500; |
||||
font-size: 14px; |
||||
letter-spacing: 0.01em; |
||||
border: 1px solid #cacaca; |
||||
} |
||||
} |
@ -0,0 +1,7 @@ |
||||
.container { |
||||
max-width: 1236px; |
||||
width: 100%; |
||||
margin: 0 auto; |
||||
padding: 0 15px; |
||||
box-sizing: border-box; |
||||
} |
@ -0,0 +1,42 @@ |
||||
.logo { |
||||
&__link { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 22px; |
||||
} |
||||
|
||||
&__figure { |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
|
||||
&-image { |
||||
display: block; |
||||
max-width: 100%; |
||||
width: 35px; |
||||
height: auto; |
||||
} |
||||
} |
||||
|
||||
&__text { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 5px; |
||||
|
||||
&-name { |
||||
font-weight: 600; |
||||
font-size: 26px; |
||||
letter-spacing: 0.04em; |
||||
text-transform: uppercase; |
||||
color: $black; |
||||
} |
||||
|
||||
&-slogan { |
||||
font-weight: 400; |
||||
font-size: 9px; |
||||
letter-spacing: 0.05em; |
||||
text-transform: uppercase; |
||||
color: $grey; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,35 @@ |
||||
.social-link { |
||||
display: inline-block; |
||||
height: 29px; |
||||
width: 29px; |
||||
border-radius: 32px; |
||||
background-position: center; |
||||
background-repeat: no-repeat; |
||||
|
||||
&--whatsapp { |
||||
background-image: url(../img/icons/whatsapp.svg); |
||||
background-color: #2aa81a; |
||||
|
||||
&:active { |
||||
background-color: #42d030; |
||||
} |
||||
} |
||||
|
||||
&--tg { |
||||
background-image: url(../img/icons/telegram.svg); |
||||
background-color: #178ec9; |
||||
|
||||
&:active { |
||||
background-color: #45b3ea; |
||||
} |
||||
} |
||||
|
||||
&--phone { |
||||
width: auto; |
||||
height: auto; |
||||
margin-left: 17px; |
||||
font-weight: 600; |
||||
font-size: 24px; |
||||
color: $black; |
||||
} |
||||
} |
@ -0,0 +1,18 @@ |
||||
// Base |
||||
|
||||
@import './b-vars'; |
||||
@import './b-mixins'; |
||||
@import './b-reset'; |
||||
|
||||
// Modules |
||||
|
||||
@import './m-container'; |
||||
@import './m-logo'; |
||||
@import './m-social-link'; |
||||
@import './m-button'; |
||||
|
||||
// Layouts |
||||
|
||||
@import './l-header'; |
||||
@import './l-main'; |
||||
@import './l-footer'; |
@ -0,0 +1,49 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="ru"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<title>Триумф</title> |
||||
<meta name="description" content="SEO Description" /> |
||||
<link rel="shortcut icon" href="/assets/img/favicon.ico?v=1.0" /> |
||||
<link rel="stylesheet" href="/assets/css/index.css" /> |
||||
</head> |
||||
|
||||
<body> |
||||
<header class="header"> |
||||
<div class="container"> |
||||
<div class="logo"> |
||||
<a class="logo__link" href="./"> |
||||
<figure class="logo__figure"> |
||||
<img class="logo__figure-image" src="./assets/img/logo.svg" alt="logo" /> |
||||
</figure> |
||||
<div class="logo__text"> |
||||
<span class="logo__text-name">Триумф</span> |
||||
<span class="logo__text-slogan">Cобственная победа</span> |
||||
</div> |
||||
</a> |
||||
</div> |
||||
|
||||
<nav class="header__nav"> |
||||
<a class="header__nav-link" href="#">О центре</a> |
||||
<a class="header__nav-link" href="#">Цены</a> |
||||
<a class="header__nav-link" href="#">Частые вопросы</a> |
||||
<a class="header__nav-link" href="#">Контакты</a> |
||||
</nav> |
||||
|
||||
<div class="header__social"> |
||||
<a class="social-link social-link--whatsapp" href="#"></a> |
||||
<a class="social-link social-link--tg" href="#"></a> |
||||
<a class="social-link social-link--phone" href="tel:88001012127">8 (800) 101-21-27</a> |
||||
</div> |
||||
|
||||
<div class="header__buttons"> |
||||
<button class="button button--order">Заказать звонок</button> |
||||
</div> |
||||
</div> |
||||
</header> |
||||
|
||||
<script src="/assets/js/main.js"></script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,37 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<title>UI kit</title> |
||||
<link rel="stylesheet" type="text/css" href="/assets/css/style-core.css"> |
||||
</head> |
||||
<style> |
||||
/* Стили для выравнивания UI-элеметнов */ |
||||
.ui__ui-wrapper{ |
||||
display: grid; |
||||
grid-template-columns: repeat(4, 1fr); |
||||
grid-column-gap: 30px; |
||||
grid-row-gap: 30px; |
||||
width: 100vw; |
||||
min-height: 100vh; |
||||
} |
||||
|
||||
.ui, |
||||
.ui__item{ |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
} |
||||
</style> |
||||
<body class="ui"> |
||||
<div class="ui__ui-wrapper"> |
||||
<div class="ui__item"></div> |
||||
<div class="ui__item"></div> |
||||
<div class="ui__item"></div> |
||||
<!-- ... --> |
||||
<div class="ui__item"></div> |
||||
</div> |
||||
</body> |
||||
</html> |