15 Commits
71 changed files with 3327 additions and 0 deletions
+3
View File
@@ -1,2 +1,5 @@
.agents/
.codex/
.DS_Store
__MACOSX/
._*
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

@@ -0,0 +1,93 @@
Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public),
with Reserved Font Names "PT Sans" and "ParaType".
This Font Software is licensed under the SIL Open Font License, Version 1.1
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public),
with Reserved Font Names "PT Sans" and "ParaType".
This Font Software is licensed under the SIL Open Font License, Version 1.1
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>О проекте — Wikimedium</title>
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<header class="menu">
<a class="logo" href="index.html">
<img src="logo.svg" alt="" width="38" height="16">
<span>Wikimedium</span>
</a>
<a class="about-link" href="#about">О проекте</a>
</header>
<main id="about">
<div class="sections">
<section class="section first">
<div class="text">
<h1>Наглядный пример,<br>
чтобы учиться веб-вёрстке</h1>
<p>Разработан для изучения основ веб-вёрстки,<br>
языка гипертекстовой разметки HTML<br>
и каскадных таблиц стилей CSS</p>
</div>
<img class="image" src="about1.png" alt="Страница Wikimedium на ноутбуке и смартфоне">
</section>
<section class="section second">
<div class="text">
<h2>С нуля до первого сайта<br>
под компьютеры, смартфоны<br>
и планшеты</h2>
<p>Чтобы начать изучать веб-вёрстку на этом проекте,<br>
не требуется каких-то специальных знаний, кроме<br>
базового умения пользоваться компьютером</p>
</div>
<img class="image" src="about2.png" alt="Страница Wikimedium на двух планшетах">
</section>
<section class="section third">
<div class="text">
<h2>Реальный проект, реальный<br>
рабочий процесс</h2>
<p>Обучение приближено к работе в реальной жизни,<br>
работа разбита на этапы от типографики, создания<br>
меню и использования эффектов, до адаптации<br>
под мобильные устройства и использования<br>
JavaScript скриптов</p>
</div>
<img class="image" src="about3.png" alt="Страница о доме Наркомфина с меню и фотографией">
</section>
</div>
<section class="learning">
<h2>Возможность самостоятельного<br>
и курируемого обучения</h2>
<p>Вы можете обучаться самостоятельно по исходному коду проекта,<br>
выложенному на Gitea, или записаться на курс «Основы<br>
веб-вёрстки» в Школе Дизайна НИУ ВШЭ</p>
<div class="buttons">
<a class="button source" href="https://git.shanaty.ru/Emil_Shanaty/Design_HSE_Study">Исходный код на Gitea</a>
<a class="button course" href="https://design.hse.ru/">Курс в Школе Дизайна</a>
</div>
</section>
</main>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16" viewBox="0 0 38 16">
<path fill="#000" d="M5 0 10 5 5 10 0 5Zm10 0 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm8 0 5 5-5 5-5-5Z"/>
<path fill="#00e600" d="m5 6 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm8 0 5 5-5 5-5-5Z"/>
</svg>

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

@@ -0,0 +1,13 @@
@font-face {
font-family: "PT Sans";
src: url("../fonts/PTSans-Regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "PT Sans Caption";
src: url("../fonts/PTSansCaption-Regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
}
@@ -0,0 +1,214 @@
* {
box-sizing: border-box;
}
body {
color: #333;
background: white;
font-family: "PT Sans", Arial, sans-serif;
}
a {
color: inherit;
text-decoration: none;
}
.menu {
height: 54px;
padding: 0 20px 0 18px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #eee;
box-shadow: 0 1px 3px #eee;
}
.logo {
display: flex;
align-items: center;
gap: 8px;
color: black;
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 22px;
}
.about-link {
color: #999;
font-size: 16px;
}
.sections {
overflow: hidden;
}
.section {
position: relative;
width: 1204px;
height: 800px;
margin: 0 auto;
}
.text {
width: 600px;
padding-top: 127px;
}
h1, h2 {
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 36px;
font-weight: 400;
line-height: 46px;
}
p {
margin-top: 22px;
font-size: 26px;
line-height: 38px;
}
.image {
position: absolute;
display: block;
height: auto;
}
.first .image {
top: 82px;
left: 641px;
width: 1106px;
}
.second .text {
margin-left: 642px;
padding-top: 119px;
}
.second p {
margin-top: 23px;
}
.second .image {
top: 65px;
left: -42px;
width: 646px;
}
.third .text {
padding-top: 129px;
}
.third .image {
top: 140px;
left: 640px;
width: 1295px;
box-shadow: 0 0 4px #ddd;
}
.learning {
height: 666px;
padding: 129px 20px 0;
border-top: 1px solid #ddd;
text-align: center;
}
.learning p {
margin-top: 23px;
}
.buttons {
display: flex;
justify-content: center;
gap: 20px;
margin-top: 82px;
}
.button {
display: flex;
align-items: center;
justify-content: center;
height: 52px;
border-radius: 5px;
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 16px;
}
.source {
width: 266px;
border: 1px solid #ccc;
color: #777;
}
.course {
width: 300px;
color: white;
background: black;
}
a:focus-visible {
outline: 2px solid #444;
outline-offset: 4px;
}
@media (max-width: 1250px) {
.section {
width: 90%;
height: auto;
padding: 70px 0;
display: flex;
flex-direction: column;
gap: 40px;
}
.section .text {
width: 100%;
margin-left: 0;
padding-top: 0;
}
.section .image {
position: static;
width: 100%;
max-width: 800px;
margin: 0 auto;
}
.second .image {
max-width: 650px;
}
br {
display: none;
}
.learning {
height: auto;
padding: 70px 5% 100px;
}
}
@media (max-width: 600px) {
h1, h2 {
font-size: 28px;
line-height: 36px;
}
p {
font-size: 20px;
line-height: 30px;
}
.section {
padding: 45px 0;
}
.buttons {
flex-direction: column;
align-items: center;
margin-top: 40px;
}
.button {
width: 100%;
max-width: 300px;
}
}
@@ -0,0 +1,43 @@
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
@@ -0,0 +1,3 @@
@import "reset.css";
@import "fonts.css";
@import "layout.css";
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.
@@ -0,0 +1,93 @@
Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public),
with Reserved Font Names "PT Sans" and "ParaType".
This Font Software is licensed under the SIL Open Font License, Version 1.1
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public),
with Reserved Font Names "PT Sans" and "ParaType".
This Font Software is licensed under the SIL Open Font License, Version 1.1
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+70
View File
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>О проекте — Wikimedium</title>
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<header class="menu">
<a class="logo" href="index.html">
<img src="logo.svg" alt="" width="38" height="16">
<span>Wikimedium</span>
</a>
<a class="about-link" href="#about">О проекте</a>
</header>
<main id="about">
<div class="sections">
<section class="section first">
<div class="text">
<h1>Наглядный пример,<br>
чтобы учиться веб-вёрстке</h1>
<p>Разработан для изучения основ веб-вёрстки,<br>
языка гипертекстовой разметки HTML<br>
и каскадных таблиц стилей CSS</p>
</div>
<img class="image" src="about1.png" alt="Страница Wikimedium на ноутбуке и смартфоне">
</section>
<section class="section second">
<div class="text">
<h2>С нуля до первого сайта<br>
под компьютеры, смартфоны<br>
и планшеты</h2>
<p>Чтобы начать изучать веб-вёрстку на этом проекте,<br>
не требуется каких-то специальных знаний, кроме<br>
базового умения пользоваться компьютером</p>
</div>
<img class="image" src="about2.png" alt="Страница Wikimedium на двух планшетах">
</section>
<section class="section third">
<div class="text">
<h2>Реальный проект, реальный<br>
рабочий процесс</h2>
<p>Обучение приближено к работе в реальной жизни,<br>
работа разбита на этапы от типографики, создания<br>
меню и использования эффектов, до адаптации<br>
под мобильные устройства и использования<br>
JavaScript скриптов</p>
</div>
<img class="image" src="about3.png" alt="Страница о доме Наркомфина с меню и фотографией">
</section>
</div>
<section class="learning">
<h2>Возможность самостоятельного<br>
и курируемого обучения</h2>
<p>Вы можете обучаться самостоятельно по исходному коду проекта,<br>
выложенному на Gitea, или записаться на курс «Основы<br>
веб-вёрстки» в Школе Дизайна НИУ ВШЭ</p>
<div class="buttons">
<a class="button source" href="https://git.shanaty.ru/Emil_Shanaty/Design_HSE_Study">Исходный код на Gitea</a>
<a class="button course" href="https://design.hse.ru/">Курс в Школе Дизайна</a>
</div>
</section>
</main>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16" viewBox="0 0 38 16">
<path fill="#000" d="M5 0 10 5 5 10 0 5Zm10 0 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm8 0 5 5-5 5-5-5Z"/>
<path fill="#00e600" d="m5 6 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm8 0 5 5-5 5-5-5Z"/>
</svg>

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

