Блоков модел на документ втори тест 16. Управление на блоковия CSS модел. Минимална и максимална височина на елемента

Запознахме се с HTML и CSS, как изглеждат и как се правят някои основни неща. Сега ще се потопим малко по-дълбоко и ще разгледаме по-подробно как елементите се показват на страницата и как се задават техните размери.

По пътя ще обсъдим тема, известна като модел на кутия и как работи с HTML и CSS. Ще разгледаме и няколко нови свойства на CSS и ще използваме някои от стойностите за оразмеряване, които разгледахме в Урок 3. Да започваме.

Как се показват елементите?

Преди да преминем към модела на кутията, трябва да разберем как се показват елементите. В Урок 2 разгледахме разликата между блокови и вградени елементи. Бързо напомняне, че блоковите елементи заемат пълната налична ширина, независимо от тяхното съдържание и започват на нов ред. Вградените елементи заемат ширината, изисквана от съдържанието, и са подредени на един и същ ред, един след друг. Блоковите елементи обикновено се използват за големи части от съдържание, като заглавия и структурни елементи. Вградените елементи обикновено се използват за малки части от съдържание, като няколко думи с удебелен шрифт или курсив.

дисплей

Как точно се показват елементите - като блокови или вградени или нещо друго - се определя от свойството display. Всеки елемент съдържа стойност на свойство за показване по подразбиране, но както при всяка друга стойност на свойство, тази стойност може да бъде презаписана. Има доста стойности за свойството display, но най-често срещаните са block, inline, inline-block и none.

Можем да променим стойността на свойството display на даден елемент, като изберем този елемент в CSS и зададем нова стойност за свойството display. Блоковата стойност ще направи този елемент блоков елемент.

P ( дисплей: блок; )

Вградената стойност ще направи този елемент вграден.

P ( дисплей: вграден; )

Най-интересното е стойността на inline-block. Използването му ще позволи на елемента да се държи като блоков елемент, включително всички свойства на блоковия модел (които ще разгледаме скоро). Въпреки това, елементът ще се появи на ред с други елементи, вместо да започва на нов ред по подразбиране.

P (дисплей: inline-block;)

Демонстрация на вграден блок

Разстояние между вградени блокови елементи

Една важна разлика между вградените блокови елементи е, че те не винаги се докосват или се показват директно един до друг. Обикновено ще има малко пространство между двата елемента. Това пространство може да е досадно, но това е добре. Ще обсъдим защо съществува и как да го премахнем в следващия урок.

Накрая, използвайки стойността „none“, ние скриваме елемента напълно и показваме страницата, сякаш елементът не съществува. Всички елементи, вложени в такъв елемент, също ще бъдат скрити.

Div ( дисплей: няма; )

Да знаете как се показват елементите и как да промените дисплея е много важно, тъй като дисплеят влияе върху дисплея на модела кутия. Докато обсъждаме модела на кутията, със сигурност ще разгледаме тези различни последици и как те могат да повлияят на представянето на даден елемент.

Какво е блоков модел?

Според концепцията на модела на кутия всеки елемент на страница е правоъгълен блок и може да има ширина, височина, поле, рамка и подложка.

Струва си да се повтори: всеки елемент на страницата е правоъгълен блок.

Ориз. 4.01. Когато разгледаме всеки елемент поотделно, можем да видим, че всички те са правоъгълни, независимо от представените им форми

Всеки елемент на всяка страница следва модела на кутията, така че това е изключително важно. Нека да го разгледаме заедно с няколко нови свойства на CSS, за да разберем по-добре как можем да работим с него.

Работа с блоков модел

Всеки елемент е правоъгълен блок и има няколко свойства, които определят размера на този блок. Вътрешността на блока се определя от ширината и височината на елемента, които могат да бъдат определени от свойството display, съдържанието на елемента или свойствата width и height. подложка и след това граница разширяват размерите на блока навън от ширината и височината на елемента. И накрая, всеки определен марж излиза извън рамката.

Всяка част от модела на кутията съответства на CSS свойство: ширина, височина, подложка, граница и поле.

Нека да разгледаме тези свойства в някакъв код:

