├── README.md
├── .gitignore
├── _includes
├── footer.html
├── link-github.html
├── link-twitter.html
├── header.html
├── nav.html
├── links-list.html
├── page-nav.html
├── icon-twitter.svg
├── head.html
└── icon-github.svg
├── _posts
└── 2016-06-03-hello.markdown
├── assets
├── img
│ ├── font-styles
│ │ ├── after.png
│ │ ├── before.png
│ │ ├── check.png
│ │ ├── input.png
│ │ ├── input-fixed.png
│ │ ├── mediaquery.png
│ │ ├── input-computed.png
│ │ ├── check-custom-font.png
│ │ └── input-fixed-expanded.png
│ ├── mediaqueries
│ │ └── before.png
│ ├── blocks-with-text
│ │ ├── after.png
│ │ ├── before.png
│ │ ├── content-abs-before.png
│ │ ├── content-abs-after-long.png
│ │ └── content-abs-after-short.png
│ ├── containers
│ │ ├── before-body.png
│ │ ├── before-desktop.png
│ │ ├── before-mobile.png
│ │ ├── bg-fullwide-example.png
│ │ ├── img-fullwide-example.png
│ │ ├── img-fullwide-scroll.png
│ │ └── img-fullwide-no-scroll.png
│ └── forms-markup
│ │ ├── textarea-after.png
│ │ └── textarea-in-fieldset.png
├── css
│ ├── main.scss
│ └── prism.css
└── js
│ └── prism.js
├── _data
└── tags.yml
├── .editorconfig
├── _layouts
├── page.html
├── post.html
└── default.html
├── _sass
├── _vars-mixins.scss
├── _footnotes.scss
├── _page-nav.scss
├── _site-nav.scss
├── button-example.scss
├── _post.scss
├── _socials.scss
├── _compare.scss
├── _layout.scss
├── _form-example.scss
└── _base.scss
├── index.html
├── feed.xml
├── _config.yml
├── styles-in-mediaquery
└── index.html
├── .stylelintrc
├── font-styles
└── index.html
├── blocks-with-text
└── index.html
├── containers
└── index.html
└── forms-markup
└── index.html
/README.md:
--------------------------------------------------------------------------------
1 | # HTML & CSS: как не надо
2 |
3 | https://yoksel.github.io/bad-practices/
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | _site
2 | npm-debug.log
3 | .sass-cache
4 | .jekyll-metadata
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/_includes/footer.html:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/_posts/2016-06-03-hello.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: "Hello"
4 | tags: [onetag]
5 | ---
6 |
7 | Some text
--------------------------------------------------------------------------------
/assets/img/font-styles/after.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/after.png
--------------------------------------------------------------------------------
/assets/img/font-styles/before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/before.png
--------------------------------------------------------------------------------
/assets/img/font-styles/check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/check.png
--------------------------------------------------------------------------------
/assets/img/font-styles/input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/input.png
--------------------------------------------------------------------------------
/assets/img/mediaqueries/before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/mediaqueries/before.png
--------------------------------------------------------------------------------
/assets/img/blocks-with-text/after.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/blocks-with-text/after.png
--------------------------------------------------------------------------------
/assets/img/blocks-with-text/before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/blocks-with-text/before.png
--------------------------------------------------------------------------------
/assets/img/containers/before-body.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/before-body.png
--------------------------------------------------------------------------------
/assets/img/font-styles/input-fixed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/input-fixed.png
--------------------------------------------------------------------------------
/assets/img/font-styles/mediaquery.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/mediaquery.png
--------------------------------------------------------------------------------
/assets/img/containers/before-desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/before-desktop.png
--------------------------------------------------------------------------------
/assets/img/containers/before-mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/before-mobile.png
--------------------------------------------------------------------------------
/assets/img/font-styles/input-computed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/input-computed.png
--------------------------------------------------------------------------------
/assets/img/forms-markup/textarea-after.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/forms-markup/textarea-after.png
--------------------------------------------------------------------------------
/assets/img/containers/bg-fullwide-example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/bg-fullwide-example.png
--------------------------------------------------------------------------------
/assets/img/containers/img-fullwide-example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/img-fullwide-example.png
--------------------------------------------------------------------------------
/assets/img/containers/img-fullwide-scroll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/img-fullwide-scroll.png
--------------------------------------------------------------------------------
/assets/img/font-styles/check-custom-font.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/check-custom-font.png
--------------------------------------------------------------------------------
/assets/img/containers/img-fullwide-no-scroll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/containers/img-fullwide-no-scroll.png
--------------------------------------------------------------------------------
/assets/img/font-styles/input-fixed-expanded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/font-styles/input-fixed-expanded.png
--------------------------------------------------------------------------------
/assets/img/forms-markup/textarea-in-fieldset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/forms-markup/textarea-in-fieldset.png
--------------------------------------------------------------------------------
/assets/img/blocks-with-text/content-abs-before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/blocks-with-text/content-abs-before.png
--------------------------------------------------------------------------------
/_data/tags.yml:
--------------------------------------------------------------------------------
1 | ## Картинки
2 |
3 | - slug: img
4 | desc: картинка
5 |
6 | - slug: icon
7 | desc: иконка
8 |
9 | - slug: logo
10 | desc: логотип
11 |
--------------------------------------------------------------------------------
/assets/img/blocks-with-text/content-abs-after-long.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/blocks-with-text/content-abs-after-long.png
--------------------------------------------------------------------------------
/assets/img/blocks-with-text/content-abs-after-short.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yoksel/bad-practices/HEAD/assets/img/blocks-with-text/content-abs-after-short.png
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/_layouts/page.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 | {{ page.title }}
6 |
7 |
3 | {% if page.permalink %}
4 | {{ site.title }}
5 | {% else %}
6 | {{ site.title }}
7 | {% endif %}
8 |
9 |
10 | {% include nav.html %}
11 |
12 |
Здесь собраны частые ошибки начинающих и способы их избежать. Статьи состоят из разбора, примеров кода и подсказок как проверить код в браузере.
9 | 10 |Почитайте:
11 |Использование медиавыражений не сбрасывает предыдущие стили, поэтому не нужно их дублировать для каждого брикпойнта.
18 |В браузере в инструментах разработчика:
23 | 24 |
26 |
27 | В медиавыражение добавляйте только те свойства, которые меняются:
34 | 35 |Такой код быстрее писать и проще поддерживать.
82 |Медиавыражения не сбрасывают стили. Добавляйте в них только те свойства, которые нужно переопределить.
89 |Не нужно задавать разным элементам одинаковые стили текста.
17 | 18 |Это не имеет смысла и засоряет код. Воспользуйтесь наследованием: задайте стили для текста родительскому элементу, и дочерние элементы сами их унаследуют, вам не нужно для этого ничего делать.
22 |В браузере в инструментах разработчика:
27 | 28 |
30 |
31 | Стили текста достаточно задать один раз в body, и они автоматом применятся ко всем элементам страницы.
Исправленный код значительно короче, с ним удобнее иметь дело. Также не тратится время на написание ненужных свойств.
94 | 95 |Как проверить, что всё работает как надо? Там же, в инструментах разработчика:
96 | 97 |
99 | body, а цвет фона — нет (он показан бледным)Ещё один способ:
103 | 104 |
106 |
107 |
112 |
113 | MyFancyFont объявлен в списке первым, текст в итоге отрисовался запасным — Georgia. Значит надо проверить правильно ли подключен кастомный шрифт.Если для некоторых элементов стили текста отличаются, достаточно переопределить отдельные свойства, а не писать всё заново. Также снижается вероятность ошибки, если потребуется поменять шрифт на всём сайте: это можно будет сделать в одном месте.
117 |Стили текста для инпутов и кнопок задаются браузером:
122 | 123 |
125 |
126 | body перечеркнуты, потому что перезаписаны стилями, который задаёт браузер — они отображаются на сером фоне, а в качестве источника указано user agent stylesheet.
131 |
132 | Это легко поправить, задав наследование явно:
137 | 138 | {% highlight css %}input, textarea, select, button { 139 | font: inherit; 140 | }{% endhighlight %} 141 | 142 |Если нужно наследовать только семейство шрифтов, вместо font: inherit; задайте font-family: inherit;
146 |
147 | Georgia.
152 | absolute для позиционирования текстовых блоков"
9 | url: "#absolute"
10 |
11 | additional_links:
12 | - name: "Краш-тест вёрстки"
13 | url: https://isqua.ru/blog/2016/06/19/crash-test-viorstki/
14 | source_name: "Софьи Ильиновой"
15 | source_url: https://isqua.ru/blog
16 |
17 | ---
18 |
19 | При увеличении количества текста он вывалится наружу и может наложиться на нижележащие элементы.
27 |Можно отредактировать исходный HTML, а можно выполнить в консоли браузера такую команду:
32 | 33 | {% highlight js %}document.body.contentEditable = true{% endhighlight %} 34 | 35 |После этого вы сможете отредактировать любой текст на странице.
36 | 37 |Добавим текст:
38 | 39 |
41 |
42 | Решение зависит от того, что нужно сделать. Если у блока по макету есть минимальная высота, но контента недостаточно, чтобы его растянуть, используйте min-height:
69 |
70 | min-height позволит добиться соответствия макету, а при добавлении контента блок просто вырастет вниз.
Ещё это может быть полезно как временное решение, чтобы разложить блоки по макету, до того, как будет стилизовано содержимое, после этого min-height убирается.
Если же контента достаточно, min-height не нужен, достаточно задать стили для текста и padding для блока, и его размеры будут определяться содержимым.
Если у блока есть явные границы, padding нужно задавать со всех сторон, чтобы при добавлении текста он не упёрся в края:
Изменим текст:
85 | 86 |absolute для позиционирования текстовых блоков # При абсолютном позиционировании блок не влияет на размеры родителя. При увеличении количества текста он не сможет растянуть родительский блок и вывалится наружу.
117 |Как и в предыдущем случае, можно отредактировать исходный HTML или использовать команду в консоли:
122 | 123 | {% highlight js %}document.body.contentEditable = true{% endhighlight %} 124 | 125 |После чего добавить текст в интересующий элемент.
126 | 127 |
129 |
130 | В этом случае лучше перенести position:absolute на картинку и добавить min-height, чтобы блок не схлопывался по высоте текста (иначе может вывалиться картинка):
175 |
176 | min-height не даёт блоку схлопнуться.
181 |
182 | min-height.absolute для позиционирования текстовых блоков. Если текст должен наползать на картинку, абсолютное позиционирование лучше задать картинке.