@@ -0,0 +1,13 @@
@font-face {
font-family: "PT Sans";
src: url("../fonts/PTSans-Regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "PT Sans Caption";
src: url("../fonts/PTSansCaption-Regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
}
@@ -0,0 +1,214 @@
* {
box-sizing: border-box;
}
body {
color: #333;
background: white;
font-family: "PT Sans", Arial, sans-serif;
}
a {
color: inherit;
text-decoration: none;
}
.menu {
height: 54px;
padding: 0 20px 0 18px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #eee;
box-shadow: 0 1px 3px #eee;
}
.logo {
display: flex;
align-items: center;
gap: 8px;
color: black;
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 22px;
}
.about-link {
color: #999;
font-size: 16px;
}
.sections {
overflow: hidden;
}
.section {
position: relative;
width: 1204px;
height: 800px;
margin: 0 auto;
}
.text {
width: 600px;
padding-top: 127px;
}
h1, h2 {
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 36px;
font-weight: 400;
line-height: 46px;
}
p {
margin-top: 22px;
font-size: 26px;
line-height: 38px;
}
.image {
position: absolute;
display: block;
height: auto;
}
.first .image {
top: 82px;
left: 641px;
width: 1106px;
}
.second .text {
margin-left: 642px;
padding-top: 119px;
}
.second p {
margin-top: 23px;
}
.second .image {
top: 65px;
left: -42px;
width: 646px;
}
.third .text {
padding-top: 129px;
}
.third .image {
top: 140px;
left: 640px;
width: 1295px;
box-shadow: 0 0 4px #ddd;
}
.learning {
height: 666px;
padding: 129px 20px 0;
border-top: 1px solid #ddd;
text-align: center;
}
.learning p {
margin-top: 23px;
}
.buttons {
display: flex;
justify-content: center;
gap: 20px;
margin-top: 82px;
}
.button {
display: flex;
align-items: center;
justify-content: center;
height: 52px;
border-radius: 5px;
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 16px;
}
.source {
width: 266px;
border: 1px solid #ccc;
color: #777;
}
.course {
width: 300px;
color: white;
background: black;
}
a:focus-visible {
outline: 2px solid #444;
outline-offset: 4px;
}
@media (max-width: 1250px) {
.section {
width: 90%;
height: auto;
padding: 70px 0;
display: flex;
flex-direction: column;
gap: 40px;
}
.section .text {
width: 100%;
margin-left: 0;
padding-top: 0;
}
.section .image {
position: static;
width: 100%;
max-width: 800px;
margin: 0 auto;
}
.second .image {
max-width: 650px;
}
br {
display: none;
}
.learning {
height: auto;
padding: 70px 5% 100px;
}
}
@media (max-width: 600px) {
h1, h2 {
font-size: 28px;
line-height: 36px;
}
p {
font-size: 20px;
line-height: 30px;
}
.section {
padding: 45px 0;
}
.buttons {
flex-direction: column;
align-items: center;
margin-top: 40px;
}
.button {
width: 100%;
max-width: 300px;
}
}
@@ -0,0 +1,43 @@
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
@@ -0,0 +1,3 @@
@import "reset.css";
@import "fonts.css";
@import "layout.css";
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.
Binary file not shown.
+93
View File
@@ -0,0 +1,93 @@
Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public),
with Reserved Font Names "PT Sans" and "ParaType".
This Font Software is licensed under the SIL Open Font License, Version 1.1
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public),
with Reserved Font Names "PT Sans" and "ParaType".
This Font Software is licensed under the SIL Open Font License, Version 1.1
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+70
View File
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>О проекте — Wikimedium</title>
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<header class="menu">
<a class="logo" href="index.html">
<img src="logo.svg" alt="" width="38" height="16">
<span>Wikimedium</span>
</a>
<a class="about-link" href="#about">О проекте</a>
</header>
<main id="about">
<div class="sections">
<section class="section first">
<div class="text">
<h1>Наглядный пример,<br>
чтобы учиться веб-вёрстке</h1>
<p>Разработан для изучения основ веб-вёрстки,<br>
языка гипертекстовой разметки HTML<br>
и каскадных таблиц стилей CSS</p>
</div>
<img class="image" src="about1.png" alt="Страница Wikimedium на ноутбуке и смартфоне">
</section>
<section class="section second">
<div class="text">
<h2>С нуля до первого сайта<br>
под компьютеры, смартфоны<br>
и планшеты</h2>
<p>Чтобы начать изучать веб-вёрстку на этом проекте,<br>
не требуется каких-то специальных знаний, кроме<br>
базового умения пользоваться компьютером</p>
</div>
<img class="image" src="about2.png" alt="Страница Wikimedium на двух планшетах">
</section>
<section class="section third">
<div class="text">
<h2>Реальный проект, реальный<br>
рабочий процесс</h2>
<p>Обучение приближено к работе в реальной жизни,<br>
работа разбита на этапы от типографики, создания<br>
меню и использования эффектов, до адаптации<br>
под мобильные устройства и использования<br>
JavaScript скриптов</p>
</div>
<img class="image" src="about3.png" alt="Страница о доме Наркомфина с меню и фотографией">
</section>
</div>
<section class="learning">
<h2>Возможность самостоятельного<br>
и курируемого обучения</h2>
<p>Вы можете обучаться самостоятельно по исходному коду проекта,<br>
выложенному на Gitea, или записаться на курс «Основы<br>
веб-вёрстки» в Школе Дизайна НИУ ВШЭ</p>
<div class="buttons">
<a class="button source" href="https://git.shanaty.ru/Emil_Shanaty/Design_HSE_Study">Исходный код на Gitea</a>
<a class="button course" href="https://design.hse.ru/">Курс в Школе Дизайна</a>
</div>
</section>
</main>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16" viewBox="0 0 38 16">
<path fill="#000" d="M5 0 10 5 5 10 0 5Zm10 0 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm8 0 5 5-5 5-5-5Z"/>
<path fill="#00e600" d="m5 6 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm10 0 5 5-5 5-5-5Zm8 0 5 5-5 5-5-5Z"/>
</svg>

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