Div ( граница: 6px solid #949599; височина: 100px; поле: 20px; подложка: 20px; ширина: 400px; )

Според блоковия модел общата ширина на елемент може да се изчисли по следната формула:

Margin-right + border-right + padding-right + width + padding-left + border-left + margin-left

За сравнение, според блоковия модел, общата височина на елемент може да се изчисли по следната формула:

Поле-отгоре + граница-отгоре + подложка-отгоре + височина + подложка-отдолу + граница-отдолу + марж-отдолу

Ориз. 4.02. Моделът на кутията включва основна височина и ширина плюс подложка, рамка и поле

Използвайки тези формули, можем да намерим общата височина и ширина на блока от нашия пример.

Ширина: 492px = 20px + 6px + 20px + 400px + 20px + 6px + 20px Височина: 192px = 20px + 6px + 20px + 100px + 20px + 6px + 20px

Моделът на кутията без съмнение е една от най-объркващите части на HTML и CSS. Задаваме свойството width на 400 пиксела, но действителната ширина на нашия елемент е 492 пиксела. По подразбиране моделът на кутията е адитивен. По този начин, за да определим действителния размер на блока, трябва да вземем предвид полетата, границите и подложките за четирите страни на блока. Нашата ширина включва не само стойността на свойството width, но и размера на лявото и дясното поле, лявата и дясната граница и лявата и дясната подложка.

Засега много от тези свойства нямат много смисъл и това е добре. За да изясним, нека разгледаме по-отблизо всички онези свойства на ширината, височината, подложката, границата и полето, които съставят модела на кутията.

ширина и височина

Всеки елемент има ширина и височина по подразбиране. Тази ширина и височина може да бъде нула, но браузърите изобразяват всеки елемент с размер по подразбиране. В зависимост от това как е изобразен елементът, ширината и височината по подразбиране може да са подходящи. Ако даден елемент е ключов елемент в оформлението на страница, може да се наложи да му бъдат зададени специфични свойства за ширина и височина. В този случай могат да бъдат зададени стойности на свойствата за невградени елементи.

ширина

По подразбиране ширината на даден елемент се базира на показаната стойност. Блоковите елементи имат ширина по подразбиране от 100% и заемат цялото налично хоризонтално пространство. Вградените и вградените блокови елементи се разширяват и свиват хоризонтално, за да поемат тяхното съдържание. Вградените елементи не могат да имат фиксиран размер, така че ширината и височината се прилагат само за невградените елементи. За да зададете конкретна ширина за нелинейни елементи, използвайте свойството width:

Div (ширина: 400px; )

височина

Височината по подразбиране на елемент се определя от неговото съдържание. Елементът ще се разширява и свива вертикално, ако е необходимо, за да побере съдържанието си. Можете да зададете конкретна височина за нелинейни елементи, като използвате свойството за височина:

Div (височина: 100px;)

Размери на вградени блокови елементи

Моля, не забравяйте, че вградените елементи не приемат свойства за ширина и височина или която и да е от техните стойности. Блоковите и вградените елементи обаче приемат свойства за ширина и височина и съответните им стойности.

поле и подложка

В зависимост от елемента, браузърите може да приложат подложки и полета по подразбиране към елемента, за да помогнат за четливостта. Обикновено виждаме това върху текстови елементи. Полетата и подложките по подразбиране за тези елементи могат да варират от браузър до браузър и от елемент до елемент. В Урок 1 обсъдихме използването на нулиране на CSS, за да направим всички тези стойности по подразбиране на нула. Това ни позволява да работим от нулата и да задаваме собствени ценности.

марж

Свойството margin ни позволява да зададем количеството пространство, което заобикаля даден елемент. полетата са извън всякакви граници и са напълно прозрачни на цвят. Те могат да се използват за позициониране на елементи на определено място на страницата или за добавяне на бяло пространство, като същевременно поддържат всички останали елементи на безопасно разстояние. Ето свойството margin в действие:

Div (поле: 20px;)

Една от странностите на полето е, че вертикалните стойности, отгоре и отдолу, не се прилагат за вградени елементи, но се прилагат за блокови и вградени блокови елементи.

подплата

Свойството padding е много подобно на свойството margin, но се намира в границите на елемента. Свойството padding се използва за указване на пространство директно в елемент. Ето кода:

Div (пълнеж: 20px;)

Свойството padding, за разлика от margin, работи вертикално за вградени елементи. Вертикалната подложка може да се слее с линията над или под дадения елемент, но ще бъде показана.

поле и подложка за вградени елементи

Вградените елементи се държат малко по-различно от блоковите и вградените елементи, когато става въпрос за подложки и полета. За вградени елементи margin работи само хоризонтално - отляво и отдясно на елементите. padding работи от четирите страни на вградените елементи, но вертикалните полета в горната и долната част могат да се простират отвъд линиите над и под елемента.

Подложките и полетата работят както обикновено за блокови и вградени елементи.

Задаване на поле и подложка

В CSS има няколко начина за задаване на стойностите на определени свойства. Можем да използваме обикновена нотация, която изброява множество свойства и стойности една след друга, в която всяка стойност има свое собствено свойство. Или можем да използваме стенографски запис, изброявайки множество стойности за едно и също свойство. Не всички свойства имат стенограма, така че трябва да сме сигурни, че използваме правилното свойство и структура на стойността.

Свойствата на полето и подложката съществуват в правилна и съкратена форма. Когато използваме границата на съкратеното свойство, за да зададем една стойност за всичките четири страни на елемент, ние задаваме една стойност:

Div (поле: 20px;)

За да зададете една стойност за горната и долната страна и друга стойност за лявата и дясната страна на даден елемент, задайте две стойности: първо отгоре и отдолу, след това отляво и отдясно. Тук за

задаваме подложки от 10 пиксела отгоре и отдолу и 20 пиксела отляво и отдясно:

Div (поле: 10px 20px;)

За да зададете уникални стойности за четирите страни на даден елемент, посочете стойностите в следния ред: отгоре, отдясно, отдолу и отляво, движейки се по часовниковата стрелка. Тук искаме

подложката е 10 px отгоре, 20 px отдясно, 0 px отдолу и 15 px отляво.

Div ( марж: 10px 20px 0 15px; )

Използването на свойство margin или padding с произволен брой стойности се счита за пряк път. При обикновен запис можем да зададем стойността само за едната страна, като използваме уникални свойства. След всяко име на свойство (в този случай поле или подложка) има тире и страната на блока, към която трябва да се приложи стойността: отгоре, отдясно, отдолу или отляво. Например свойството padding-left приема само една стойност и ще зададе лявото поле за този елемент, свойството margin-top приема само една стойност и ще зададе горното поле за този елемент.

Div ( margin-top: 10px; padding-left: 6px; )

Когато искаме да дефинираме само едно поле или стойност на подложка, по-добре е да използваме обикновена нотация. Това поддържа нашия код ясен и помага да се избегне объркване по пътя. Например, наистина ли искате да зададете полето на 0 в горната, дясната и лявата част на елемента или наистина искате да зададете полето в долната част на 10 пиксела? Използването на редовна нотация за свойства и стойности ни помага да направим това по смислен начин. От друга страна, когато имате работа с три или повече стойности, съкращаването е невероятно полезно.

Подложка и цвят на полето

Свойствата на полето и подложката са напълно прозрачни и не приемат никакви цветови стойности. Но тъй като са прозрачни, те показват цвета на фона на свързаните елементи. За margin виждаме цвета на фона на родителския елемент, а за padding виждаме цвета на фона на елемента, към който се прилага padding.

Граници

Границите се поставят между подложката и полетата, създавайки рамка около елемент. Свойството border изисква три стойности: ширина, стил и цвят. Съкращението на границата е дадено в същия ред - ширина, стил, цвят. В нормална нотация тези три стойности могат да бъдат разбити на свойствата border-width, border-style и border-color. Обикновената нотация е полезна за промяна или презаписване на индивидуална гранична стойност.

Ширината и цветът на рамката могат да бъдат дефинирани с помощта на обикновени CSS единици за размер и цвят, както е описано в Урок 3.

Универсален селектор

В първата стъпка на това упражнение въведохме универсалния селектор. В CSS звездичката (*) е универсален селектор, който избира всеки елемент. Вместо да изброяваме всички отделни елементи, можем да използваме звездичка, за да изберем всички елементи.

Псевдоелементите :before и :after, също споменати в тази стъпка, са елементи, които могат да бъдат генерирани динамично чрез CSS. Ние няма да използваме тези елементи в нашия проект, но когато споменаваме универсален селектор, също е добра идея да включите тези псевдоелементи, в случай че някога се появят.

Резюме

Вземете пая и се потупайте по главата. Ще изчакам.

Изучаването на всички различни части на блоковия модел не е малко постижение. Тези концепции, дори и накратко очертани, отнеха доста време, за да бъдат напълно усвоени, но ние сме на прав път.

Накратко, в този урок говорихме за следното:

  • Как се показват различните елементи.
  • Какво представлява блоковият модел и защо е толкова важен.
  • Как да промените размера на елементи въз основа на височина и ширина.
  • Как да добавите поле, подложка и рамка към елементи.
  • Как да промените размера на елементите и ефекта на модела кутия.

Вече разбираме по-добре как се изобразяват елементите и как се изчисляват техните размери. Време е да преминем към позиционирането на тези елементи.

CSS box моделът на английски се нарича Box model (box е кутия). Този превод помага малко да се разбере същността на блоковия модел. Основното е, че при формирането на страница на екрана се използват блокове - правоъгълни области на екрана.

Моделът CSS кутия е една от основите за разбиране на CSS, модел за форматиране на документ.

Преди да научите CSS, трябва да сте научили HTML, което означава, че трябва да знаете, че HTML таговете са разделени на блокови елементи и вградени елементи.

  • Блоковите елементи са тагове, които създават блок, т.е. те заемат цялата налична ширина (от ръба до ръба), височината на блоковия елемент зависи от неговото съдържание, блоковият елемент винаги заема нов ред. Примери за блокови елементи - тагове

    И

    .
  • Вградените елементи са тагове, които не създават собствени блокове, но влияят върху показването на съдържанието на блока. Пример за такива етикети е , , и други.

Нека да разгледаме разликите между тези групи елементи, използвайки пример.

CSS модел на кутия

p таг блок. Това част от текстаподчертано с етикет em.

Този пример ясно показва, че етикетите

И

създават свои собствени блокове. Всеки блок започва на нов ред. За блок
бяха уточнени ширина и височина, а блокът

Заема цялата ширина на екрана, височината му е равна на височината на съдържанието му. За да стане това видимо, двата елемента са зададени на жълт фонов цвят.

Етикет Току-що форматирах текста вътре в блока

Прочетете повече за блоковете.

Всеки блоков елемент има набор от свойства, които могат да се променят с помощта на CSS.

Основата на блок е неговото съдържание или съдържание; ширината на полето за съдържание се определя от свойството width, а височината от свойството height. Но блокът има и други полета, застъпват се като зелеви листа.

По-лесно е да покажете това под формата на чертеж.

Виждаме, че в допълнение към самото поле за съдържание, блокът има още три свойства:

  • Вътрешен отстъп - padding - на английски "padding". Пълнежът е това, което се пълни или пълни с вътрешността на нещо. padding е частта от блока от ръба на съдържанието до границата.
  • Border – на английски е „граница“. Границата на блоков елемент може да бъде зададена в различни стилове: плътна линия, точки, пунктирани линии; Можете да зададете цвета на рамката. По-долу ще обсъдим подробно как да управляваме граничния имот.
  • Външен отстъп - margin - на английски "margin". От икономическа гледна точка маржът означава разликата между разходите и цената.

За целите на тази статия няма да разглеждаме свойството outline. Само забележете: това свойство не влияе на размера на блока.

Останалите свойства могат да се контролират с помощта на CSS чрез задаване на техния размер и някои други стилови стойности. Нека да разгледаме това с пример.

CSS модел на кутия

div таг блок.

p таг блок. Този параграф има свойства по подразбиране.

Стил: подложка: 10px.

Стил: margin: 30px.

Резултатът трябва да е така:


Фигура 2. Пример № 2 в действие.

Виждаме черна рамка с дебелина 3px около блока, създаден от тага

. Първият параграф е форматиран по подразбиране, с изключение на цвета на фона. Във втория параграф вътрешната подложка е зададена на 10px, ясно се вижда, че около текста зоната, запълнена с фонов цвят, се е увеличила. Третият параграф няма вътрешен отстъп, но е зададено поле от 30px. Виждаме, че разстоянието между този и втория параграф е по-голямо, отколкото между втория и първия - така работи външният отстъп.

Границите и подложките са незадължителни свойства на блока; всички те могат да бъдат зададени на нула.

Как се задават фоновите цветове за тези свойства?

  • Вътрешният отстъп - padding - винаги има цвета на фона на самия елемент, зададен в свойството background-color.
  • Border - border - цветът му се задава от свойството border-color.
  • Външното поле винаги е прозрачно, така че цветът на тази област съвпада с цвета на фона на родителския елемент (в нашия случай, цвета на белия фон на елемента инсталиран по подразбиране).

Разширени опции за управление на свойствата на блока

В допълнение към управлението на всички страни на блок наведнъж е възможно да се контролира всяка страна на всяко свойство поотделно. Ето графика, която демонстрира свойствата на CSS за контролиране на стила на блока по този начин.


Фигура 3. CSS модел на кутия.

Нека разгледаме по-отблизо свойствата на блоковете и да дадем примери за тяхното използване.

Вътрешна подплата

Вътрешна подложка - разстоянието от вътрешния ръб на границата до условния правоъгълник, който ограничава съдържанието на блока. Тъй като вътрешната вдлъбнатина може да бъде различна за всяка страна на блока, те казват „горна вътрешна вдлъбнатина“ или „горна вдлъбнатина“. Заслужава да се отбележи, че различните CSS книги използват различни преводи за свойството padding, в някои то се нарича просто padding, в други се нарича поле, а свойството margin се нарича padding.

Основната функция на подложката е да създаде празно пространство между съдържанието на блок и границата, например за да предотврати изравняването на текста с границата. Вдлъбнатините правят страницата да изглежда по-привлекателна и текстът, създаден с тях, ще бъде по-четим.

CSS модел на кутия

Резултатът трябва да е така:

Фигура 4. Пример #3 на работа.

Виждаме красиво проектиран блок с подложка до границата.

граница

Границите са линии около вътрешното съдържание на даден елемент. Границата може да бъде зададена за всички страни на блока или за произволен номер. Можете да зададете дебелина, стил и цвят на рамката. За да създадете рамка (граница), както беше написано по-рано, в CSS има свойство border. В това свойство можете да посочите всички характеристики на рамката (дебелина, стил и цвят). А за да създадете граници на отделни страни на блок, трябва да използвате свойствата border-top, border-right, border-bottom и border-left.

CSS модел на кутия

Резултатът от изпълнението на кода трябва да бъде така:


Фигура 5. Работа на пример № 4.

Външен марж - марж

Подложката е пространството от границата на блок до външния му ръб. Маргините се задават от свойството margin. Както при подложките и границите, подложките могат да бъдат зададени за всяка страна на блок. Например свойството margin-left контролира лявото поле на блок.

Характеристики на външните отстъпи.

  • Маржът винаги е прозрачен. Не приема цвета на фона или фоновото изображение, зададени за блока, към който принадлежи. Въпреки това, той приема фона на родителския елемент.
  • Маржовете се сумират. Ако между блоковете са посочени полета от 25px, тогава разстоянието между тях няма да бъде 50px, а 25px, тъй като външните полета се припокриват.
  • Можете да зададете марж на отрицателна стойност. Тази стойност премества блока, например декларацията margin-left : -20px ще премести блока наляво с двадесет пиксела.
  • Отстъпите могат да бъдат зададени като процент; такива отстъпи се изчисляват въз основа на размера на блока със съдържание. Това ще бъде направено както за хоризонтални, така и за вертикални полета.
CSS модел на кутия

Минаха хилядолетия. Механизъм, предназначен да работи вечно, е спрял. Животоподдържащите системи са повредени.

Минаха хилядолетия. Механизъм, предназначен да работи вечно, е спрял. Животоподдържащите системи са повредени.

Непознатият се огледа. Във всички посоки до хоризонта имаше пустиня.

Нека разгледаме този пример по-подробно. Резултатът от неговото изпълнение трябва да бъде така:

Фигура 6. Работа на пример № 5.

За етикет

Контурът, зададен тук, е с дебелина 1px. Това се прави така, че да е ясно къде започва външната област на отстъпа на този етикет.

Един етикет

Поставен в блок

със зададен фонов цвят. Може да се види, че външният отстъп на етикета

Цвят на фона на приет етикет

. И етикетите

Тези, които се намират извън този блок, имат бял цвят на полето, съответстващ на цвета на фона на блока по подразбиране.

Последният празен абзац е с височина 20px, той е поставен в примера само за да се види по-лесно, че разстоянието между абзаците е 20px и е равно на височината на този празен абзац. В листа със стилове за етикета

Декларацията на полето е зададена на 20px, можете да видите, че външните отстъпи на абзаците се сливат и разстоянието между абзаците не е 40px, а 20px.

Ширината на блока е съставна стойност; тя е сумата от стойностите на няколко свойства:

  • width - ширина на съдържанието на блока;
  • padding-left и padding-right - подложка отляво и отдясно на съдържанието;
  • border-left и border-right - дебелина на границата отляво и отдясно;
  • margin-left и margin-right - външно поле отляво и отдясно.

Стойностите на някои свойства могат да бъдат равни на нула, тогава те не влияят на ширината на блока.

На фигура 7 блокът е обозначен с черна пунктирана линия.


Фигура 7. Ширина на блока.

Ако ширината на блок не е посочена в листа със стилове, тя по подразбиране е auto. В този случай полето за съдържание ще заема цялата налична ширина (родителския блок или, ако няма такъв, прозореца на браузъра), но размерът на всички отстъпи и рамката ще се запази.

Нека изчислим ширината на блока, като използваме следния стил като пример:

Ширина: 400px; /* Ширина на блока */ padding: 5px; /* Поле до граница */ border-width: 3px; /* Дебелина на границата */ margin: 7px; /* Марж */

Нека съберем всички членове, които съставляват ширината на блока:

Ширина на блок = 400 + 5*2 + 3*2 + 7*2 = 430px.

Наследен блоков модел

Исторически методът за изчисляване на ширината на блока, описан по-горе, не винаги е бил използван. В момента това е стандарт, приет от W3C. Но преди това свойството width не беше равно на полето за съдържание, а по-скоро представляваше блоковото пространство, което включва свойството border. Източникът на такъв блоков модел беше MicroSoft и на него се основаваше браузърът Internet Explorer до версия 7. Фигурата показва сравнение на два блокови модела.

Фигура 8. Два блокови модела.

Има огромен брой стари документи, достъпни онлайн, които са създадени в стария блоков модел, наричан още „режим на съвместимост“. Следователно не си струва да го отписвате.

Важно е да се знае: ако документът не е посочен, след което браузърите преминават в режим на съвместимост.

имот с размер на кутия

При изчисляване на ширината на блок могат да възникнат определени проблеми при използване на процента като мерна единица в свойството ширина. Процентът е относителна стойност, което го прави донякъде непредвидим, особено ако подложката и рамката са посочени в абсолютни единици. В резултат на това е възможно общата ширина на блока да надвишава ширината на прозореца на браузъра и това да доведе до появата на хоризонтална лента за превъртане.

Няма да навлизаме подробно в същността на проблема, това не е нивото на тази статия. Тук само ще отбележа, че остарялата система понякога се оказва полезна. За да стане възможно промяната на алгоритъма на модела на кутията в CSS3, беше въведено полезно свойство за оразмеряване на кутия. Когато е зададено на border-box, ширината на полето започва да включва полета и граници, но не и подложки. По този начин, като присвоим на свойството box-sizing стойността border-box, можем да зададем ширината на блока като процент и безопасно да посочим свойствата на границата и padding на стойността, от която се нуждаем, без да се страхуваме, че ширината на блока ще се промени .

При формиране на височината на блока се използва същата формула, както при формиране на ширината на блока. Височината на блока е сумата от височината на полето за съдържание, границата, вътрешната и външната подложка (отгоре и отдолу, разбира се). Ако свойството за височина не е посочено, стойността по подразбиране е зададена на auto, в който случай височината на полето за съдържание се изчислява автоматично и зависи от самото съдържание.

Фигура 9 показва всички свойства, които съставляват общата височина на блока, обозначена с черна пунктирана линия.


Фигура 9. Височина на блока.

Въпреки че формулата за определяне на височината на блок и неговата ширина са много сходни по принцип, има значителни разлики в това отношение при работа с блокове.

Нека преминем направо към пример и да разгледаме случай, в който свойствата на ширината и височината на блока са зададени на 200%.

CSS модел на кутия

Блокът също получава цвят на фона, за да покаже неговата област. Ето как изглежда:

Фигура 10. Работа на пример № 6.

Виждаме, че се е образувала хоризонтална лента за превъртане, чийто размер е два пъти по-голям от прозореца на браузъра, т.е. Ширината на блока винаги е равна на 200% от родителския елемент - прозореца на браузъра. Но във вертикала такъв ефект няма. Използването на проценти за указване на височината няма смисъл, тъй като височината по подразбиране на родителската височина не съществува и трябва да бъде посочена.

CSS модел на кутия

Блок с ширина = 200% и височина = 100%.

Тук родителският елемент за

- тегу , височината е зададена на 50px, а височината за
настроен на 100%. Тоест този таг има височина 50px.

Фигура 11. Работа на пример № 7.

Може да се види, че областта с цвят #F3F3D6 се е увеличила. Ако прозорецът на браузъра бъде допълнително намален по височина, ще се появи вертикална лента за превъртане, което не беше случаят в предишния пример.

Ако в този пример, Но как мога да задам параметъра за височина на блока като процент и той да работи. Опитайте да промените предишния пример и да зададете свойството за височина на селектора на тялото на 100%. Този пример няма да работи. Защо? Защото за етикета височината се определя спрямо неговия родител - тага , а там височината не е посочена. Така че 100% от нищото е равно на нищо. За да разрешите този проблем, трябва да напишете следния стил:

CSS модел на кутия

Блок с ширина и височина = 200%.

Само като зададете височината на 100% за етикетите И ще можем да зададем височината в проценти за етикета

и ще работи.

Фигура 12. Работа на пример № 8.

Още нещо, което трябва да имате предвид, когато работите с височината на блока, е, че ако съдържанието надвишава размера на блока, то надхвърля блока. Ето пример за такъв код:

CSS модел на кутия

Минаха хилядолетия. Механизъм, предназначен да работи вечно, е спрял. Животоподдържащите системи са повредени.

Примерът показва, че текстът е излязъл извън границите на блока.

Фигура 13. Работа на пример № 9.

Много е лесно да избегнете това - просто не задавайте височината на съдържанието (височина). Понякога обаче трябва стриктно да определите височината на блока. В този случай можете да използвате свойството overflow със стойност auto. Това свойство ще създаде лента за превъртане в блока, ако размерът на съдържанието надвишава размера на блока.

Нека добавим свойството overflow към стила на пример № 9 със стойност auto и резултатът ще бъде такъв:

Фигура 14. Свойството за препълване със стойност auto.

Свойството overflow има още една стойност, която също може да се използва за регулиране на височината на блока - hidden. Тази стойност просто скрива всичко, което не се вписва в зададените размери на блока.

Фигура 14. Свойството за препълване със скрита стойност.

Минимална и максимална ширина на елемента

В тази статия също е уместно да си припомним свойствата min-width и max-width, които задават съответно минималната и максималната ширина на елемента.

Свойството min-width работи по следния начин: ако потребителят промени размера на прозореца на браузъра, ширината на блока не става по-малка от минимума и в този случай се появява лента за превъртане. Ширината на елемента ще зависи от стойностите на свойствата width, max-width и min-width.

Таблицата показва как браузърите изчисляват ширината на блока, когато използват тези свойства.

Таблица 1. Ширина на елемента
Стойности на имотите ширина
мин. ширина < ширина < максимална ширина ширина
мин. ширина > ширина > максимална ширина мин. ширина
мин. ширина > ширина < максимална ширина мин. ширина
мин. ширина < ширина ширина
мин. ширина > ширина мин. ширина
мин. ширина > максимална ширина мин. ширина
мин. ширина < максимална ширина максимална ширина

свойство max-width - задава максималната ширина на елемента. Пример за използване на свойството max-width:

CSS модел на кутия

Минаха хилядолетия. Механизъм, предназначен да работи вечно, е спрял. Животоподдържащите системи са повредени.

Непознатият се огледа. Във всички посоки до хоризонта имаше пустиня.

Минимална и максимална височина на елемента

По същия начин има свойства за задаване на минималната и максималната височина на елемент: min-height и max-height.

Тази статия обсъжда един много важен аспект от оформлението на уеб страницата - моделът на кутията, или с други думи, блокова система за оформление на уебсайт.

За да разкрием същността на тази концепция, нека се обърнем към спецификациите W3C. В този документ се посочва, че блоковият елемент е правоъгълник, създаден за тагове на дърво на документа.

Казано по-просто, таговете в една страница се преобразуват в правоъгълници, когато се показват на екрана.

Структура на блоков елемент

Структурата на модела кутия не е особено сложна.

Грубо казано, той прилича на кукли за гнездене, направени от правоъгълници: най-големият правоъгълник е външните полета или вдлъбнатина, следван от границата на самия блоков елемент, след това вътрешните вдлъбнатини и самото съдържание.

За да илюстрирате този проблем по-ясно, вижте фигурата по-долу:

Размерът на всеки компонент се коригира с помощта на подходящия CSS стил: марж– външни полета, граница– границите на самия елемент, и подплата– величина на вътрешните полета.

Също така си струва да се отбележи, че размерът на полетата и границите може да се контролира независимо за всяка страна, което е ясно илюстрирано на фигурата по-долу:

Фундаментални разлики между margin и padding

На първо място, трябва да начертаете ясна граница между понятията вътрешен и външен отстъп. Външна подложка в този смисъл означава разстоянието между външните околни елементи и границата на самия блоков елемент, а вътрешна подложка означава разстоянието от съдържанието до границата.

Следващата фундаментална разлика между тези елементи е, че когато присвоите определен цвят на фона, цветът ще се разпространи само върху пространството, свързано с елемента за подплата.

Друга отличителна черта на тези елементи се основава на изчисляването на общата ширина на блоковия компонент. По подразбиране подложката е включена в тази ширина, но полето не е. Това обстоятелство зависи от използвания модел на документен блок.

Видове блокови модели

Днес има само 2 различни модела блокови системи: традиционен, базиран на операционните характеристики на Internet Explorer 6 и общ, базиран на основните принципи на постулатите на W3C. Последният се използва от всички съвременни браузъри.

Отличителна черта на блоковите елементи от различни системи

Има една единствена разлика между блоковете в традиционната и масово използваната система. Тя се основава на разликата в правилата за изчисляване на височината и ширината на блока.

Според традиционната структура на системата от блокови елементи, съгласно правилата на Internet Explorer, свойствата за височина и ширина включват размерите не само на съдържанието, но и на неговите граници и подложки.

Въпреки това, по-модерната блокова система, която се регулира от постулатите на W3C, взема предвид само съдържанието при присвояване на свойства за ширина и височина. Ясна разлика е показана на фигурата по-долу:

Много е важно да имате предвид тези разлики, когато създавате нов уеб ресурс.

Определяне на действителните размери на елементите

Надявам се, че всичко е много ясно с традиционния подход за определяне на височина и ширина на блок. Например, ако уеб администратор напише следния код в CSS файл:

Блок (ширина: 200px; подложка: 20px;)

Това означава, че елемент с клас блок ще бъде с ширина 200px, като се вземе предвид факта, че самото съдържание ще заема 180px, а останалите 20px ще се използват като padding.

Вторият случай, който не е традиционен, е свързан с определени трудности. Те възникват, защото свойствата за ширина и височина се прилагат само към съдържанието, в резултат на което размерите на блока няма да съответстват на тези параметри.

Защото уважаващият себе си дизайнер на оформление трябва да знае как се определят реалните размери на един блоков елемент. В работата по тази точка ще ни помогне чертеж, който илюстрира компонентите, съставляващи блока:

От това следва, че за да определите например височината на блоков елемент, трябва да добавите горната и долната подложка, границите и височината на съдържанието. Подобни изчисления се извършват при определяне на географската ширина на елемента, който е представен на фигурата по-долу:

Възниква обаче интересна ситуация, ако ширината е зададена като процент с ненулева граница и подложка. Тогава, естествено, ще има грешка в размерите на елемента.

Ето защо опитни уеб администратори се опитват да използват процентното обозначение на ширината възможно най-малко за блоково оформление според правилата на W3C.

Обобщаване

След като се справите с този проблем, можете да избегнете много проблеми при проектирането на уебсайтове, особено в началните етапи.

Ако желаете, имаме възможност да превключим блоковия модел на документа по наша преценка, като използваме свойството box-sizing. Но не бих препоръчал да правите това, защото ако забравите за този нюанс в бъдеще или просто прехвърлите сайтовете си на други хора, може да се окажете в доста неудобна ситуация.

Моделът на кутията е една от основните концепции на оформлението.

Спецификацията на W3C дефинира тази концепция, както следва:

Моделът CSS кутия описва правоъгълна кутия, която се генерира за елемент в дървото на документа и се изобразява според модел на визуално форматиране.

На руски това означава, че елемент в HTML документ се показва в собствен отделен правоъгълен блок.

Елементна структура в блоков модел

Най-общо казано, блокът се състои от директно съдържание(вътрешно съдържание), подплата, границии накрая маржове.

За да контролирате всяка от съставните части на блока, има съответните CSS свойства: padding - , borders - , padding - . Ако желаете, тези свойства могат да бъдат зададени за всяка страна на блока поотделно (вижте фигурата):

Каква е разликата между вътрешна и външна подплата

И така, за даден елемент можете да зададете граници (рамка) и два вида отстъпи. С какво се различават?

Основната разлика е очевидна веднага: подложката е подложката между съдържанието и границата, а полето е подложката между границата и „външния свят“.

Това води до втората разлика - ако зададете фон () за елемент, тогава както съдържанието, така и вътрешната подложка ще бъдат запълнени с този фон. Маржът, който е отвън, винаги остава прозрачен.

Padding, ако използваме аналогия, са полетата на лист хартия. Имат същия цвят като самия лист, но текстът не върви върху тях. Полето е разстоянието от ръба на листа до друг съседен лист или, да речем, до ръба на масата.

Третата разлика е, че подложката и полето допринасят по различен начин за изчисляването на общата ширина на блока. Това зависи от възприетия блоков модел.

Какви са блоковите модели?

В момента има два основни блокови модела: модел от W3C, който се поддържа от всички основни браузъри и се нарича традиционен— поддържа се от IE6 в режим на обратна съвместимост.

Каква е разликата между различните модели блокове

Блоковата структура на елемента е абсолютно същата. Единствената разлика между различните модели е правила за оразмеряванеелемент.

В традиционния модел на кутия, който IE6 поддържа в режим на съвместимост, размерите на елемента, определени от свойствата и , включват съдържанието на елемента, подложката и рамката.

В кутийния модел на W3C размерите на елемент, определени от свойствата за ширина и височина, включват само частта със съдържанието. Това означава, че ширината и височината не включват нито размерите на подложката, нито размерите на границите (вижте фигурата).

Действителната ширина на елемента съответно ще бъде равна на: + + + + .

Съответно, същият пример „ширина на елемента 100px и подложка 10px от всяка страна“ вече ще даде блок с обща ширина 120px! Тъй като width:100px означава точно 100px за областта на съдържанието. Всички подложки и граници се добавят към тази фиксирана стойност.

Логиката също е ясна: основното в един блок е неговото съдържание. И ако казах сто пиксела, това означава сто и никакви подложки или граници няма да променят нищо за мен!

На пръв поглед всичко е лесно и просто! Но го нямаше…

Какво да направите, например, в ситуация, в която ширината на елемента е 100%, но подложката и/или рамката не са равни на 0? Тогава действителната ширина на елемента ще бъде по-голяма от 100%, а това не винаги е желателно.

Това е най-голямата трудност на блоковия модел на W3C: когато ширината е посочена в проценти, а подложката и рамката са в пиксели. Тази ситуация трябва, ако не да се избягва, то поне да се използва по-рядко и с разбиране на проблема.

Блоково управление на модела

Както е описано по-горе, кутийният модел на W3C може да причини много проблеми в някои случаи, така че мъдрите хора от същия W3C са включили в CSS3 възможността за превключване между модела на кутия на W3C и традиционния модел на кутия, използвайки свойството CSS3. Повече подробности за това къде и как може да се използва това са описани в статията.

От автора:всичко е съставено от кутии - това е може би най-важното нещо, което трябва да разберете в CSS. По-подробно, всеки елемент в документа генерира кутия. Боксът може да бъде блоково или инлайн ниво. Типът кутия определя как елементът ще повлияе на оформлението на страницата.

Дали кутията е създадена или не, както и типът на тази кутия зависи от езика за маркиране. CSS е проектиран като начин за стилизиране на HTML документи, така че моделът за визуално изобразяване на CSS до голяма степен се корени в разликите между блоковите и вградените елементи в HTML. По подразбиране елементите p и section създават полета на ниво блок, а таговете a, span и em създават вградени полета. SVG изобщо не използва модел на кутия, така че повечето свойства на оформлението на CSS не работят с SVG.

Кутиите на ниво блок създават нови блокове от съдържание, както се вижда на фигура 4.1. Блоковите кутии се изобразяват вертикално в първоначалния им ред и запълват (с изключение на таблиците) цялата ширина на контейнера. Това е нормалното показване на блок, елемент от списък, таблица и други таблици-* стойности (напр. клетка-таблица).

Фигура 4.1. полета на ниво блок в тагове h1, p, ul и table вътре в контейнера (сива зона)

Кутиите на вградено ниво не образуват нови блокове със съдържание. Тези кутии създават линии вътре в блокова кутия. Те се показват хоризонтално и запълват ширината на контейнерната кутия, като прескачат на нови редове, ако е необходимо, както е показано на Фигура 4.2. Кутиите на вградено ниво включват стойности на свойствата за показване inline, inline-block, inline-table и ruby.

Фигура 4.2. пример за вградено поле с margin: 1em и padding: 5px

Но как се изчисляват размерите на кутията? Тук нещата стават малко по-сложни. На Фигура 4.3 можете да видите, че размерите на кутията са сумата от областта на съдържанието, подложката и ширината плюс ширината на рамката, както е дефинирано в CSS2. Ширината на полето създава поле за поле на елемента и засяга други елементи в документа, но по никакъв начин не влияе на размера на самото поле.

Фигура 4.3. блоков модел по CSS 2.1

Например p таг с ширина: 300px, padding: 20px и border: 10px ще има изчислена ширина от 360px. Ширината се състои от ширината на абзаца, лявата и дясната подложка, както и ширината на лявата и дясната граница. За да направите общата ширина на елемента 300px, като същевременно поддържате 20px подложка и 10px рамка, трябва да зададете ширина: 240px. Повечето браузъри изчисляват ширината по този начин. Но това не важи за IE 5.5.

IE 5.5 използва свойството width като крайна стойност за размерите на кутията, принуждавайки подложката и рамката вътре в кутията, както е показано на Фигура 4.4. И двете стойности се изваждат от ширината, намалявайки размера на областта на съдържанието. Много програмисти смятат този подход за по-разумен, въпреки че не работи според спецификацията.

Фигура 4.4 Модел на кутия в CSS 2.1 и модел на кутия в стария IE 5.5

Работната група на CSS въведе свойството за оразмеряване на кутията като частично решение на тези конкуриращи се модели. Той ви позволява да изберете изпълнението на блоковия модел, а също така значително опростява изчисленията при работа с адаптивен дизайн.

Избор на модел на кутия с помощта на свойството box-sizing

Свойството box-sizing е дефинирано в спецификацията CSS Basic User Interface Module Level 3 и приема две възможни стойности: content-box и border-box.

По подразбиране е content-box. С тази стойност свойствата за ширина и височина влияят върху размера на областта на съдържанието, което е същото поведение, както е описано в спецификацията на CSS 2.1. Това поведение е по подразбиране в съвременните браузъри (както е показано на фигура 4.4).

Стойността на border-box добавя малко магия. Свойствата за ширина и височина започват да се прилагат към външната граница на рамката, а не към областта на съдържанието. Контурът и подложката се изчертават вътре в полето на елемента, което е същото като старото поведение в IE 5.5. Нека да разгледаме пример, в който ширината в проценти се комбинира с px върху подложката и рамката:

Това е заглавие

< div class = "wrapper" >

< article >

< h2 >Това е заглавие< / h2 >

< p >< / p >

< / article >

< aside >

< h2 >Това е второстепенно заглавие< / h2 >

< p >Lorem ipsum dolor sit amet, consectetur adipisicing. . .< / p >

< / aside >

< / div >

CSS кодът по-долу се прилага към етикетите article и aside, което ни дава оформлението, показано на фигура 4.5, където първият елемент е 60% широк, а вторият е 40% широк:

статия, отстрани (фон: #FFEB3B; граница: 10px плътен #9C27B0; плаващ: отляво; подложка: 10px;) статия (ширина: 60%;) отстрани (ширина: 40%;)

статия , настрана (

фон: #FFEB3B;

граница: 10px плътен #9C27B0;

поплавък: наляво;

подложка: 10px;

статия(

ширина: 60%;

настрана (

ширина: 40%;

Фигура 4.5. елементи с оразмеряване на кутия: content-box

По подразбиране, aside и article имат свойството box-sizing, зададено на content-box. Стойностите за ширина на границата и подложка добавят 40 пиксела към ширината на елементите, което променя съотношението на 60%/40%. Нека добавим свойство box-sizing: border-box към статията и странични тагове:

статия, настрана ( box-sizing: border-box; )

статия , настрана (

кутия - оразмеряване : бордюр - кутия ;

Промените са показани на Фигура 4.6: ширината на елементите е запазена, но поради оразмеряването на кутията: border-box, ширината вече също се състои от граница и подложка. Ширината вече се прилага към външния ръб на рамката, а не към областта на съдържанието, така че нашите елементи са плътно опаковани и не се преместват на нов ред.

Фигура 4.6 елементи с оразмеряване на кутия: border-box

Бих предложил да използвате свойството box-sizing: border-box. Това прави живота по-лесен; не е необходимо да изчислявате ширината, за да коригирате ширината за подложка и рамка.

Най-добре е да използвате box-sizing: border-box с правила за нулиране. Примерът по-долу е взет от статията на Chris Coyier в CSS-Tricks "