

CSS от нулата: Блоков модел и позициониране
Добре дошли в третата част от поредицата "CSS от нулата"! В предишните статии се запознахме с основите на CSS и как да работим с цветове и типография.
Добре дошли в третата част от поредицата “CSS от нулата”! В предишните статии се запознахме с основите на CSS и как да работим с цветове и типография.
Днес ще се потопим в две ключови концепции, които са от съществено значение за контрола на оформлението на вашите уеб страници: блоковия модел и позиционирането в CSS.
Блоков модел (Box Model)#
Какво е блоков модел?#
Блоковият модел е фундаментална концепция в CSS, която описва как елементите се представят визуално в уеб страницата. Всеки HTML елемент може да се разглежда като “кутия” с определени характеристики. Разбирането на блоковия модел е ключово за ефективното управление на оформлението и пространството във вашите уеб страници.
Представете си, че всеки елемент на вашата страница е като подаръчна кутия. Съдържанието на кутията (текст, изображения и т.н.) е обвито в няколко слоя, всеки от които влияе на общия размер и разположение на кутията.
Компоненти на блоковия модел#

Блоковият модел се състои от четири основни компонента:
-
Content (Съдържание): Това е самото съдържание на елемента, като текст, изображения или други вложени елементи. Размерът на съдържанието се определя от свойствата
widthиheight.
Ако си представим елемента като подаръчна кутия, това е самият подарък вътре. -
Padding (Вътрешно отстояние): Това е прозрачно пространство около съдържанието, вътре в елемента. Padding-ът увеличава размера на елемента, без да променя размера на съдържанието му. Контролира се чрез свойствата
padding-top,padding-right,padding-bottomиpadding-leftили съкратеното свойствоpadding. В нашата аналогия с подаръчната кутия, това е опаковъчната хартия или пяната, която предпазва подаръка. -
Border (Граница): Това е линия, която обгражда padding-а и съдържанието. Границата може да има различна дебелина, стил и цвят. Контролира се чрез свойствата
border-width,border-styleиborder-colorили съкратеното свойствоborder. В примера с подаръчната кутия, това е самата кутия. -
Margin (Външно отстояние): Това е прозрачно пространство извън границата на елемента, което го отделя от съседните елементи. Margin-ът не увеличава размера на самия елемент, но увеличава пространството около него. Контролира се чрез свойствата
margin-top,margin-right,margin-bottomиmargin-leftили съкратеното свойствоmargin. Ако си представим няколко подаръчни кутии една до друга, margin-ът е пространството между тях.
Ето как изглежда това в CSS:
.box {
/* Размер на съдържанието */
width: 300px;
height: 200px;
/* Вътрешно отстояние */
padding: 20px;
/* Граница */
border: 2px solid black;
/* Външно отстояние */
margin: 10px;
}cssВ този пример:
-
Елементът има съдържание с ширина 300px и височина 200px.
-
Около съдържанието има 20px padding от всички страни.
-
Около padding-а има 2px плътна черна граница.
-
Извън границата има 10px margin от всички страни.
Важно е да разберете, че по подразбиране, когато зададете width и height на елемент, тези размери се отнасят само за областта на съдържанието. Общият размер на елемента ще бъде по-голям, включвайки padding-а и border-а.
Box-sizing свойство#
Свойството box-sizing определя как се изчисляват общите размери на елемента. Има две основни стойности:
-
content-box(стойност по подразбиране): При тази стойност, зададенитеwidthиheightсе отнасят само за размера на съдържанието. Padding-ът и border-ът се добавят към общия размер на елемента. -
border-box: При тази стойност, зададенитеwidthиheightвключват съдържанието, padding-а и border-а (но не и margin-а). Това означава, че padding-ът и border-ът ще бъдат включени вътре в зададените размери.
Ето как можете да зададете box-sizing: border-box за всички елементи:
* {
box-sizing: border-box;
}cssТози CSS код прилага box-sizing: border-box към всички елементи на страницата. Когато използвате border-box, зададената ширина и височина ще включват съдържанието, padding-а и border-а (но не и margin-а). Това прави изчисляването на размерите на елементите много по-интуитивно и предвидимо.
Например, ако имате следния CSS:
.box {
box-sizing: border-box;
width: 300px;
height: 200px;
padding: 20px;
border: 2px solid black;
}cssОбщият размер на кутията ще бъде точно 300px ширина и 200px височина, включвайки padding-а и border-а.
Изчисляване на размерите на елементите#
Нека разгледаме пример за изчисляване на общите размери на елемент със и без box-sizing: border-box:
.box {
width: 300px;
height: 200px;
padding: 20px;
border: 5px solid black;
margin: 10px;
}cssБез box-sizing: border-box (по подразбиране)#
Обща ширина = width + left padding + right padding + left border + right border = 300px + 20px + 20px + 5px + 5px = 350px
Обща височина = height + top padding + bottom padding + top border + bottom border = 200px + 20px + 20px + 5px + 5px = 250px
С box-sizing: border-box#
Обща ширина = зададената width (включваща padding и border) = 300px
Обща височина = зададената height (включваща padding и border) = 200px
В този случай, съдържанието ще бъде по-малко, за да се побере padding-ът и border-ът в зададените размери:
Ширина на съдържанието = width - left padding - right padding - left border - right border = 300px - 20px - 20px - 5px - 5px = 250px
Височина на съдържанието = height - top padding - bottom padding - top border - bottom border = 200px - 20px - 20px - 5px - 5px = 150px
Използването на box-sizing: border-box често прави оформлението по-интуитивно и по-лесно за управление, особено когато работите с процентни стойности или когато създавате responsive дизайни.
Позициониране в CSS#
Позиционирането в CSS ви позволява да контролирате как елементите се разполагат на страницата. Има няколко метода за позициониране, всеки със своите специфични характеристики и приложения:
Статично позициониране#
Това е позиционирането по подразбиране за всички елементи.
.static {
position: static;
}css
Характеристики на статичното позициониране:
-
Елементите следват нормалния поток на документа.
-
Свойствата
top,right,bottomиleftнямат ефект. -
Не можете да промените позицията на статично позиционираните елементи.
Относително позициониране#
Позиционира елемента относително спрямо нормалната му позиция.
.relative {
position: relative;
top: 20px;
left: 30px;
}css
Характеристики на относителното позициониране:
-
Елементът се премества от нормалната си позиция, но все още заема оригиналното си пространство в потока.
-
Можете да използвате
top,right,bottomиleftза преместване на елемента. -
Другите елементи не се влияят от преместването на относително позиционирания елемент.
Абсолютно позициониране#
Позиционира елемента абсолютно спрямо най-близкия позициониран предшественик (родител с position различно от static).
.absolute {
position: absolute;
top: 50px;
right: 10px;
}plaintext
Характеристики на абсолютното позициониране:
-
Елементът се изважда от нормалния поток на документа.
-
Позиционира се спрямо най-близкия позициониран предшественик или спрямо , ако няма такъв.
-
Другите елементи се държат така, сякаш абсолютно позиционираният елемент не съществува.
-
Размерът на елемента се определя от съдържанието му, освен ако не са зададени изрично width и height.
Фиксирано позициониране#
Позиционира елемента фиксирано спрямо viewport-а на браузъра.
.fixed {
position: fixed;
bottom: 20px;
right: 20px;
}css
Характеристики на фиксираното позициониране:
-
Елементът се изважда от нормалния поток на документа.
-
Остава на една и съща позиция дори при скролиране на страницата.
-
Позиционира се спрямо viewport-а на браузъра.
-
Често се използва за създаване на навигационни менюта, които остават видими при скролиране.
Sticky позициониране#
Комбинация между относително и фиксирано позициониране.
.sticky {
position: sticky;
top: 0;
}plaintext