+13
View File
@@ -0,0 +1,13 @@
@font-face {
font-family: "PT Sans";
src: url("../fonts/PTSans-Regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "PT Sans Caption";
src: url("../fonts/PTSansCaption-Regular.ttf") format("truetype");
font-weight: 400;
font-style: normal;
}
+214
View File
@@ -0,0 +1,214 @@
* {
box-sizing: border-box;
}
body {
color: #333;
background: white;
font-family: "PT Sans", Arial, sans-serif;
}
a {
color: inherit;
text-decoration: none;
}
.menu {
height: 54px;
padding: 0 20px 0 18px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #eee;
box-shadow: 0 1px 3px #eee;
}
.logo {
display: flex;
align-items: center;
gap: 8px;
color: black;
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 22px;
}
.about-link {
color: #999;
font-size: 16px;
}
.sections {
overflow: hidden;
}
.section {
position: relative;
width: 1204px;
height: 800px;
margin: 0 auto;
}
.text {
width: 600px;
padding-top: 127px;
}
h1, h2 {
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 36px;
font-weight: 400;
line-height: 46px;
}
p {
margin-top: 22px;
font-size: 26px;
line-height: 38px;
}
.image {
position: absolute;
display: block;
height: auto;
}
.first .image {
top: 82px;
left: 641px;
width: 1106px;
}
.second .text {
margin-left: 642px;
padding-top: 119px;
}
.second p {
margin-top: 23px;
}
.second .image {
top: 65px;
left: -42px;
width: 646px;
}
.third .text {
padding-top: 129px;
}
.third .image {
top: 140px;
left: 640px;
width: 1295px;
box-shadow: 0 0 4px #ddd;
}
.learning {
height: 666px;
padding: 129px 20px 0;
border-top: 1px solid #ddd;
text-align: center;
}
.learning p {
margin-top: 23px;
}
.buttons {
display: flex;
justify-content: center;
gap: 20px;
margin-top: 82px;
}
.button {
display: flex;
align-items: center;
justify-content: center;
height: 52px;
border-radius: 5px;
font-family: "PT Sans Caption", Arial, sans-serif;
font-size: 16px;
}
.source {
width: 266px;
border: 1px solid #ccc;
color: #777;
}
.course {
width: 300px;
color: white;
background: black;
}
a:focus-visible {
outline: 2px solid #444;
outline-offset: 4px;
}
@media (max-width: 1250px) {
.section {
width: 90%;
height: auto;
padding: 70px 0;
display: flex;
flex-direction: column;
gap: 40px;
}
.section .text {
width: 100%;
margin-left: 0;
padding-top: 0;
}
.section .image {
position: static;
width: 100%;
max-width: 800px;
margin: 0 auto;
}
.second .image {
max-width: 650px;
}
br {
display: none;
}
.learning {
height: auto;
padding: 70px 5% 100px;
}
}
@media (max-width: 600px) {
h1, h2 {
font-size: 28px;
line-height: 36px;
}
p {
font-size: 20px;
line-height: 30px;
}
.section {
padding: 45px 0;
}
.buttons {
flex-direction: column;
align-items: center;
margin-top: 40px;
}
.button {
width: 100%;
max-width: 300px;
}
}
+43
View File
@@ -0,0 +1,43 @@
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
+3
View File
@@ -0,0 +1,3 @@
@import "reset.css";
@import "fonts.css";
@import "layout.css";
+39
View File
@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flexbox</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container row">
<div class="left column">
<div class="top row">
<div class="left-column column">
<div class="box tall"></div>
<div class="box"></div>
</div>
<div class="middle column">
<div class="middle-top row">
<div class="box"></div>
<div class="box"></div>
</div>
<div class="box"></div>
</div>
</div>
<div class="bottom row">
<div class="box wide"></div>
<div class="box"></div>
</div>
</div>
<div class="right column">
<div class="box tall"></div>
<div class="box"></div>
</div>
</div>
</body>
</html>
+56
View File
@@ -0,0 +1,56 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
background-color: #222;
}
.row, .column {
display: flex;
gap: 10px;
}
.column {
flex-direction: column;
}
.container {
width: 850px;
height: 630px;
margin: 40px auto 0;
padding: 10px 20px;
background-color: black;
}
.left, .middle, .top {
flex: 1;
}
.left-column, .right {
width: 190px;
}
.middle-top, .bottom {
height: 170px;
}
.box {
flex: 1;
background-color: white;
border-radius: 10px;
}
.tall {
flex: none;
height: 280px;
}
.right .tall {
height: 310px;
}
.wide {
flex: 2;
}
+212
View File
@@ -0,0 +1,212 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mattee — вакансии</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="page">
<header class="header">
<a class="logo" href="index.html">mattee</a>
<nav>
<a href="#vacancies">Вакансии</a>
<a href="#publish">Работодателям</a>
</nav>
<button class="publish" id="publish" type="button">Опубликовать</button>
</header>
<section class="banner">
<div class="shape pink"></div>
<div class="shape green"></div>
<div class="shape blue"></div>
<div class="banner-text">
<h1>Больше вакансий<br>в telegram-канале</h1>
<button type="button">Перейти в ТГ канал</button>
</div>
</section>
<main class="content">
<aside class="filters">
<input class="search" type="search" placeholder="Поиск" aria-label="Поиск вакансий">
<div class="filter-group">
<h3>Формат</h3>
<div class="options">
<span>Парт-тайм</span>
<span>Фулл-тайм</span>
<span>Стажировка</span>
</div>
</div>
<div class="filter-group">
<h3>Формат</h3>
<div class="options">
<span>Офис</span>
<span>Удаленно</span>
<span>Гибрид</span>
</div>
</div>
<div class="filter-group">
<h3>Грейд</h3>
<div class="options">
<span>Junior</span>
<span>Middle</span>
<span>Senior</span>
<span>Lead</span>
<span>Head</span>
</div>
</div>
<div class="filter-group">
<h3>Локация</h3>
<div class="cities">
<label>Москва <input type="checkbox" name="city" value="moscow"></label>
<label>Санкт-Петербург <input type="checkbox" name="city" value="saint-petersburg"></label>
<label>Казань <input type="checkbox" name="city" value="kazan"></label>
<label>Нижний Новгород <input type="checkbox" name="city" value="nizhny-novgorod"></label>
</div>
</div>
<div class="filter-group">
<h3>Зарплата</h3>
<div class="salary">
<input type="number" min="0" placeholder="Минимум" aria-label="Минимальная зарплата">
<input type="number" min="0" placeholder="Максимум" aria-label="Максимальная зарплата">
</div>
</div>
</aside>
<section class="cards" id="vacancies" aria-label="Вакансии">
<article class="card">
<div class="company-row">
<p class="company"><span>●</span> Т-Банк</p>
<span class="new">Новая</span>
</div>
<h2>Художник концепт-арта</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<div class="company-row">
<p class="company"><span>●</span> Apple</p>
<span class="new">Новая</span>
</div>
<h2>UI/UX Дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> ВТБ</p>
<h2>Графический дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> Т-Банк</p>
<h2>Промышленный дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> Apple</p>
<h2>Диджитал дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> ВТБ</p>
<h2>Художник концепт-арта</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> Т-Банк</p>
<h2>Промышленный дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> Т-Банк</p>
<h2>Промышленный дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> Т-Банк</p>
<h2>Промышленный дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> Т-Банк</p>
<h2>Промышленный дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> ВТБ</p>
<h2>Графический дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
<article class="card">
<p class="company"><span>●</span> ВТБ</p>
<h2>Графический дизайнер</h2>
<p class="location">Москва, формат работы</p>
<div class="card-bottom">
<div class="tags"><span>280 000 ₽</span><span>Фулл-тайм</span></div>
<span class="grade">Junior</span>
</div>
</article>
</section>
</main>
</div>
</body>
</html>
+290
View File
@@ -0,0 +1,290 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
background: #f3f3f4;
color: #171717;
font-family: Arial, sans-serif;
font-size: 14px;
}
.page {
max-width: 1200px;
margin: 0 auto;
padding: 0 16px 30px;
}
a {
color: inherit;
text-decoration: none;
}
button, input {
font: inherit;
}
button {
border: 0;
border-radius: 9px;
padding: 12px 24px;
cursor: pointer;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 14px 0;
gap: 20px;
}
.logo {
font-size: 40px;
font-weight: 900;
letter-spacing: -2px;
}
.header nav {
display: flex;
gap: 30px;
}
.publish {
background: #087fff;
color: white;
}
.banner {
position: relative;
overflow: hidden;
padding: 55px 20px 30px;
margin-bottom: 20px;
border-radius: 18px;
background: white;
text-align: center;
}
.banner-text {
position: relative;
}
.banner h1 {
margin: 0 0 26px;
font-size: 42px;
line-height: 1.05;
}
.banner button {
background: #171717;
color: white;
}
.shape {
position: absolute;
width: 190px;
height: 190px;
border-radius: 50%;
}
.pink {
top: -95px;
left: -30px;
border-radius: 25px;
background: #fa50c8;
transform: rotate(-20deg);
}
.green {
bottom: -100px;
left: -50px;
background: #49f3b9;
}
.blue {
right: -55px;
bottom: -100px;
background: #4e9dff;
}
.content {
display: flex;
align-items: flex-start;
gap: 20px;
}
.filters, .card {
padding: 18px;
border: 1px solid #e5e5e7;
border-radius: 16px;
background: #fafafa;
box-shadow: 0 2px 3px #00000008;
}
.filters {
width: 300px;
flex-shrink: 0;
}
.search, .salary input {
width: 100%;
min-width: 0;
padding: 10px;
border: 1px solid #e5e5e7;
border-radius: 8px;
background: #f3f3f4;
}
.filter-group {
margin-top: 20px;
}
.filter-group h3 {
margin: 0 0 9px;
font-size: 12px;
}
.options, .salary, .tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.options span, .tags span, .grade {
padding: 5px 7px;
border-radius: 5px;
background: #f0f0f2;
font-size: 11px;
}
.options span {
color: #74747d;
}
.cities {
padding: 8px 10px;
border-radius: 8px;
background: #f3f3f4;
}
.cities label {
display: flex;
justify-content: space-between;
align-items: center;
padding: 4px 0;
font-size: 12px;
}
.salary {
flex-wrap: nowrap;
}
.salary input {
width: 50%;
font-size: 12px;
}
.cards {
display: flex;
flex-wrap: wrap;
flex: 1;
gap: 12px;
}
.card {
position: relative;
display: flex;
flex-direction: column;
width: calc((100% - 24px) / 3);
min-height: 220px;
}
.company-row {
display: flex;
justify-content: space-between;
align-items: center;
}
.company {
margin: 0;
font-size: 11px;
}
.company span {
color: #ffc900;
font-size: 17px;
}
.new {
position: absolute;
top: -5px;
right: -5px;
transform: rotate(15deg);
padding: 4px 8px;
border-radius: 12px;
background: #087fff;
color: white;
font-size: 10px;
}
.card h2 {
margin: 8px 0 5px;
font-size: 19px;
font-weight: 400;
line-height: 1.1;
}
.location {
margin: 0;
color: #858585;
font-size: 11px;
}
.card-bottom {
margin-top: auto;
padding-top: 30px;
}
.grade {
display: inline-block;
margin-top: 6px;
}
@media (max-width: 1000px) {
.filters {
width: 240px;
}
.card {
width: calc((100% - 12px) / 2);
}
}
@media (max-width: 600px) {
.header {
flex-wrap: wrap;
}
.header nav {
order: 1;
width: 100%;
justify-content: center;
}
.banner h1 {
font-size: 28px;
}
.shape {
display: none;
}
.content {
flex-direction: column;
}
.filters, .cards, .card {
width: 100%;
}
}
+108
View File
@@ -0,0 +1,108 @@
# Парад цвета
Одностраничный лендинг концепта фестиваля «Парад цвета» — музыка, общение и
цветной порошок в духе Холи. Учебный проект по айдентике: знак, флаги и графика
из Figma собраны в веб-страницу.
## Ссылка на сайт
https://git.shanaty.ru/pub/design_hse_study/color-parade/
Страница статическая: сборки нет, всё лежит в `index.html`, `styles.css` и
`assets/`. Чтобы открыть локально, достаточно запустить в папке проекта
`python3 -m http.server 8000` и зайти на `http://localhost:8000`.
## Скриншот
![Главная страница](images/screenshot.png)
## Автор
Эмиль Шанаев, группа БРИЦП262, 1 модуль, 2026.
## Что я научился делать
- Раскладывать страницу по макету из Figma сеткой, а не абсолютным
позиционированием: плитки, карточки событий и блок мерча — это `grid`.
- Делать заголовки резиновыми через `clamp()` — они не ломают вёрстку на
телефоне и не выглядят мелкими на широком экране.
- Обрезать фотографии через `object-fit` и `object-position`: кадр
подстраивается под блок, но лицо и главное в кадре не обрезается.
- Долго не получалось с фото-стопкой в блоке «О фестивале»: два повёрнутых
снимка налезали друг на друга и вылезали за сетку. Помогло `position:
absolute` внутри блока с `min-height` и отдельные `transform: rotate()` для
каждого фото.
- Проверять страницу на 375, 768 и 1440 px и не забывать про
`prefers-reduced-motion` и заметный фокус у ссылок.
## Использование ИИ
### Инструменты
| Инструмент | Для чего использовал | Уровень помощи |
| --- | --- | --- |
| GPT Astra | Каркас страницы, сетки и адаптив по макету | 3 |
| DeepSeek 4.1 Flash | Объяснял свойства CSS, помогал с ошибками и с черновиками текстов | 2 |
| GPT Image Sunburst | Сгенерировал фото-мокапы для концепта | 3 |
Уровни: 2 — ИИ подсказал фрагмент или нашёл ошибку, 3 — ИИ написал заметный
кусок кода или картинку, которые я вставил и разобрал.
Код, который написал ИИ, помечен комментариями в `index.html` и `styles.css`
(«ИИ: … Запись №… в README»).
### Записи о запросах
#### Запись №1 · 21.10.2026
- **Что я хотел сделать:** сверстать страницу по макету из Figma — шапку,
обложку с флагом, бегущую строку, три цветные плитки, тёмный блок о
фестивале, карточки событий и мерч.
- **Что я спросил:** попросил собрать каркас лендинга по макету и сразу
сделать адаптив под телефон.
- **Что ответил ИИ:** выдал HTML-разметку по секциям и CSS с переменными
цветов, сетками и тремя медиазапросами.
- **Что я изменил сам:** поправил размеры и отступы заголовков, переделал
фото-стопку в блоке «О фестивале» и обрезку картинок, убрал лишние обёртки,
подогнал брейкпоинты под свои 1050, 800 и 520 px.
- **Как я понял, что это работает:** открыл страницу в браузере и сузил окно
до 375 px — по горизонтали ничего не вылезает, меню переносится, плитки
встают в колонку.
#### Запись №2 · 21.10.2026
- **Что я хотел сделать:** получить фотографии для концепта, потому что
реального фестиваля не было.
- **Что я спросил:** попросил сгенерировать кадры фестиваля красок, стену с
плакатами и мерч в этой айдентике.
- **Что ответил ИИ:** сделал изображения 3072×2048, которые пришлось обрезать
под пропорции блоков.
- **Что я изменил сам:** выбрал кадры, обрезал их до 3:2, сжал в JPEG и
выставил `object-position`, чтобы в карточках не резались лица.
- **Как я понял, что это работает:** вставил картинки в макет и проверил,
как они смотрятся под текстом на широком и узком экране.
#### Запись №3 · 27.10.2026
- **Что я хотел сделать:** довести страницу до сдачи — проверить доступность
и мелочи, которые не видно на скриншоте.
- **Что я спросил:** что ещё стоит добавить в статичную страницу для
доступности и удобства.
- **Что ответил ИИ:** предложил skip-link, `aria-labelledby` у секций,
`focus-visible` и `prefers-reduced-motion`.
- **Что я изменил сам:** добавил skip-link и подписи секций, поправил alt
у декоративных картинок (у них теперь пустой alt и `aria-hidden`), проверил,
что фокус видно на тёмном фоне.
- **Как я понял, что это работает:** прошёл по странице клавишей Tab,
включил в DevTools эмуляцию `prefers-reduced-motion` и посмотрел, что
прокрутка и кнопки перестают анимироваться.
### Выводы
Больше всего ИИ помог на старте: с готовым каркасом проще править, чем
начинать с пустого файла. Ошибался он в мелочах — например, предлагал
фиксированные размеры заголовков вместо `clamp()` и не думал про узкие экраны,
пока я сам не сузил окно. Макет он не видел, поэтому цвета и отступы всё равно
приходилось сверять с Figma. Теперь я понимаю, как в этой вёрстке работают
сетки, `object-fit` и медиазапросы, и смогу собрать такую страницу без
подсказок.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

+144
View File
@@ -0,0 +1,144 @@
<!doctype html>
<!-- ИИ: каркас разметки и секции собраны с ИИ (GPT Astra), дальше правил вручную. Запись №1 в README -->
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Парад цвета — фестиваль музыки, общения и ярких красок в духе Холи.">
<title>Парад цвета — фестиваль музыки и красок</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<a class="skip-link" href="#main">К содержанию</a>
<div class="page">
<header class="header shell">
<a class="brand" href="#top" aria-label="Парад цвета — на главную">
<svg class="brand-mark" viewBox="0 0 120 120" aria-hidden="true">
<circle cx="31" cy="38" r="25" fill="#00AEEF"/>
<circle cx="89" cy="38" r="25" fill="#EC008C"/>
<circle cx="60" cy="82" r="25" fill="#FFF200"/>
<circle cx="60" cy="60" r="23" fill="#181818"/>
</svg>
<span>ПАРАД<br>ЦВЕТА</span>
</a>
<nav class="nav" aria-label="Основная навигация">
<a href="#about">О фестивале</a>
<a href="#events">События</a>
<a href="#merch">Мерч</a>
<a href="#contacts">Контакты</a>
</nav>
<a class="button button-small" href="#events">Билеты <span aria-hidden="true">↗</span></a>
</header>
<main id="main">
<section class="hero shell" id="top" aria-labelledby="hero-title">
<div class="hero-art" aria-hidden="true"><img src="assets/images/flag_2_scribble.png" alt=""></div>
<div class="hero-copy">
<p class="kicker">Фестиваль музыки, общения и ярких красок</p>
<h1 id="hero-title">ПАРАД<br>ЦВЕТА</h1>
<p class="hero-lead">Встречаемся, слушаем музыку, танцуем и наполняем день цветом — вместе с друзьями и новыми знакомыми.</p>
<a class="button" href="#what">Что вас ждёт <span aria-hidden="true">↗</span></a>
</div>
</section>
<div class="ticker" aria-label="Цвет, музыка, люди">
<span>ЦВЕТ • МУЗЫКА • ЛЮДИ • ЦВЕТ • МУЗЫКА • ЛЮДИ • ЦВЕТ • МУЗЫКА • ЛЮДИ</span>
</div>
<section class="section shell" id="what" aria-labelledby="what-title">
<p class="kicker">Один день. Тысячи оттенков.</p>
<h2 id="what-title">Что вас ждёт</h2>
<div class="feature-grid">
<article class="feature feature-cyan">
<span class="feature-number">01</span>
<h3>Общий зал красок</h3>
<p>Поднимаем руки — и над толпой вырастает облако цвета.</p>
</article>
<article class="feature feature-magenta">
<span class="feature-number">02</span>
<h3>Музыка и движение</h3>
<p>Танцуем, подпеваем и находим свой ритм.</p>
</article>
<article class="feature feature-yellow">
<span class="feature-number">03</span>
<h3>Кадры на память</h3>
<p>Собираем друзей в кадре и ловим самые яркие моменты.</p>
</article>
</div>
<p class="section-note">Приходи за впечатлениями. Уходи в новых цветах.</p>
</section>
<section class="about" id="about" aria-labelledby="about-title">
<div class="shell about-grid">
<div class="about-copy">
<p class="kicker">О фестивале</p>
<h2 id="about-title">Цвет объединяет</h2>
<p class="lead">«Парад цвета» — пространство, где не нужно соблюдать дистанцию между сценой и зрителем. Музыка, движение и цветной порошок создают общий праздник.</p>
<p>Можно прийти с друзьями или познакомиться с новыми людьми прямо на площадке. Главное — быть готовым к ярким кадрам и одежде, на которой останется история этого дня.</p>
</div>
<div class="photo-stack" aria-label="Фотографии фестиваля">
<figure class="photo photo-back"><img src="assets/images/festival.jpg" alt="Участники фестиваля среди разноцветных облаков порошка" loading="lazy"></figure>
<figure class="photo photo-front"><img src="assets/images/festival.jpg" alt="Толпа на фестивале красок" loading="lazy"></figure>
<span class="spark" aria-hidden="true">✳</span>
</div>
</div>
</section>
<section class="section shell" id="events" aria-labelledby="events-title">
<div class="section-heading">
<div><p class="kicker">Впечатления</p><h2 id="events-title">События</h2></div>
<p>Три повода оказаться внутри праздника, а не наблюдать со стороны.</p>
</div>
<div class="card-grid">
<article class="card">
<img src="assets/images/powder.jpg" alt="Облако цветного порошка" loading="lazy">
<div class="card-body"><span class="tag">Общий праздник</span><h3>Зал красок</h3><p>Синхронный запуск цветного порошка объединяет всю площадку в одну яркую картину.</p><a class="text-link" href="#what">Смотреть программу <span aria-hidden="true">↗</span></a></div>
</article>
<article class="card">
<img src="assets/images/festival.jpg" alt="Участники фестиваля поднимают руки" loading="lazy">
<div class="card-body"><span class="tag">Музыка</span><h3>Живая сцена</h3><p>Музыка задаёт ритм дня: от первых встреч до общего финального танца.</p><a class="text-link" href="#what">Смотреть программу <span aria-hidden="true">↗</span></a></div>
</article>
<article class="card">
<img src="assets/images/wall.jpg" alt="Плакаты фестиваля на стене" loading="lazy">
<div class="card-body"><span class="tag">Вместе</span><h3>Творческие зоны</h3><p>Фотографии, рисунки и фирменная графика помогают унести часть фестиваля с собой.</p><a class="text-link" href="#what">Смотреть программу <span aria-hidden="true">↗</span></a></div>
</article>
</div>
</section>
<section class="merch" id="merch" aria-labelledby="merch-title">
<div class="shell">
<div class="section-heading">
<div><p class="kicker">Фирменная коллекция</p><h2 id="merch-title">Мерч</h2></div>
<p>Знак, флаги и CMYK-графика переходят с экрана на вещи.</p>
</div>
<div class="merch-layout">
<figure class="merch-photo"><img src="assets/images/merch.jpg" alt="Шоппер, стакан, стикеры и бейдж с айдентикой Парада цвета" loading="lazy"></figure>
<div class="merch-list">
<article><span>01</span><div><h3>Шоппер</h3><p>Большой росчерк на кремовой основе.</p></div></article>
<article><span>02</span><div><h3>Стакан</h3><p>Знак фестиваля из четырёх кругов.</p></div></article>
<article><span>03</span><div><h3>Бейдж участника</h3><p>Фирменная графика и цветной шнурок.</p></div></article>
</div>
</div>
</div>
</section>
</main>
<footer class="footer" id="contacts">
<div class="shell footer-grid">
<div class="footer-title"><p class="kicker">До встречи в цвете</p><h2>ПАРАД<br>ЦВЕТА</h2></div>
<div>
<h3>О проекте</h3>
<p>Концепт фестиваля: проведение события и продажа билетов не планируются.</p>
<a class="text-link" href="https://figma.com/design/zFGCJKaBusfMvKccvAeMMx/Shanayev">Макет в Figma <span aria-hidden="true">↗</span></a>
</div>
<div>
<h3>Об авторе</h3>
<p>Учебный проект Эмиля Шанаева<br>Группа БРИЦП262<br>1 модуль, 2026</p>
<a class="text-link" href="https://git.shanaty.ru/Emil_Shanaty/Design_HSE_Study/src/branch/gh-pages/color-parade">Код на Gitea <span aria-hidden="true">↗</span></a>
</div>
</div>
<div class="shell footer-bottom"><span>Фестиваль музыки, общения и ярких красок</span><a href="#top">Наверх ↑</a></div>
</footer>
</div>
</body>
</html>
+150
View File
@@ -0,0 +1,150 @@
/* ИИ: базовая сетка, переменные и адаптив — GPT Astra, дальше правил вручную. Запись №1 в README */
@font-face{font-family:Inter;src:url("assets/fonts/Inter-Regular.ttf") format("truetype");font-weight:400;font-display:swap}
@font-face{font-family:Inter;src:url("assets/fonts/Inter-Medium.ttf") format("truetype");font-weight:500;font-display:swap}
@font-face{font-family:Inter;src:url("assets/fonts/Inter-SemiBold.ttf") format("truetype");font-weight:600;font-display:swap}
@font-face{font-family:InterDisplay;src:url("assets/fonts/InterDisplay-Black.ttf") format("truetype");font-weight:900;font-display:swap}
:root{--ink:#181818;--paper:#fffdf5;--white:#fff;--muted:#68645f;--hair:#dedbd3;--cy:#00aeef;--mg:#ec008c;--yl:#fff200}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:110px}
body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,Arial,sans-serif;font-size:18px;line-height:1.55}
body,html{overflow-x:hidden}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
button,a,input,label{-webkit-tap-highlight-color:transparent}
a:focus-visible,label:focus-visible{outline:3px solid var(--ink);outline-offset:5px}
.shell{width:min(1360px,calc(100% - 96px));margin-inline:auto}
.page{--accent:#ea268c;--accent-soft:#f7e6ef;--on-accent:#fff;min-height:100vh;overflow:hidden}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip-link{position:fixed;left:20px;top:12px;z-index:100;padding:12px 18px;background:var(--ink);color:#fff;transform:translateY(-160%)}
.skip-link:focus{transform:translateY(0)}
.header{min-height:112px;display:flex;align-items:center;gap:36px;border-bottom:1px solid var(--hair);position:relative;z-index:5}
.brand{display:flex;align-items:center;gap:10px;flex:none;font-family:InterDisplay,Inter,sans-serif;font-size:20px;font-weight:900;line-height:.9;letter-spacing:-.03em}
.brand-mark{width:54px;height:54px}
.nav{display:flex;justify-content:center;gap:32px;margin-left:auto;font-size:16px}
.nav a{padding:8px 0;border-bottom:2px solid transparent}
.nav a:hover{border-color:var(--accent)}
.button{display:inline-flex;align-items:center;justify-content:space-between;gap:40px;min-height:68px;padding:0 28px;background:var(--ink);color:#fff;border:2px solid var(--ink);font-weight:500;transition:background .18s,color .18s}
.button:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.button-small{min-height:48px;padding:0 20px;gap:22px;font-size:15px}
.hero{min-height:760px;position:relative;display:flex;align-items:center;padding-block:92px 108px}
.hero-copy{position:relative;z-index:2;width:min(760px,64%)}
.kicker{margin:0 0 20px;text-transform:uppercase;letter-spacing:.15em;font-size:14px;font-weight:600;color:var(--muted)}
h1,h2,h3,p{margin-top:0}
h1,h2{font-family:InterDisplay,Inter,sans-serif;font-weight:900;letter-spacing:-.055em}
h1{margin-bottom:36px;font-size:clamp(92px,10.2vw,156px);line-height:.84}
h2{margin-bottom:36px;font-size:clamp(54px,6vw,88px);line-height:.92}
h3{margin-bottom:12px;font-size:24px;line-height:1.15;letter-spacing:-.025em}
.hero-lead{max-width:630px;margin-bottom:38px;font-size:22px;line-height:1.5}
.hero-art{position:absolute;z-index:0;width:920px;right:-270px;top:50%;transform:translateY(-50%) rotate(-7deg);opacity:.98}
.hero:after{content:"";position:absolute;z-index:1;inset:0;background:linear-gradient(90deg,var(--paper) 0%,var(--paper) 43%,transparent 72%);pointer-events:none}
.ticker{overflow:hidden;background:var(--yl);border-block:2px solid var(--ink);padding:16px 0;white-space:nowrap;font-family:InterDisplay,Inter,sans-serif;font-size:27px;font-weight:900;letter-spacing:.025em}
.ticker span{display:block;width:max-content;min-width:100%;text-align:center}
.section{padding-block:110px}
.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.feature{min-height:310px;padding:30px;display:flex;flex-direction:column}
.feature-cyan{background:var(--cy)}.feature-magenta{background:var(--mg)}.feature-yellow{background:var(--yl)}
.feature-number{font-family:InterDisplay,Inter,sans-serif;font-size:62px;font-weight:900;line-height:1}
.feature h3{margin-top:auto;font-size:29px}
.feature p{margin-bottom:0;max-width:310px}
.section-note{margin:36px 0 0;color:var(--muted);font-size:22px}
.about{padding-block:120px;background:var(--ink);color:#fff}
.about .kicker{color:#bdb8b0}
.about-grid{display:grid;grid-template-columns:.86fr 1.14fr;gap:100px;align-items:center}
.about-copy .lead{font-size:24px;line-height:1.5}
.about-copy p:last-child{color:#cbc7c0;max-width:560px}
.photo-stack{position:relative;min-height:570px}
.photo{position:absolute;margin:0;padding:12px 12px 52px;background:var(--paper);box-shadow:0 20px 45px #0005}
.photo img{width:100%;height:100%;object-fit:cover}
.photo-back{width:68%;height:390px;right:0;top:0;transform:rotate(7deg)}
.photo-back img{object-position:20% center}
.photo-front{width:66%;height:360px;left:0;bottom:0;transform:rotate(-7deg)}
.photo-front img{object-position:80% center}
.spark{position:absolute;right:1%;bottom:2%;color:var(--accent);font-size:110px;line-height:1}
.section-heading{display:flex;align-items:end;justify-content:space-between;gap:50px;margin-bottom:44px}
.section-heading h2{margin-bottom:0}
.section-heading>p{max-width:430px;margin-bottom:8px;color:var(--muted)}
.card-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.card{background:#fff;border:1px solid var(--hair)}
.card>img{width:100%;height:265px;object-fit:cover;background:#fff}
.card:nth-child(2)>img{object-position:center 42%}
.card-body{padding:28px}
.card-body p{color:var(--muted)}
.tag{display:inline-block;margin-bottom:20px;padding:5px 11px;background:var(--accent-soft);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.1em}
.text-link{display:inline-flex;gap:10px;align-items:center;padding-bottom:3px;border-bottom:2px solid var(--accent);font-weight:600}
.text-link:hover{color:var(--accent)}
.merch{padding-block:110px;background:var(--accent-soft)}
.merch-layout{display:grid;grid-template-columns:1.4fr 1fr;gap:50px;align-items:stretch}
.merch-photo{margin:0;min-height:520px;background:#e8e1d6;overflow:hidden}
.merch-photo img{width:100%;height:100%;object-fit:cover}
.merch-list{display:flex;flex-direction:column;border-top:2px solid var(--ink)}
.merch-list article{flex:1;display:grid;grid-template-columns:50px 1fr;gap:16px;padding:28px 0;border-bottom:1px solid #9994}
.merch-list article>span{font-size:14px;font-weight:600;color:var(--muted)}
.merch-list p{margin-bottom:0;color:var(--muted)}
.footer{padding-top:100px;background:var(--ink);color:#fff}
.footer .kicker{color:#bdb8b0}
.footer-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:60px;padding-bottom:80px}
.footer h2{font-size:clamp(64px,7vw,106px);margin-bottom:0}
.footer h3{font-size:18px;margin-bottom:22px}
.footer p{color:#cbc7c0}
.footer .text-link{display:flex;width:max-content;max-width:100%;margin-top:16px}
.footer-bottom{display:flex;justify-content:space-between;gap:30px;padding-block:26px;border-top:1px solid #ffffff35;color:#bdb8b0;font-size:14px}
.footer-bottom a{color:#fff}
@media (max-width:1050px){
.shell{width:min(100% - 56px,1360px)}
.header{gap:22px}.nav{gap:20px}.nav a{font-size:14px}
.hero{min-height:680px}.hero-art{right:-390px}.hero-copy{width:70%}
.about-grid{gap:45px}.card-body{padding:22px}.feature{padding:24px}
.merch-layout{grid-template-columns:1.15fr 1fr;gap:34px}
}
@media (max-width:800px){
html{scroll-padding-top:90px}
.shell{width:calc(100% - 40px)}
.header{min-height:94px;flex-wrap:wrap;gap:14px;padding-block:16px}
.brand{font-size:17px}.brand-mark{width:44px;height:44px}
.button-small{margin-left:auto;min-height:42px}
.nav{order:3;width:100%;justify-content:space-between;gap:12px;margin:0;border-top:1px solid var(--hair);padding-top:8px}
.hero{min-height:700px;padding-block:90px 80px;align-items:start}
.hero-copy{width:100%}.hero-lead{max-width:530px;font-size:20px}
.hero-art{width:700px;right:-320px;top:55%;opacity:.55}
.hero:after{background:linear-gradient(90deg,var(--paper) 0%,#fffdf5e8 55%,transparent 100%)}
.feature-grid,.card-grid{grid-template-columns:1fr}
.feature{min-height:240px}.feature h3{margin-top:55px}
.section{padding-block:80px}.section-heading{display:block}.section-heading>p{margin-top:24px}
.card{display:grid;grid-template-columns:.9fr 1.1fr}.card>img{height:100%;min-height:320px}
.about{padding-block:85px}.about-grid{grid-template-columns:1fr}.photo-stack{min-height:530px}
.merch-layout{grid-template-columns:1fr}.merch-photo{min-height:420px}
.footer-grid{grid-template-columns:1fr 1fr}.footer-title{grid-column:1/-1}
}
@media (max-width:520px){
body{font-size:16px}.shell{width:calc(100% - 32px)}
.header{gap:12px}.brand{font-size:15px}.brand-mark{width:39px;height:39px}
.button-small{font-size:13px;padding:0 14px;gap:12px}
.nav{overflow-x:auto;justify-content:flex-start;gap:24px;font-size:13px;white-space:nowrap}
.hero{min-height:660px;padding-top:86px}
h1{font-size:clamp(72px,24vw,112px);margin-bottom:28px}
h2{font-size:52px}.kicker{font-size:11px;margin-bottom:16px}
.hero-lead{font-size:18px;line-height:1.5;max-width:94%}
.hero .button{min-height:58px;font-size:15px}
.hero-art{width:570px;right:-280px;top:55%;opacity:.42}
.ticker{font-size:21px;padding-block:12px}.ticker span{text-align:left}
.section{padding-block:64px}.feature-grid{gap:14px}.feature{min-height:230px;padding:24px}
.feature-number{font-size:50px}.feature h3{font-size:25px;margin-top:45px}
.section-note{font-size:18px;line-height:1.45}
.about-copy .lead{font-size:20px}.photo-stack{min-height:400px}
.photo{padding:8px 8px 34px}.photo-back{height:285px}.photo-front{height:255px}.spark{font-size:76px}
.card{display:block}.card>img{height:230px;min-height:0}.card-body{padding:24px}
.merch{padding-block:65px}.merch-photo{min-height:280px}.merch-list article{padding-block:24px}
.footer{padding-top:65px}.footer-grid{grid-template-columns:1fr;gap:40px;padding-bottom:50px}.footer-title{grid-column:auto}
.footer-bottom{align-items:start;font-size:12px}.footer-bottom span{max-width:230px}
}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.button{transition:none}}
+28
View File
@@ -0,0 +1,28 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="refresh" content="0; url=./responsive-lab/">
<title>Практикум по адаптивной вёрстке</title>
<link rel="canonical" href="./responsive-lab/">
<style>
body {
margin: 0;
min-height: 100vh;
display: grid;
place-items: center;
color: #222;
font: 1rem/1.5 Arial, sans-serif;
text-align: center;
}
a {
color: #315cb0;
}
</style>
</head>
<body>
<p><a href="./responsive-lab/">Перейти к практикуму по адаптивной вёрстке</a></p>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
# Практикум по адаптивной вёрстке
Откройте `index.html` в браузере и редакторе кода. Для работы достаточно браузера и любого текстового редактора.
- **index.html** — условия заданий, готовая разметка для заданий 01–05 и места для своей разметки в заданиях 06–10.
- **student.css** — файл для ваших стилей. Для каждого задания в нём есть свой раздел.
- **lab.css** — оформление практикума. Оставьте этот файл как есть.
- **mountains.svg** — местная иллюстрация для заданий с изображением.
После каждого изменения сохраните файл и обновите страницу. В режиме устройства в инструментах разработчика задавайте ширину и высоту области просмотра по условиям задания. Для проверки медиазапросов попробуйте ширину на один пиксель меньше порога и ровно на пороге.
+186
View File
@@ -0,0 +1,186 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Практикум по адаптивной вёрстке</title>
<link rel="stylesheet" href="lab.css">
<link rel="stylesheet" href="student.css">
</head>
<body>
<main class="lab-wrap lab-main">
<section class="lab-card" id="exercise-01">
<p class="lab-label">01 · Проценты</p>
<h2>Полоска в половину контейнера</h2>
<p>Сделайте синюю полоску <code>.meter</code> шириной 50% от её родителя <code>.track</code>. Попробуйте менять ширину окна.</p>
<p class="lab-check"><strong>Проверка.</strong> На 360 и 800 px синяя полоска занимает ровно половину серой дорожки.</p>
<div class="lab-stage task-01">
<div class="track">
<div class="meter"></div>
</div>
</div>
</section>
<section class="lab-card" id="exercise-02">
<p class="lab-label">02 · Ограничение ширины</p>
<h2>Карточка с полями</h2>
<p>Задайте <code>.note</code> ширину 90% от площадки, ограничьте её до 420 px с помощью <code>max-width</code> и расположите по центру. Внутренние отступы должны входить в заданную ширину.</p>
<p class="lab-check"><strong>Проверка.</strong> На 360 px карточка занимает 90% доступной ширины внутри рамки. На 900 px её ширина равна 420 px. Поля слева и справа одинаковые.</p>
<div class="lab-stage task-02">
<div class="note">Небольшая карточка с заметкой</div>
</div>
</section>
<section class="lab-card" id="exercise-03">
<p class="lab-label">03 · Высота окна</p>
<h2>Баннер, который растёт вместе с окном</h2>
<p>Задайте баннеру <code>.banner</code> минимальную высоту 25% от высоты окна. Используйте <code>vh</code>. Содержимое должно помещаться, даже если текста станет больше.</p>
<p class="lab-check"><strong>Проверка.</strong> При высоте окна 400 px баннер занимает 100 px, а при 800 px — 200 px. Ширину окна при этом можно оставить прежней.</p>
<div class="lab-stage task-03">
<div class="banner">Афиша на выходные</div>
</div>
</section>
<section class="lab-card" id="exercise-04">
<p class="lab-label">04 · Первый медиазапрос</p>
<h2>Заголовок в двух размерах</h2>
<p>Для <code>.headline</code> задайте размер 24 px по умолчанию. Начиная с 600 px сделайте его 40 px. Используйте <code>@media</code> и <code>min-width</code>.</p>
<p class="lab-check"><strong>Проверка.</strong> На 599 px размер 24 px. На 600 px размер 40 px.</p>
<div class="lab-stage task-04">
<h3 class="headline">Городские прогулки</h3>
</div>
</section>
<section class="lab-card" id="exercise-05">
<p class="lab-label">05 · Flexbox и медиазапрос</p>
<h2>Из колонки в ряд</h2>
<p>Сделайте <code>.actions</code> flex-контейнером с промежутком 12 px. На узком экране расположите кнопки друг под другом. От 640 px переключите направление на горизонтальное.</p>
<p class="lab-check"><strong>Проверка.</strong> На 639 px кнопки идут сверху вниз. На 640 px они стоят в одном ряду, а промежуток остаётся 12 px.</p>
<div class="lab-stage task-05">
<div class="actions">
<button type="button">Сохранить</button>
<button type="button">Отмена</button>
</div>
</div>
</section>
<section class="lab-card" id="exercise-06">
<p class="lab-label">06 · Своя разметка и rem</p>
<h2>Меню из трёх ссылок</h2>
<p>Добавьте <code>nav</code> с классом <code>.menu</code> и три ссылки на задания этой страницы. Используйте адреса <code>#exercise-01</code>, <code>#exercise-02</code> и <code>#exercise-03</code>. Сделайте ссылки колонкой на узком экране и рядом от 600 px. Задайте промежуток между ними и внутренний отступ каждой ссылки через <code>rem</code>, например по <code>0.5rem</code>.</p>
<p class="lab-check"><strong>Проверка.</strong> На 360 px ссылки стоят в столбик, на 600 px — в ряд. Нажатие переносит к нужному заданию.</p>
<div class="lab-stage task-06">
<nav class="menu" aria-label="Задания практикума">
<a href="#exercise-01">01 · Проценты</a>
<a href="#exercise-02">02 · Карточка</a>
<a href="#exercise-03">03 · Баннер</a>
</nav>
</div>
</section>
<section class="lab-card" id="exercise-07">
<p class="lab-label">07 · Два медиазапроса</p>
<h2>Каталог на одну, две и три колонки</h2>
<p>Добавьте контейнер <code>.catalog</code> и шесть карточек <code>.item</code> с короткими названиями. Используйте Flexbox с переносом строк или CSS Grid. Сделайте одну колонку по умолчанию, две от 600 px и три от 900 px. Между карточками оставьте 12 px.</p>
<p class="lab-check"><strong>Проверка.</strong> На 360, 700 и 960 px в первой строке помещаются соответственно одна, две и три карточки. Карточки в каждой строке одинаковой ширины.</p>
<div class="lab-stage task-07">
<div class="catalog">
<article class="item">Керамика</article>
<article class="item">Печать</article>
<article class="item">Ткани</article>
<article class="item">Фотография</article>
<article class="item">Столярное дело</article>
<article class="item">Рисунок</article>
</div>
</div>
</section>
<section class="lab-card" id="exercise-08">
<p class="lab-label">08 · Резиновое изображение</p>
<h2>Фото с подписью</h2>
<p>Добавьте <code>figure</code> с классом <code>.photo</code>, вложите <code>img</code> и <code>figcaption</code>. Возьмите файл <code>mountains.svg</code> из папки проекта и добавьте изображению осмысленный <code>alt</code>. Уберите стандартные внешние отступы у <code>figure</code>. На узком экране картинка должна занимать всю ширину блока. От 700 px поставьте подпись рядом с изображением, которому отведите 55% ширины блока.</p>
<p class="lab-check"><strong>Проверка.</strong> На 360 px подпись под картинкой, на 700 px — справа. Картинка сохраняет пропорции и не выходит за рамку.</p>
<div class="lab-stage task-08">
<figure class="photo">
<img src="mountains.svg" alt="Горный пейзаж: заснеженные вершины над озером на закате">
<figcaption>Хребет у озера — эскиз для весенней печатной серии мастерской.</figcaption>
</figure>
</div>
</section>
<section class="lab-card" id="exercise-09">
<p class="lab-label">09 · Плавный размер через vw</p>
<h2>Первый экран с гибкой типографикой</h2>
<p>Добавьте блок <code>.hero</code> с заголовком <code>h3</code> и коротким абзацем. Задайте блоку минимальную высоту <code>35vh</code> и отцентрируйте содержимое с помощью Flexbox. Сделайте размер заголовка равным <code>6vw</code>, но ограничьте его снизу 24 px, а сверху 56 px. Для ограничения пригодится <code>clamp(минимум, желаемый размер, максимум)</code>.</p>
<p class="lab-check"><strong>Проверка.</strong> На 360 px заголовок имеет размер 24 px, на 600 px — 36 px, на 1000 px — 56 px. Высота блока меняется при изменении высоты окна.</p>
<div class="lab-stage task-09">
<div class="hero">
<h3>Городские прогулки по субботам</h3>
<p>Собираемся у мастерской, идём тихими дворами к реке и заканчиваем у кофейни. Два часа без спешки — только дома, деревья и разговоры.</p>
</div>
</div>
</section>
<section class="lab-card" id="exercise-10">
<p class="lab-label">10 · Итоговая сборка</p>
<h2>Мини-страница мастерской</h2>
<p>Соберите внутри <code>.task-10</code> страницу мастерской. Добавьте заголовок, меню из трёх ссылок, вводный блок с картинкой и три карточки занятий. Ссылки меню могут вести к разделам внутри вашей мини-страницы.</p>
<ul>
<li>По умолчанию меню, вводный блок и карточки выстроены в одну колонку.</li>
<li>От 640 px меню становится горизонтальным, а изображение встаёт рядом с текстом и занимает около 40% ширины вводного блока.</li>
<li>От 900 px три карточки стоят в одном ряду. Внутренний контейнер всей мини-страницы имеет ширину 95%, ограничен 900 px и отцентрирован.</li>
<li>Отступы задайте в <code>rem</code>. Добавьте достаточно текста в одну карточку, чтобы проверить перенос строк.</li>
</ul>
<p class="lab-check"><strong>Проверка.</strong> Откройте страницу на 320, 640, 900 и 1280 px. Меню и блоки перестраиваются на нужной ширине, текст переносится, горизонтальной прокрутки нет.</p>
<div class="lab-stage task-10">
<div class="studio">
<header class="studio-header">
<h3 class="studio-title">Мастерская «Тёплый круг»</h3>
<p class="studio-lead">Керамика, ручная печать и ткани — маленькая студия в центре города.</p>
<nav class="studio-menu" aria-label="Разделы мини-страницы">
<a href="#studio-about">О мастерской</a>
<a href="#studio-classes">Занятия</a>
<a href="#studio-signup">Как записаться</a>
</nav>
</header>
<section class="studio-intro" id="studio-about">
<img src="mountains.svg" alt="Горный пейзаж с озером — эскиз для печатной серии мастерской">
<div class="studio-intro-text">
<h4>Место, где получаются вещи</h4>
<p>Мы открылись весной и с тех пор проводим короткие занятия для взрослых и детей. В студии есть гончарный круг, пресс для печати и большой стол для тканей.</p>
<p>Приходите без опыта: инструменты и материалы уже подготовлены, а мастер поможет на каждом шаге.</p>
</div>
</section>
<section class="studio-classes" id="studio-classes" aria-labelledby="studio-classes-title">
<h4 id="studio-classes-title">Занятия на неделе</h4>
<div class="studio-cards">
<article class="studio-card">
<h5>Керамика для начинающих</h5>
<p>Учимся центровать глину на круге и делать простую чашку. Материалы и обжиг уже входят в стоимость.</p>
<p class="studio-meta">Суббота, 11:00 · 2 часа</p>
</article>
<article class="studio-card">
<h5>Печать на ткани</h5>
<p>Собираем узор из штампов и печатаем небольшой шоппер. Подойдёт даже тем, кто первый раз держит валик в руках.</p>
<p class="studio-meta">Среда, 18:30 · 1,5 часа</p>
</article>
<article class="studio-card">
<h5>Открытая мастерская</h5>
<p>Свободное время для своих проектов: можно прийти с идеей, взять материалы из фонда студии и работать рядом с другими. Мастер на месте подскажет, как справиться со сложным местом, и поможет довести работу до конца — от первого эскиза до финальной глазури.</p>
<p class="studio-meta">Воскресенье, 12:00 · 3 часа</p>
</article>
</div>
</section>
<div class="studio-signup" id="studio-signup">
<h4>Как записаться</h4>
<p>Напишите нам или зайдите в студию за час до занятия. Возьмите сменную обувь и хорошее настроение — остальное найдётся на месте.</p>
</div>
</div>
</div>
</section>
</main>
</body>
</html>
+74
View File
@@ -0,0 +1,74 @@
/* Оформление практикума. Стили для заданий пишите в student.css. */
body {
margin: 0;
color: #222;
font: 1rem/1.5 Arial, sans-serif;
}
.lab-wrap {
width: 92%;
max-width: 1060px;
margin-inline: auto;
}
.lab-card > ul {
padding-inline-start: 1.5rem;
}
.lab-main {
padding-bottom: 2rem;
}
.lab-card {
padding-block: 1.25rem;
border-top: 1px solid #ccc;
}
.lab-card > h2 {
margin-block: 0.25rem 0.5rem;
font-size: 1.35rem;
line-height: 1.25;
}
.lab-card > p,
.lab-card > ul {
max-width: 75ch;
}
.lab-label {
margin: 0;
color: #555;
font-size: 0.875rem;
}
.lab-stage {
padding: 0.75rem;
border: 1px solid #ccc;
}
.lab-stage:empty {
min-height: 2.5rem;
}
code {
overflow-wrap: anywhere;
}
/* Начальный вид заготовок. */
.task-01 .track {
background: #ddd;
}
.task-01 .meter {
height: 24px;
background: #315cb0;
}
.task-02 .note {
padding: 12px;
background: #eee;
}
.task-03 .banner {
background: #eee;
}
+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="540" viewBox="0 0 960 540">
<rect width="960" height="540" fill="#e4ecff"/>
<circle cx="746" cy="139" r="64" fill="#ffca7b"/>
<path d="M0 415 230 148 490 415 687 221 960 420V540H0Z" fill="#7b93d2"/>
<path d="m158 232 72-84 92 95-55-19-37 19-28-20z" fill="#f7f9ff"/>
<path d="M0 475 274 309 472 477 702 348 960 476V540H0Z" fill="#324c85"/>
<path d="M0 510c170-35 306-15 468 2 192 21 326 9 492-23v51H0Z" fill="#192c56"/>
</svg>

After

Width:  |  Height:  |  Size: 498 B

+311
View File
@@ -0,0 +1,311 @@
/*
Пишите свои стили ниже. Сохраняйте файл и обновляйте страницу.
Начинайте каждый селектор с класса задания, например .task-01 .meter.
Внутри @media тоже указывайте класс задания.
*/
/* 01. Полоска в половину контейнера */
.task-01 .meter {
width: 50%;
}
/* 02. Карточка с полями */
.task-02 .note {
box-sizing: border-box;
width: 90%;
max-width: 420px;
margin-inline: auto;
}
/* 03. Баннер, который растёт вместе с окном */
.task-03 .banner {
box-sizing: border-box;
display: flex;
align-items: center;
min-height: 25vh;
padding: 1rem;
}
/* 04. Заголовок в двух размерах */
.task-04 .headline {
margin-block: 0;
font-size: 24px;
line-height: 1.2;
}
@media (min-width: 600px) {
.task-04 .headline {
font-size: 40px;
}
}
/* 05. Из колонки в ряд */
.task-05 .actions {
display: flex;
flex-direction: column;
gap: 12px;
}
@media (min-width: 640px) {
.task-05 .actions {
flex-direction: row;
}
}
/* 06. Меню из трёх ссылок */
.task-06 .menu {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.task-06 .menu a {
padding: 0.5rem;
color: #315cb0;
background: #eef3ff;
border-radius: 0.25rem;
text-decoration: none;
}
.task-06 .menu a:hover {
background: #dfe8ff;
}
.task-06 .menu a:focus-visible {
outline: 2px solid #315cb0;
outline-offset: 2px;
}
@media (min-width: 600px) {
.task-06 .menu {
flex-direction: row;
flex-wrap: wrap;
}
}
/* 07. Каталог на одну, две и три колонки */
.task-07 .catalog {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 12px;
}
.task-07 .item {
box-sizing: border-box;
padding: 0.75rem;
background: #f1f3f7;
border-radius: 0.25rem;
}
@media (min-width: 600px) {
.task-07 .catalog {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (min-width: 900px) {
.task-07 .catalog {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
/* 08. Фото с подписью */
.task-08 .photo {
margin: 0;
}
.task-08 .photo img {
display: block;
width: 100%;
height: auto;
}
.task-08 .photo figcaption {
margin-top: 0.5rem;
color: #444;
}
@media (min-width: 700px) {
.task-08 .photo {
display: flex;
align-items: flex-start;
gap: 1rem;
}
.task-08 .photo img {
flex: 0 0 55%;
width: 55%;
}
.task-08 .photo figcaption {
flex: 1 1 0;
min-width: 0;
margin-top: 0;
}
}
/* 09. Первый экран с гибкой типографикой */
.task-09 .hero {
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.75rem;
min-height: 35vh;
padding: 1.5rem 1rem;
background: #edf2fb;
text-align: center;
}
.task-09 .hero h3 {
margin: 0;
font-size: clamp(24px, 6vw, 56px);
line-height: 1.1;
}
.task-09 .hero p {
margin: 0;
max-width: 42ch;
}
/* 10. Мини-страница мастерской */
.task-10 .studio {
box-sizing: border-box;
width: 95%;
max-width: 900px;
margin-inline: auto;
padding: 1rem;
color: #2f2a24;
background: #fbf7f1;
border-radius: 0.5rem;
overflow-wrap: break-word;
}
.task-10 .studio-title {
margin: 0 0 0.25rem;
font-size: 1.5rem;
line-height: 1.2;
}
.task-10 .studio-lead {
margin: 0 0 1rem;
color: #6b5f52;
}
.task-10 .studio-menu {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.task-10 .studio-menu a {
display: block;
padding: 0.5rem 0.75rem;
color: #8a3f1d;
background: #fffdfa;
border: 1px solid #e6d9c8;
border-radius: 0.375rem;
text-decoration: none;
}
.task-10 .studio-menu a:hover {
background: #f6ece0;
}
.task-10 .studio-menu a:focus-visible {
outline: 2px solid #8a3f1d;
outline-offset: 2px;
}
.task-10 .studio-intro {
margin-top: 1.5rem;
}
.task-10 .studio-intro img {
display: block;
width: 100%;
height: auto;
border-radius: 0.5rem;
}
.task-10 .studio-intro-text {
margin-top: 0.75rem;
}
.task-10 h4 {
margin: 0 0 0.5rem;
font-size: 1.125rem;
line-height: 1.3;
}
.task-10 h5 {
margin: 0 0 0.25rem;
font-size: 1rem;
line-height: 1.3;
}
.task-10 p {
margin: 0 0 0.5rem;
}
.task-10 .studio-classes {
margin-top: 1.5rem;
}
.task-10 .studio-cards {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 0.75rem;
}
.task-10 .studio-card {
box-sizing: border-box;
padding: 1rem;
background: #fffdfa;
border: 1px solid #e6d9c8;
border-radius: 0.5rem;
}
.task-10 .studio-card p:last-child {
margin-bottom: 0;
}
.task-10 .studio-meta {
color: #8a3f1d;
font-weight: 700;
}
.task-10 .studio-signup {
margin-top: 1.5rem;
padding-top: 1rem;
border-top: 1px solid #e6d9c8;
}
.task-10 .studio-signup p {
margin-bottom: 0;
}
@media (min-width: 640px) {
.task-10 .studio-menu {
flex-direction: row;
flex-wrap: wrap;
}
.task-10 .studio-intro {
display: grid;
grid-template-columns: 40% minmax(0, 1fr);
align-items: center;
gap: 1rem;
}
.task-10 .studio-intro-text {
margin-top: 0;
}
}
@media (min-width: 900px) {
.task-10 .studio-cards {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
+109
View File
@@ -0,0 +1,109 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, sans-serif;
background: #f5f5f7;
color: #333;
}
.horizontal {
display: flex;
flex-direction: row;
}
#navbar {
width: 80%;
height: 40px;
margin: 12px auto 25px;
padding: 0 12px;
align-items: center;
justify-content: space-between;
background-color: white;
}
#navbar > div {
color: #555;
font-size: 11px;
text-decoration: none;
}
#navbar > div:hover {
color: black;
}
.logo {
color: black;
font-size: 18px;
display: inline-flex;
align-items: center;
}
#navbar img {
width: 16px;
height: 16px;
display: block;
}
#navbar .logo img {
width: 18px;
height: 18px;
}
.nav-icon {
display: inline-flex;
align-items: center;
}
#navbar span {
color: #555;
font-size: 17px;
}
.menu {
width: 55%;
margin-left: 11%;
align-items: flex-start;
gap: 30px;
}
.column {
display: flex;
flex-direction: column;
background-color: #f5f5f7;
}
.column small {
padding: 6px;
margin-bottom: 4px;
color: #777;
font-size: 10px;
background-color: white;
}
.column > div {
padding: 3px 6px;
color: #444;
font-size: 11px;
font-weight: bold;
}
.column > div:hover {
color: black;
}
.first-column {
width: 160px;
}
.first-column > div {
font-size: 18px;
}