Характеристики на sticky позиционирането:
-
Елементът се държи като относително позициониран до достигане на определен праг (например, top: 0).
-
След достигане на прага, елементът става фиксиран.
-
Полезно за създаване на заглавия на секции, които остават видими при скролиране.
Практически примери#
Нека разгледаме няколко практически примера, които комбинират блоковия модел и позиционирането:
Създаване на навигационно меню, което остава в горната част на страницата при скролиране#
<nav>
<a href="#">Начало</a>
<a href="#">За нас</a>
<a href="#">Контакти</a>
</nav>htmlnav {
position: sticky;
top: 0;
background-color: #333;
padding: 10px;
z-index: 100;
}
nav a {
color: white;
text-decoration: none;
margin-right: 15px;
}css
В този пример:
-
Навигацията използва
position: sticky, за да остане в горната част на екрана при скролиране. -
top: 0определя точката, в която навигацията става “залепена”. -
z-index: 100гарантира, че навигацията ще бъде над другите елементи на страницата.
Позициониране на бутон “Нагоре” в долния десен ъгъл на страницата#
<input type="button" class="back-to-top" value="Нагоре"/>html.back-to-top {
position: fixed;
bottom: 20px;
right: 20px;
padding: 10px 15px;
background-color: #007bff;
color: white;
border-radius: 5px;
text-decoration: none;
font-weight: bold;
}css
В този пример:
-
Бутонът използва
position: fixed, за да остане на едно и също място, независимо от скролирането. -
bottom: 20pxиright: 20pxпозиционират бутона в долния десен ъгъл на екрана. -
Добавени са стилове за по-атрактивен външен вид на бутона.
Създаване на изскачащ прозорец с абсолютно позициониране#
<div class="overlay"></div>
<div class="popup">
<input type="button" class="close-button" value="X" />
<p>Примерен текст</p>
</div>html.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.popup {
position: relative;
width: 300px;
padding: 20px;
left: 50%;
top: 50%;
transform: translate(-50%);
background-color: white;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.3);
}
.close-button {
position: absolute;
top: 10px;
right: 10px;
font-size: 20px;
cursor: pointer;
}css
В този пример:
-
.overlayизползваposition: fixed, за да покрие целия екран. -
.popupе центриран в.overlayс помощта на flexbox. -
.close-buttonизползваposition: absoluteспрямо.popup, за да се позиционира в горния десен ъгъл на изскачащия прозорец.
Заключение#
В тази статия се потопихме дълбоко в света на блоковия модел и позиционирането в CSS. Разбрахме как работи блоковият модел, как различните методи за позициониране влияят на разположението на елементите в уеб страницата, и как да изчисляваме размерите на елементите със и без box-sizing: border-box.
Ключови точки за запомняне:
-
Блоковият модел се състои от съдържание, padding, border и margin.
-
box-sizing: border-boxправи оформлението по-интуитивно, включвайки padding и border в зададените размери. -
Различните методи за позициониране (static, relative, absolute, fixed, sticky) предлагат гъвкави начини за контрол на разположението на елементите.
-
Комбинирането на блоковия модел и позиционирането позволява създаването на сложни и функционални оформления.
Помнете, че усъвършенстването на CSS уменията изисква практика. Експериментирайте с кода, който разгледахме, и не се страхувайте да го модифицирате. Опитайте се да приложите наученото върху ваш собствен проект – това е най-добрият начин да затвърдите знанията си.
В следващата статия от нашата поредица “CSS от нулата” ще разгледаме Flexbox и Grid - мощни инструменти за създаване на модерни и responsive оформления. Не пропускайте да се върнете, за да продължите вашето CSS пътешествие!
Допълнителни ресурси#
-
CSS Box Model: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model ↗
-
The CSS Box Model: https://css-tricks.com/the-css-box-model/ ↗
-
Learn CSS Position In 9 Minutes (YouTube): https://www.youtube.com/watch?v=jx5jmI0UlXU ↗