├── .DS_Store ├── .github ├── CONTRIBUTING.md ├── FUNDING.yml └── PULL_REQUEST_TEMPLATE.md ├── CODE_OF_CONDUCT.md ├── LICENSE.txt ├── README.md ├── SECURITY.md └── assets ├── code.png └── css.svg /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevLoversTeam/css-interview-questions/eb2413582b9b3cb19ddb967593fe9a16a446cdbf/.DS_Store -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 🧠 Як зробити внесок у Frontend Lovers 2 | 3 | Дякуємо, що хочете зробити внесок у наш проєкт! Нижче описано кілька простих правил, які допоможуть вам підготувати якісний pull request. 4 | 5 | ## 🔧 Формат доповнення 6 | 7 | - Кожне питання повинне бути оформлене в HTML-елементі `
` зі структурою: 8 | 9 | ![Code](../assets/code.png) 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # FUNDING.yml 2 | # Налаштування можливостей підтримки проєкту 3 | 4 | github: ViktorSvertoka 5 | buy_me_a_coffee: viktor.svertoka 6 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Чекліст: 6 | 7 | - [ ] Я ознайомився з [CONTRIBUTING.md](CONTRIBUTING.md) і дотримувався вказівок. 8 | - [ ] Моє доповнення не дублює вже існуюче питання чи відповідь. 9 | - [ ] Я додав(ла) нове запитання у відповідному форматі (див. існуючі приклади). 10 | - [ ] Я додав(ла) нове запитання **в кінець файлу** з **наступним за порядком номером**. 11 | 12 | --- 13 | 14 | 15 | 16 | ... 17 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | - Demonstrating empathy and kindness toward other people 21 | - Being respectful of differing opinions, viewpoints, and experiences 22 | - Giving and gracefully accepting constructive feedback 23 | - Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | - Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | - The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | - Trolling, insulting or derogatory comments, and personal or political attacks 33 | - Public or private harassment 34 | - Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | - Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | [frontendlovers@gmail.com](mailto:frontendlovers@gmail.com). 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Frontend Lovers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | CSS CSS logo 3 |

4 | 5 |

Найпопулярніші запитання та відповіді на співбесіді з CSS

6 | 7 |
8 | 1. Що таке CSS? І навіщо він використовується? 9 | 10 | #### CSS 11 | 12 | - CSS (Cascading Style Sheets) — це мова стилів для опису вигляду веб-сторінок. Використовується для розмітки елементів на сторінці, таких як шрифти, кольори, відступи, позиціонування та інші візуальні аспекти. CSS дозволяє відокремити контент (HTML) від стилів, що полегшує підтримку та зміну вигляду сайту. 13 | 14 |
15 | 16 |
17 | 2. Що таке каскадність у CSS?? 18 | 19 | #### CSS 20 | 21 | - Каскадність у CSS — це механізм, який визначає, як застосовуються стилі до елементів веб-сторінки, якщо для одного елемента задано кілька різних стилів із різних джерел або рівнів. Вона дозволяє браузеру вирішити, які стилі будуть мати вищий пріоритет і застосовуватися в кінцевому результаті. 22 |
23 | 24 |
25 | 3. Які є способи підключення CSS до HTML-документу? 26 | 27 | #### CSS 28 | 29 | - Вбудовані стилі (inline) — напряму в HTML-тегах через атрибут `style`. 30 | - Внутрішні стилі — у секції ` ` всередині HTML-документа. 31 | - Зовнішні стилі — у CSS-файлах, підключених через `` або `@import`. 32 | 33 |
34 | 35 |
36 | 4. Що таке CSS-селектори? Наведіть приклади. 37 | 38 | #### CSS 39 | 40 | - CSS-селектори використовуються для вибору HTML-елементів, до яких застосовуються стилі. 41 | 42 | - **Приклади:** 43 | 44 | - За тегом: `h1 { color: red; }` 45 | - За класом: `.button { background: blue; }` 46 | - За ID: `#header { padding: 10px; }` 47 | 48 | - **Комбіновані:** 49 | 50 | - Дочірні: `ul > li { margin: 5px; }` 51 | - Нащадки: `div p { font-size: 14px; }` 52 | - Атрибути: `[type="text"] { border: 1px solid gray; }` 53 | 54 | - **Псевдокласи:** 55 | 56 | - `a:hover { color: green; }` 57 | - `:nth-child(2) { font-weight: bold; }` 58 | 59 | - **Псевдоелементи:** 60 | 61 | - `p::first-line { text-transform: uppercase; }` 62 | 63 |
64 | 65 |
66 | 5. Як працює наслідування в CSS? 67 | 68 | #### CSS 69 | 70 | - Наслідування в CSS дозволяє деяким властивостям автоматично передаватися від батьківського елемента до дочірніх. 71 | 72 | - **Особливості:** 73 | 74 | 1. Автоматично наслідуються тільки текстові та декоративні властивості: 75 | 76 | - `color`, `font`, `visibility`, `line-height` тощо. 77 | 78 | 2. Не наслідуються автоматично властивості, що впливають на коробку (box model): 79 | 80 | - `margin`, `padding`, `border`, `width`, `heigh`t тощо. 81 | 82 | - **Контроль наслідування:** 83 | 84 | 1. **Примусове наслідування:** використовуйте значення inherit. 85 | 86 | ```css 87 | p { 88 | border: inherit; 89 | } 90 | ``` 91 | 92 | 2. **Відміна наслідування:** значення initial скидає властивість до початкового (згідно стандарту). 93 | 94 | ```css 95 | p { 96 | color: initial; 97 | } 98 | ``` 99 | 100 |
101 | 102 |
103 | 104 | 6. Що таке «модель коробки» (box model) в CSS і як її можна змінити? 105 | 106 | #### CSS 107 | 108 | - «Модель коробки» (box model) визначає, як розміри елемента розраховуються в CSS. Вона складається з: 109 | 110 | - **Content:** Вміст елемента (текст, зображення). 111 | - **Padding:** Внутрішній відступ між вмістом і рамкою. 112 | - **Border:** Рамка навколо padding. 113 | - **Margin:** Зовнішній відступ між елементом і сусідніми елементами. 114 | 115 | - Розрахунок ширини та висоти: 116 | 117 | - За замовчуванням: 118 | 119 | ```css 120 | Width/Height = Content + Padding + Border 121 | ``` 122 | 123 | - Зміна моделі коробки: 124 | 125 | - Використовуйте властивість box-sizing: 126 | 127 | 1. content-box (за замовчуванням): 128 | 129 | - Ширина/висота включає лише вміст. Padding і border додаються до загального розміру. 130 | 131 | ```css 132 | box-sizing: content-box; 133 | ``` 134 | 135 | 2. border-box: 136 | 137 | - Ширина/висота включають вміст, padding і border (зручніше для макетів). 138 | 139 | ```css 140 | box-sizing: border-box; 141 | ``` 142 | 143 | - Приклад: 144 | 145 | ```css 146 | * { 147 | box-sizing: border-box; 148 | } 149 | ``` 150 | 151 | - Це допомагає уникнути помилок у розмітці. 152 | 153 |
154 | 155 |
156 | 7. У чому різниця між margin і padding? 157 | 158 | #### CSS 159 | 160 | - Різниця між margin і padding: 161 | 162 | 1. Розташування: 163 | 164 | - `margin` створює зовнішній відступ між елементом і сусідніми елементами. 165 | - `padding` створює внутрішній відступ між вмістом елемента і його рамкою (border). 166 | 167 | 2. Вплив на фон: 168 | 169 | - `margin` не впливає на фон елемента; простір залишається прозорим. 170 | - `padding` є частиною елемента, тому фон розтягується на область padding. 171 | 172 | 3. Колізія (margin collapsing): 173 | 174 | - `margin` сусідніх блоків може "зливатися" в один (найбільший). 175 | - `padding` не зливається; завжди додається до внутрішнього простору. 176 | 177 | - Приклад: 178 | 179 | ```css 180 | div { 181 | margin: 20px; /* Відступ від інших елементів */ 182 | padding: 20px; /* Відступ між вмістом і рамкою */ 183 | background-color: lightblue; 184 | } 185 | ``` 186 | 187 |
188 | 189 |
190 | 8. Що таке Flexbox? 191 | 192 | #### CSS 193 | 194 | - Flexbox (Flexible Box Layout) — це CSS-модель розташування елементів, яка забезпечує гнучке вирівнювання та розподіл простору в межах контейнера, навіть якщо розміри елементів невідомі або змінюються. 195 | 196 | - **Основні поняття:** 197 | 198 | - **Flex-контейнер:** Батьківський елемент, на який застосовується `display: flex;`. 199 | - **Flex-елементи:** Дочірні елементи flex-контейнера. 200 | 201 | - **Основні властивості Flexbox:** 202 | 203 | 1. Для контейнера: 204 | 205 | - `flex-direction`: Напрямок розташування елементів (`row`, `row-reverse`, `column`, `column-reverse`). 206 | - `justify-content`: Горизонтальне вирівнювання елементів (`flex-start`, `center`, `space-between`, `space-around`, `space-evenly`). 207 | - `align-items`: Вертикальне вирівнювання елементів (`stretch`, `center`, `flex-start`, `flex-end`, `baseline`). 208 | - `align-content`: Вирівнювання рядків у багаторядковому контейнері (`stretch`, `center`, `space-between`). 209 | - `flex-wrap`: Дозволяє елементам переноситися (`nowrap`, `wrap`, `wrap-reverse`). 210 | 211 | 2. Для елементів: 212 | 213 | - `flex-grow`: Як елемент збільшується вільним простором. 214 | - `flex-shrink`: Як елемент зменшується при нестачі простору. 215 | - `flex-basis`: Базовий розмір елемента перед розподілом простору. 216 | - `align-self`: Вирівнювання конкретного елемента всередині контейнера. 217 | 218 | - Приклад: 219 | 220 | ```css 221 | .container { 222 | display: flex; 223 | justify-content: center; 224 | align-items: center; 225 | } 226 | 227 | .item { 228 | flex: 1; /* Рівний розподіл простору */ 229 | } 230 | ``` 231 | 232 |
233 | 234 |
235 | 9. Що таке Grid? 236 | 237 | #### CSS 238 | 239 | - CSS Grid — це потужна система розмітки, яка дозволяє створювати двовимірні сітки для розташування елементів як по горизонталі, так і по вертикалі. 240 | 241 | - **Основні поняття:** 242 | 243 | - **Grid-контейнер:** Елемент, на який застосовується `display: grid;`. 244 | - **Grid-елементи:** Дочірні елементи grid-контейнера. 245 | - **Лінії сітки:** Вертикальні та горизонтальні межі, що ділять сітку на осередки. 246 | - **Треки:** Рядки (`rows`) і колонки (`columns`). 247 | - **Області:** Прямокутні зони, об'єднані з кількох осередків. 248 | 249 | - **Основні властивості Grid:** 250 | 251 | 1. Для контейнера: 252 | 253 | - `grid-template-rows`, `grid-template-columns`: Задають кількість і розміри рядків та колонок. 254 | - `grid-template-areas`: Іменовані області для організації елементів. 255 | - `gap` (або `row-gap/column-gap`): Відступи між рядками та колонками. 256 | - `justify-items`, `align-items`: Вирівнювання елементів у клітинках. 257 | - `justify-content`, `align-content`: Вирівнювання всієї сітки в контейнері. 258 | 259 | 2. Для елементів: 260 | 261 | - `grid-column`, `grid-row`: Позиціювання по колонках і рядках. 262 | - `grid-area`: Розміщення в іменованій області. 263 | - `place-self`: Індивідуальне вирівнювання елемента. 264 | 265 | - Приклад: 266 | 267 | ```css 268 | .container { 269 | display: grid; 270 | grid-template-columns: 1fr 2fr; /* Дві колонки: 1 частина та 2 частини */ 271 | grid-template-rows: 100px auto; /* Рядок фіксованої висоти і автоматичний */ 272 | gap: 10px; 273 | } 274 | 275 | .item1 { 276 | grid-column: 1 / 3; /* Займає дві колонки */ 277 | } 278 | 279 | .item2 { 280 | grid-row: 2; /* Розташований у другому рядку */ 281 | } 282 | ``` 283 | 284 |
285 | 286 |
287 | 10. Що таке медіазапити та як їх використовувати? 288 | 289 | #### CSS 290 | 291 | - Медіазапити — це умови, які дозволяють застосовувати різні стилі в залежності від характеристик пристрою (наприклад, розміру екрану, орієнтації). Вони використовуються в CSS через правило @media. 292 | 293 | - Приклад медіазапиту для адаптивного дизайну: 294 | 295 | ```css 296 | /* Стилі для мобільних пристроїв */ 297 | @media (max-width: 768px) { 298 | body { 299 | background-color: lightblue; 300 | } 301 | } 302 | 303 | /* Стилі для десктопів */ 304 | @media (min-width: 769px) { 305 | body { 306 | background-color: lightgreen; 307 | } 308 | } 309 | ``` 310 | 311 |
312 | 313 |
314 | 11. Як можна приховати елемент за допомогою CSS? 315 | 316 | #### CSS 317 | 318 | - Щоб приховати елемент за допомогою CSS, можна використовувати: 319 | - `display: none;` — видаляє елемент з потоку документа. Він не займає місця на сторінці і з ним не можна взаємодіяти. 320 | - `visibility: hidden;` — елемент стає невидимим, але зберігає своє місце на сторінці. 321 | - `opacity: 0;` — робить елемент прозорим, але він залишається видимим і займає місце на сторінці. 322 | 323 |
324 | 325 |
326 | 12. Як можна зробити лого посередині екрана? 327 | 328 | #### CSS 329 | 330 | - Щоб розмістити лого посередині екрана, можна використати такі способи: 331 | 332 | 1. Flexbox: 333 | 334 | ```css 335 | body, 336 | html { 337 | height: 100%; 338 | margin: 0; 339 | display: flex; 340 | justify-content: center; 341 | align-items: center; 342 | } 343 | 344 | .logo { 345 | /* стилі лого */ 346 | } 347 | ``` 348 | 349 | 2. Grid: 350 | 351 | ```css 352 | body, 353 | html { 354 | height: 100%; 355 | margin: 0; 356 | display: grid; 357 | place-items: center; 358 | } 359 | 360 | .logo { 361 | /* стилі лого */ 362 | } 363 | ``` 364 | 365 | 3. Absolute позиціювання: 366 | 367 | ```css 368 | body, 369 | html { 370 | height: 100%; 371 | margin: 0; 372 | position: relative; 373 | } 374 | 375 | .logo { 376 | position: absolute; 377 | top: 50%; 378 | left: 50%; 379 | transform: translate(-50%, -50%); 380 | } 381 | ``` 382 | 383 |
384 | 385 |
386 | 13. Як розмістити хрестик для закриття справа зверху елемента? 387 | 388 | #### CSS 389 | 390 | - Щоб розмістити хрестик для закриття в правому верхньому куті елемента, можна використати абсолютне позиціювання: 391 | 392 | ```css 393 | .container { 394 | position: relative; /* щоб хрестик позиціонувався відносно контейнера */ 395 | } 396 | 397 | .close-btn { 398 | position: absolute; 399 | top: 10px; /* відстань від верхнього краю */ 400 | right: 10px; /* відстань від правого краю */ 401 | cursor: pointer; /* щоб курсор змінювався при наведенні */ 402 | } 403 | ``` 404 | 405 | ```html 406 |
407 |
×
408 | 409 |
410 | ``` 411 | 412 |
413 | 414 |
415 | 14. Як зробити останній елемент списку червоним, незалежно від довжини списку без JS? 416 | 417 | #### CSS 418 | 419 | - Щоб зробити останній елемент списку червоним без JavaScript, можна використати псевдоклас `:last-child:`. 420 | - Це правило зробить останній елемент у будь-якому списку (незалежно від його довжини) червоним. 421 | 422 | ```css 423 | ul li:last-child { 424 | color: red; 425 | } 426 | ``` 427 | 428 | - Це правило зробить останній елемент у будь-якому списку (незалежно від його довжини) червоним. 429 | 430 |
431 | 432 |
433 | 15. Які є можливості задати колір? 434 | 435 | #### CSS 436 | 437 | - У CSS є кілька способів задати колір: 438 | 439 | 1. Ім’я кольору: 440 | 441 | ```css 442 | color: red; 443 | ``` 444 | 445 | 2. Шістнадцятковий код: 446 | 447 | ```css 448 | color: #ff0000; /* червоний */ 449 | ``` 450 | 451 | 3. RGB (Red, Green, Blue): 452 | 453 | ```css 454 | color: rgb(255, 0, 0); /* червоний */ 455 | ``` 456 | 457 | 4. RGBA (Red, Green, Blue, Alpha): 458 | 459 | ```css 460 | color: rgba(255, 0, 0, 0.5); /* червоний з прозорістю */ 461 | ``` 462 | 463 | 5. HSL (Hue, Saturation, Lightness): 464 | 465 | ```css 466 | color: hsl(0, 100%, 50%); /* червоний */ 467 | ``` 468 | 469 | 6. HSLA (Hue, Saturation, Lightness, Alpha): 470 | 471 | ```css 472 | color: hsla(0, 100%, 50%, 0.5); /* червоний з прозорістю */ 473 | ``` 474 | 475 | 7. Ключові слова прозорості: 476 | 477 | ```css 478 | color: transparent; /* прозорий */ 479 | ``` 480 | 481 | - Ці способи дозволяють вибирати колір за різними параметрами: від прямого опису кольору до використання прозорості або відтінків. 482 | 483 |
484 | 485 |
486 | 16. Що таке z-index? Чи кожен елемент його має? 487 | 488 | #### CSS 489 | 490 | - `z-index` — це властивість CSS, яка визначає порядок накладання елементів по осі Z (глибина, перетин елементів). Елементи з більшим `z-index` накладаються поверх елементів з меншим значенням. 491 | 492 | - **Особливості:** 493 | 494 | 1. Тільки для позиційованих елементів: `z-index` працює, якщо елемент має `position`: `relative`, `absolute`, `fixed` або `sticky`. Без цього `z-index` ігнорується. 495 | 496 | 2. Значення за замовчуванням: Якщо `z-index` не задано, значення за замовчуванням — `auto`. У такому випадку порядок накладання визначається порядком у DOM. 497 | 498 | 3. Може бути від’ємним: Елементи з від’ємним `z-index` можуть накладатися позаду батьківських елементів. 499 | 500 | - Приклад: 501 | 502 | ```css 503 | .div1 { 504 | position: relative; 505 | z-index: 10; /* цей елемент буде поверх */ 506 | } 507 | 508 | .div2 { 509 | position: relative; 510 | z-index: 5; /* цей елемент буде під div1 */ 511 | } 512 | ``` 513 | 514 |
515 | 516 |
517 | 17. Які переваги і недоліки використання CSS-препроцесорів? 518 | 519 | #### CSS 520 | 521 | - **Переваги CSS-препроцесорів:** 522 | 523 | 1. **Змінні:** Легко створювати глобальні змінні для кольорів, шрифтів, розмірів. 524 | 525 | ```css 526 | $primary-color: #3498db; 527 | 528 | body { 529 | color: $primary-color; 530 | } 531 | ``` 532 | 533 | 2. **Вкладеність:** Зручний запис стилів для вкладених елементів. 534 | 535 | ```css 536 | nav { 537 | ul { 538 | li { 539 | a { 540 | color: #000; 541 | } 542 | } 543 | } 544 | } 545 | ``` 546 | 547 | 3. **Міксіни:** Повторно використовувані блоки коду. 548 | 549 | ```css 550 | @mixin flex-center { 551 | display: flex; 552 | justify-content: center; 553 | align-items: center; 554 | } 555 | 556 | div { 557 | @include flex-center; 558 | } 559 | ``` 560 | 561 | 4. **Функції:** Обчислення прямо в стилях. 562 | 563 | ```css 564 | width: calc(100% - 50px); 565 | ``` 566 | 567 | 5. **Управління кодом:** Імпорт окремих файлів (`@import`), що полегшує підтримку великого проекту. 568 | 569 | - **Недоліки CSS-препроцесорів:** 570 | 571 | 1. **Складність налаштування:** Потрібно встановлювати додаткові інструменти (наприклад, компілятор для SCSS або LESS). 572 | 573 | 2. **Продуктивність:** Велика кількість вкладеностей або міксінів може ускладнити генерований CSS і вплинути на швидкість. 574 | 575 | 3. **Залежність:** Знання синтаксису препроцесора необов'язково підтримується усіма розробниками в команді. 576 | 577 | 4. **Дебагінг:** Згенерований CSS може бути складніше дебажити, якщо немає source maps. 578 | 579 | - Використання залежить від розміру проекту та необхідності складних стилів. Для великих проектів переваги переважують недоліки. 580 | 581 |
582 | 583 |
584 | 18. Для чого існують різні рівні заголовків, якщо розмір можна встановити стилями? 585 | 586 | #### CSS 587 | 588 | - Рівні заголовків (`

`) мають інше призначення, окрім визначення розміру. Їхня основна функція — структуризація контенту для семантики та доступності: 589 | 590 | 1. **Семантика:** Заголовки формують ієрархію документа. Наприклад: 591 | 592 | `

` — головна тема сторінки. 593 | `

` — підрозділ теми `

`. 594 | `

` — підрозділ `

`, і так далі. 595 | 596 | 2. **SEO:** Пошукові системи (Google, Bing) використовують заголовки для розуміння структури і змісту сторінки. Коректна ієрархія заголовків підвищує релевантність сторінки. 597 | 598 | 3. **Доступність:** Екранні читачі для людей із порушеннями зору використовують заголовки для навігації по сторінці. 599 | 600 | 4. **Стандарти:** Використання заголовків за призначенням робить код зрозумілим для інших розробників. 601 | 602 | - Розмір заголовків можна стилізувати за допомогою CSS, але правильне використання тегів забезпечує краще розуміння і роботу сторінки. 603 | 604 |

605 | 606 |
607 | 19. Які є варіанти позиціонування елемента на сторінці? 608 | 609 | #### CSS 610 | 611 | - У CSS є кілька варіантів позиціонування елементів: 612 | 613 | 1. `static` (за замовчуванням): 614 | Елемент розташовується в потоці документа відповідно до порядку в HTML. Немає можливості змінювати його положення через властивості top, right, bottom, left. 615 | 616 | 2. `relative`: 617 | Елемент залишається в потоці документа, але його положення можна змінити відносно початкової позиції за допомогою top, right, bottom, left. 618 | 619 | 3. `absolute`: 620 | Елемент вилучається з потоку і позиціонується відносно найближчого батьківського елемента з позиціюванням (relative, absolute, fixed). Якщо такого немає, то відносно всього документа. 621 | 622 | 4. `fixed`: 623 | Елемент вилучається з потоку і закріплюється відносно вікна браузера. Його положення не змінюється при прокручуванні сторінки. 624 | 625 | 5. `sticky`: 626 | Комбінація relative і fixed. Елемент позиціонується відносно потоку документа, поки не досягне заданого порогу (top, bottom тощо), після чого "прилипає" до цього порогу при прокручуванні. 627 | 628 | 6. `inherit`, `initial`, `unset`: 629 | 630 | - inherit — наслідує значення від батьківського елемента. 631 | - initial — скидає до значення за замовчуванням (static). 632 | - unset — застосовує inherit або initial залежно від контексту. 633 | 634 | - Кожен варіант використовується залежно від завдання: від базового розташування до складного позиціонування в макетах. 635 | 636 |
637 | 638 |
639 | 20. Які бувають види display? Який використовуєте найчастіше? У чому особливість inline-block? 640 | 641 | #### CSS 642 | 643 | - Основні види display в CSS: 644 | 645 | 1. `block`: 646 | 647 | - Елемент займає всю ширину батьківського контейнера. 648 | - Починається з нового рядка. 649 | - Можна задавати ширину, висоту, внутрішні/зовнішні відступи. 650 | - Приклад: `
`, `

`. 651 | 652 | 2. `inline`: 653 | 654 | - Елемент розташовується в одному рядку з іншими елементами. 655 | - Неможливо задавати ширину та висоту. 656 | - Відступи (margin/padding) впливають лише на внутрішній простір. 657 | - Приклад: ``, ``. 658 | 659 | 3. `inline-block`: 660 | 661 | - Поєднує особливості block і inline. 662 | - Елемент розташовується в рядку, але дозволяє задавати ширину, висоту, відступи. 663 | - Зручний для створення кнопок, тегів. 664 | 665 | 4. `flex`: 666 | 667 | - Відображає елемент як контейнер для гнучкого компонування дочірніх елементів. 668 | - Використовується для вирівнювання та розподілу простору між елементами. 669 | 670 | 5. `grid`: 671 | 672 | - Задає контейнер для компонування в двовимірній сітці. 673 | - Зручний для складних макетів. 674 | 675 | 6. `none`: 676 | 677 | - Елемент не відображається на сторінці. 678 | 679 | 7. `inline-flex` / `inline-grid`: 680 | 681 | - Аналогічні flex і grid, але зберігають властивості inline. 682 | 683 | 8. `table` / `table-row` / `table-cell`: 684 | 685 | - Елементи імітують поведінку таблиць HTML. 686 | 687 | - **Найчастіше використовується:** 688 | 689 | - block, inline-block, flex, і grid — залежно від завдань. 690 | - inline-block популярний для створення кнопок або елементів меню, які потрібно розташувати в рядок, але контролювати їх розміри. 691 | 692 | - **Особливість inline-block:** 693 | 694 | - Елементи розташовуються в рядок, як inline, але поводяться як block, дозволяючи задавати ширину, висоту, та всі відступи. 695 | - Проблема: між елементами може з’явитися проміжок (через пробіли в HTML). 696 | 697 | - Виправляється: 698 | - Видаленням пробілів у коді. 699 | - Встановленням font-size: 0 для батьківського контейнера. 700 | 701 |

702 | 703 |
704 | 21. Що таке CSS-правило? 705 | 706 | #### CSS 707 | 708 | - CSS-правило складається з селектора та блоку декларацій. Селектор визначає, до яких елементів на сторінці застосовуються стилі, а блок декларацій містить властивості та їх значення, що визначають вигляд цих елементів. Наприклад: 709 | 710 | ```css 711 | p { 712 | color: red; 713 | font-size: 16px; 714 | } 715 | ``` 716 | 717 | - Тут `p` — селектор (вибирає всі абзаци), а в блоці декларацій вказано, що текст буде червоним і розмір шрифту 16px. 718 | 719 |
720 | 721 |
722 | 22. Варіанти додавання CSS стилів на сторінку? 723 | 724 | #### CSS 725 | 726 | 1. **Inline CSS:** Стилі додаються безпосередньо до HTML елементів через атрибут `style`. 727 | 728 | ```html 729 |

Text

730 | ``` 731 | 732 | 2. **Internal CSS:** Стилі додаються в ` 741 | ``` 742 | 743 | 3. **External CSS:** Стилі прописуються в окремому CSS файлі, який підключається до HTML через тег ``. 744 | 745 | ```html 746 | 747 | ``` 748 | 749 | - Ці варіанти відрізняються за пріоритетом і зручністю для масштабування проектів. 750 | 751 |
752 | 753 |
754 | 23. Типи позиціонування у CSS? 755 | 756 | #### CSS 757 | 758 | 1. **static:** За замовчуванням для всіх елементів. Елементи розташовуються в нормальному потоці документа (тобто, згідно з їх порядком у HTML). 759 | 760 | 2. **relative:** Елемент розташовується відносно його початкового положення в потоці. Можна використовувати властивості `top`, `right`, `bottom`, `left`. 761 | 762 | 3. **absolute:** Елемент позиціонується відносно найближчого батьківського елемента з позиціонуванням (не `static`). Якщо такого немає, то відносно документа. 763 | 764 | 4. **fixed:** Елемент позиціонується відносно вікна браузера, тобто він залишатиметься на тому ж місці при прокручуванні сторінки. 765 | 766 | 5. **sticky:** Елемент поводиться як relative до певного моменту, після чого стає fixed, коли прокручують сторінку до заданого порогу. 767 | 768 |
769 | 770 |
771 | 24. Блокова модель CSS? 772 | 773 | #### CSS 774 | 775 | - Блокова модель CSS (Box Model) описує, як елементи розташовуються на веб-сторінці та як обчислюються їх розміри. Вона включає такі компоненти: 776 | 777 | 1. **Content (Контент):** Це основна частина елемента, де міститься текст або інші медіа. Розміри контенту визначаються властивостями `width` і `height`. 778 | 779 | 2. **Padding (Відступи):** Простір між контентом і межами елемента (border). Відступи додаються всередині елемента. Властивості: `padding-top`, `padding-right`, `padding-bottom`, `padding-left`. 780 | 781 | 3. **Border (Межа):** Лінія, яка оточує елемент. Може мати товщину, стиль та колір. Властивості: `border-width`, `border-style`, `border-color`. 782 | 783 | 4. **Margin (Зовнішній відступ):** Простір між елементом і його сусідніми елементами. Відступи додаються зовні елемента. Властивості: `margin-top`, `margin-right`, `margin-bottom`, `margin-left`. 784 | 785 | - Коли вказуються розміри елемента через `width` і `height`, вони зазвичай враховують тільки `content`, але при додаванні `padding`, `border` і `margin`, розміри елемента змінюються. 786 | 787 | - Важливо знати, що властивість `box-sizing` дозволяє визначати, як враховуються ці величини при обчисленні розмірів елемента: 788 | 789 | - `content-box` (за замовчуванням): розміри елемента — це тільки контент. 790 | 791 | - `border-box`: розміри елемента враховують також `padding` та `border`. 792 | 793 |
794 | 795 |
796 | 25. Що таке селектор? І які селектори є? 797 | 798 | #### CSS 799 | 800 | - **Селектор** у CSS — це частина правила, яка визначає, до яких елементів на сторінці застосовуються стилі. Селектори дозволяють вибирати HTML елементи для застосування стилів. 801 | 802 | #### Основні типи селекторів: 803 | 804 | 1. **Типовий селектор (Type selector):** Вибирає елементи за їх тегом. 805 | 806 | ```css 807 | p { 808 | color: red; 809 | } 810 | ``` 811 | 812 | 2. **Класовий селектор (Class selector):** Вибирає елементи за класом, починається з крапки. 813 | 814 | ```css 815 | .my-class { 816 | color: blue; 817 | } 818 | ``` 819 | 820 | 3. **Ідентифікатор (ID selector):** Вибирає елементи за ідентифікатором, починається з решітки. 821 | 822 | ```css 823 | #my-id { 824 | color: green; 825 | } 826 | ``` 827 | 828 | 4. **Атрибутний селектор (Attribute selector):** Вибирає елементи за значенням їх атрибутів. 829 | 830 | ```css 831 | input[type="text"] { 832 | border: 1px solid black; 833 | } 834 | ``` 835 | 836 | 5. **Псевдоклас (Pseudo-class selector):** Вибирає елементи, що знаходяться в певному стані. 837 | 838 | ```css 839 | a:hover { 840 | color: red; 841 | } 842 | ``` 843 | 844 | 6. **Псевдоелемент (Pseudo-element selector):** Вибирає частини елементів, наприклад, перший рядок або першу літеру. 845 | 846 | ```css 847 | p::first-letter { 848 | font-size: 2em; 849 | } 850 | ``` 851 | 852 | 7. **Комбінатори (Combinators):** 853 | 854 | - **_Descendant_** (потомок): Вибирає елементи, які є нащадками іншого елемента. 855 | 856 | ```css 857 | div p { 858 | color: purple; 859 | } 860 | ``` 861 | 862 | - **_Child_** (прямий нащадок): Вибирає елементи, що є прямими дітьми іншого елемента. 863 | 864 | ```css 865 | div > p { 866 | color: yellow; 867 | } 868 | ``` 869 | 870 | - **_Adjacent sibling_** (сусід): Вибирає елемент, який йде безпосередньо після іншого. 871 | 872 | ```css 873 | h1 + p { 874 | margin-top: 0; 875 | } 876 | ``` 877 | 878 | - **_General sibling_** (загальний сусід): Вибирає елементи, які є сусідами певного елемента. 879 | 880 | ```css 881 | h1 ~ p { 882 | color: orange; 883 | } 884 | ``` 885 | 886 | Це основні типи селекторів, що використовуються для вибору та стилізації елементів. 887 | 888 |
889 | 890 |
891 | 26. Різниця між Reset.css та Normalize.css? 892 | 893 | #### CSS 894 | 895 | - **Reset.css** і **Normalize.css** — це два різні підходи до управління стилями за замовчуванням у браузерах, але з різними цілями: 896 | 897 | 1. **Reset.css:** 898 | 899 | - **Мета:** Видалити всі стилі браузера (включаючи відступи, поля, шрифти тощо), щоб почати з "чистого аркуша". 900 | 901 | - **Результат:** Все, що за замовчуванням задається браузером, скидається, і елементи стають однаковими в усіх браузерах. Це часто призводить до того, що потрібно вручну додавати стилі для базових елементів. 902 | 903 | - **Приклад:** 904 | 905 | ```css 906 | * { 907 | margin: 0; 908 | padding: 0; 909 | border: 0; 910 | } 911 | ``` 912 | 913 | 2. **Normalize.css:** 914 | 915 | - **Мета:** Зробити стилі браузерів більш однаковими, але не скидаючи їх повністю. Підтримує стандартні стилі для елементів, щоб забезпечити однаковий вигляд у всіх браузерах. 916 | 917 | - **Результат:** Зберігаються деякі стилі за замовчуванням, але вони нормалізуються для забезпечення консистентності між різними браузерами (наприклад, вирівнювання шрифтів, списки, таблиці). 918 | 919 | - **Приклад:** 920 | 921 | ```css 922 | h1 { 923 | font-size: 2em; 924 | margin: 0.67em 0; 925 | } 926 | ``` 927 | 928 | - **Основна різниця:** Reset.css скидає всі стилі браузера до мінімуму, тоді як Normalize.css підтримує базові стилі, але нормалізує їх для більшої узгодженості між браузерами. 929 | 930 |
931 | 932 |
933 | 27. Різниця між display: none та visibility: hidden? 934 | 935 | #### CSS 936 | 937 | `display: none` і `visibility: hidden` приховують елементи, але працюють по-різному: 938 | 939 | - `display: none` 940 | 941 | - Елемент зникає повністю зі сторінки. 942 | - Він не займає місця в макеті. 943 | - Інші елементи зміщуються так, ніби його не існувало. 944 | - Події (наприклад, кліки) не спрацьовують на ньому. 945 | - Використовується для повного приховування елементів. 946 | 947 | ```css 948 | .hidden { 949 | display: none; 950 | } 951 | ``` 952 | 953 | - `visibility: hidden` 954 | 955 | - Елемент залишається на сторінці, але стає невидимим. 956 | - Він продовжує займати місце в макеті. 957 | - Інші елементи не зміщуються. 958 | - Події (наприклад, кліки) не спрацьовують, хоча елемент все ще є в DOM. 959 | 960 | ```css 961 | .hidden { 962 | visibility: hidden; 963 | } 964 | ``` 965 | 966 | **Різниця:** `display: none` прибирає елемент повністю, а `visibility: hidden` залишає його місце, але робить невидимим. 967 | 968 |
969 | 970 |
971 | 28. Різниця між блоковим та інлайновим елементами? 972 | 973 | #### CSS 974 | 975 | - **Блокові (block) та інлайнові (inline) елементи** відрізняються способом відображення та впливом на структуру сторінки. 976 | 977 | #### Блокові елементи (display: block) 978 | 979 | - Починаються з нового рядка. 980 | - Автоматично займають всю доступну ширину (по горизонталі). 981 | - Можуть містити як інші блокові, так і інлайнові елементи. 982 | - Підтримують width, height, margin, padding. 983 | 984 | **Приклади:** `
`, `

`, `

-

`, `
`, `
`, `
`, `
`, `
1015 | 1016 |
1017 | 29. Різниця між класом та ідентифікатором у CSS? 1018 | 1019 | #### CSS 1020 | 1021 | #### Клас (`class`) vs Ідентифікатор (`id`) у CSS 1022 | 1023 | | Параметр | Клас (`class`) | Ідентифікатор (`id`) | 1024 | | --------------------- | ----------------------------------------- | ----------------------------------------- | 1025 | | Синтаксис | Починається з `.` | Починається з `#` | 1026 | | Призначення | Використовується для групи елементів | Призначається одному унікальному елементу | 1027 | | Повторне використання | Може застосовуватися до кількох елементів | Повинен бути унікальним на сторінці | 1028 | | Пріоритет у CSS | Менший (0,0,1,0) | Вищий (0,1,0,0) | 1029 | | HTML приклад | `
` | `
` | 1030 | | CSS приклад | `.box { color: red; }` | `#unique-box { color: blue; }` | 1031 | 1032 | #### Різниця 1033 | 1034 | - Класи використовуються для стилізації кількох елементів. 1035 | - ID застосовується до одного унікального елемента (але можна порушити це правило). 1036 | - ID має вищий пріоритет, тому його важко перевизначити. 1037 | - Класи краще використовувати для стилізації, ID — для JavaScript або унікальної ідентифікації. 1038 | 1039 |
1040 | 1041 |
1042 | 30. Що таке CSS спрайт? І для чого він використовується? 1043 | 1044 | #### CSS 1045 | 1046 | - CSS спрайт — це техніка, де кілька зображень об'єднуються в одне велике зображення, а потім через CSS задаються позиції фону для відображення різних частин цього зображення. 1047 | 1048 | Використовується для зменшення кількості HTTP-запитів, що підвищує швидкість завантаження сторінки. Зазвичай застосовується для іконок, кнопок або інших маленьких зображень, що використовуються на сайті. 1049 | 1050 | #### Ось приклад використання CSS спрайту: 1051 | 1052 | 1. **Створення спрайта:** У вас є декілька маленьких зображень (наприклад, іконки), які ви об'єднуєте в один великий файл sprite.png. 1053 | 1054 | 2. **CSS для використання спрайта:** 1055 | 1056 | ```css 1057 | .icon { 1058 | width: 50px; 1059 | height: 50px; 1060 | background-image: url("sprite.png"); 1061 | display: inline-block; 1062 | } 1063 | 1064 | .icon-facebook { 1065 | background-position: 0 0; /* Перша іконка в спрайті */ 1066 | } 1067 | 1068 | .icon-twitter { 1069 | background-position: -50px 0; /* Друга іконка в спрайті */ 1070 | } 1071 | 1072 | .icon-linkedin { 1073 | background-position: -100px 0; /* Третя іконка в спрайті */ 1074 | } 1075 | ``` 1076 | 1077 | 3. **HTML для іконок:** 1078 | 1079 | ```html 1080 |
1081 |
1082 |
1083 | ``` 1084 | 1085 | У цьому прикладі всі іконки завантажуються з одного файлу sprite.png, і за допомогою CSS background-position визначається, яка частина спрайту відображатиметься для кожної іконки. 1086 | 1087 | - Цей підхід вже не використовуеться в CSS, але для себе знати треба. 📝 1088 | 1089 |
1090 | 1091 |
1092 | 31. Що таке вендорні префікси? І навіщо вони використовуються? 1093 | 1094 | #### CSS 1095 | 1096 | - Вендорні префікси — це спеціальні префікси, які додаються до CSS властивостей для забезпечення підтримки нових або експериментальних функцій у різних браузерах. Вони використовуються, коли властивість або функція ще не є стандартом або коли браузери реалізують їх по-своєму. 1097 | 1098 | #### Приклад вендорних префіксів: 1099 | 1100 | ```css 1101 | .element { 1102 | -webkit-transform: rotate( 1103 | 45deg 1104 | ); /* для браузерів на WebKit, таких як Chrome, Safari */ 1105 | -moz-transform: rotate(45deg); /* для Firefox */ 1106 | -ms-transform: rotate(45deg); /* для Internet Explorer */ 1107 | transform: rotate(45deg); /* стандартна властивість */ 1108 | } 1109 | ``` 1110 | 1111 | - Вендорні префікси використовуються для забезпечення сумісності з різними браузерами, поки властивість не стане частиною офіційного стандарту CSS. Вони допомагають тестувати нові функції та забезпечують їх роботу на більшій кількості браузерів, поки всі вони не впровадять підтримку стандартних властивостей. 1112 | 1113 |
1114 | 1115 |
1116 | 32. Що таке псевдоелементи? І навіщо вони використовуються? 1117 | 1118 | #### CSS 1119 | 1120 | - Псевдоелементи — це конструкції в CSS, які дозволяють стилізувати частини елементів, які не мають власного HTML представлення. Вони дозволяють додавати стилі до таких частин елементів, як перший рядок тексту, вміст перед або після елемента, або створення декоративних елементів без необхідності змінювати HTML. 1121 | 1122 | #### Основні псевдоелементи: 1123 | 1124 | - `::before` — додає вміст перед елементом. 1125 | - `::after` — додає вміст після елемента. 1126 | - `::first-letter` — стилізує першу букву тексту в елементі. 1127 | - `::first-line` — стилізує перший рядок тексту в елементі. 1128 | 1129 | **Приклад використання:** 1130 | 1131 | ```css 1132 | p::before { 1133 | content: "🔹 "; 1134 | } 1135 | 1136 | p::after { 1137 | content: " 🔸"; 1138 | } 1139 | 1140 | p::first-letter { 1141 | font-size: 2em; 1142 | color: red; 1143 | } 1144 | ``` 1145 | 1146 | **Застосування:** Псевдоелементи використовуються для: 1147 | 1148 | - Додавання декоративних елементів без зміни HTML. 1149 | - Створення візуальних ефектів (наприклад, стилізація першої літери або першого рядка). 1150 | - Додавання контенту перед або після елемента, наприклад, іконок або текстових маркерів, без необхідності додавати додаткові теги в HTML. 1151 | 1152 |
1153 | 1154 |
1155 | 33. Що таке схлопування меж (margin collapsing)? 1156 | 1157 | #### CSS 1158 | 1159 | - Схлопування меж (margin collapsing) — це явище в CSS, коли вертикальні відступи (margins) між сусідніми блоками або елементами "зливаються" в один, замість того, щоб відображатися окремо. 1160 | 1161 | **Це зазвичай відбувається в таких ситуаціях:** 1162 | 1163 | 1. Коли два сусідні блоки мають вертикальні відступи (margins). 1164 | 1165 | 2. Коли один блок має відступ, а наступний блок не має відступу або його margin значення нульове. 1166 | 1167 | У результаті, між елементами відображається відстань, що дорівнює найбільшому з цих відступів. 1168 | 1169 | **Приклад:** 1170 | 1171 | ```html 1172 |
Block 1
1173 |
Block 2
1174 | ``` 1175 | 1176 | - У цьому випадку схлопування меж призведе до того, що відстань між блоками буде 20px, а не 30px (як можна було б очікувати при додаванні 20px + 10px). 1177 | 1178 | - **Чому це відбувається?** Схлопування меж застосовується, щоб уникнути зайвих відступів і зробити верстку більш зручною для використання, оскільки зазвичай не має сенсу мати два відступи, що діють на ту саму частину простору. 1179 | 1180 | **Як уникнути схлопування:** 1181 | 1182 | - Використовувати `padding`, а не `margin`, якщо потрібно уникнути схлопування. 1183 | - Встановити `overflow` на елементі. 1184 | - Використовувати фонові або градієнтні елементи, щоб блокувати схлопування. 1185 | 1186 |
1187 | 1188 |
1189 | 34. Що таке z-index? Як формується контекст накладання? 1190 | 1191 | #### CSS 1192 | 1193 | - `z-index` — це CSS властивість, яка визначає порядок накладання елементів на сторінці. Вона використовується для визначення, який елемент має бути поверх іншого, коли елементи перекривають один одного. Вищий `z-index` означає, що елемент буде накладатися поверх елементів з нижчим значенням `z-index`. 1194 | 1195 | #### Як працює `z-index`: 1196 | 1197 | - Значення `z-index` може бути цілим числом (наприклад, 1, 10, -5). 1198 | 1199 | - За замовчуванням, елементи з однаковим `z-index` або без нього накладаються один на одного в порядку їх появи в HTML. 1200 | 1201 | - Чим більше значення `z-index`, тим вище елемент буде на сторінці. 1202 | 1203 | #### Приклад: 1204 | 1205 | ```css 1206 | div { 1207 | position: absolute; 1208 | } 1209 | 1210 | .div1 { 1211 | z-index: 1; 1212 | } 1213 | 1214 | .div2 { 1215 | z-index: 2; 1216 | } 1217 | ``` 1218 | 1219 | - У цьому прикладі `.div2` буде накладатися поверх `.div1`, оскільки у неї вищий `z-index`. 1220 | 1221 | #### Контекст накладання: 1222 | 1223 | Контекст накладання — це область, в межах якої визначаються всі значення z-index для елементів. Це стосується елементів з властивістю position (не static), або коли застосовуються інші властивості, які створюють новий контекст накладання. 1224 | 1225 | - **Контекст накладання формується, коли:** 1226 | 1227 | 1. Елемент має властивість `position` з одним із значень (`relative`, `absolute`, `fixed`, `sticky`). 1228 | 2. `z-index` встановлено на значення, відмінне від auto. 1229 | 3. Властивість opacity менша за 1. 1230 | 4. Властивість `transform`, `filter`, `perspective`, `clip-path` та інші створюють новий контекст. 1231 | 1232 | - **Як формується контекст накладання:** 1233 | 1234 | 1. Вищезгадані умови (наприклад, `position: relative` і `z-index`). 1235 | 2. Ті елементи, які знаходяться в цьому контексті, будуть порівнювати свої z-index тільки в межах цього контексту, а не з іншими елементами на сторінці. 1236 | 3. Якщо елемент знаходиться в різних контекстах накладання, то порівнювати z-index можна лише в межах кожного з контекстів. 1237 | 1238 | #### Приклад контексту накладання: 1239 | 1240 | ```html 1241 |
1242 |
Child 1
1243 |
Child 2
1244 |
1245 | 1246 |
Sibling
1247 | ``` 1248 | 1249 | - У цьому прикладі: 1250 | 1251 | - `.child 1` і `.child 2` знаходяться в одному контексті накладання всередині `.parent`. 1252 | - `.sibling` має інший контекст накладання і з'явиться поверх обох `.child`, оскільки має більший `z-index` у своєму контексті. 1253 | 1254 |
1255 | 1256 |
1257 | 35. Порядок накладання елементів у CSS (Stacking Order)? 1258 | 1259 | #### CSS 1260 | 1261 | - Порядок накладання елементів у CSS (Stacking Order) визначається порядком, у якому елементи накладаються один на одного на сторінці. Це важливо, коли елементи з різними властивостями (наприклад, `z-index`) можуть перекривати один одного. 1262 | 1263 | #### Порядок накладання (Stacking Order): 1264 | 1265 | 1. **Елементи за замовчуванням** (статичні елементи, без позиціонування та без `z-index`): 1266 | 1267 | - Елементи без позиціонування (`position: static` або без властивості `position`) розташовуються один за одним у порядку їхнього розташування в HTML. 1268 | 1269 | 2. **Елементи з позиціонуванням** (`relative`, `absolute`, `fixed`, `sticky`): 1270 | 1271 | - Якщо елемент має будь-яке інше значення `position` (крім `static`), він створює новий контекст накладання. У межах цього контексту елементи з більшим значенням `z-index` будуть накладатися поверх елементів з меншим значенням. 1272 | 1273 | 3. **Елементи з z-index**: 1274 | 1275 | - Елементи з більш високим `z-index` будуть розташовуватися поверх елементів з нижчим значенням `z-index` (якщо елементи знаходяться в одному контексті накладання). 1276 | 1277 | 4. **Невидимі елементи** (з `opacity` менше 1 або з `visibility: hidden`): 1278 | 1279 | - Елементи, які мають властивість `opacity` менше 1 або `visibility: hidden`, можуть бути розташовані поверх інших елементів, але їх все одно не видно. 1280 | 1281 | 5. **Елементи з властивістю** `transform`, `filter`, `perspective`, `clip-path` та іншими, що створюють новий контекст накладання: 1282 | 1283 | - Коли елемент має одну з цих властивостей, це створює новий контекст накладання, і елементи в цьому контексті будуть накладатися згідно з їхніми значеннями `z-index`, незалежно від того, де вони знаходяться на сторінці. 1284 | 1285 | 6. **Елементи з фонового вмісту** (`backgrounds`, `borders`, etc.): 1286 | 1287 | - Вміст, такий як фон або бордери, не створює власного контексту накладання, але може бути важливим для визначення, як інші елементи накладаються. 1288 | 1289 | #### Порядок накладання елементів за замовчуванням: 1290 | 1291 | 1. **Блоки без позиціонування** (статичні елементи). 1292 | 1293 | 2. **Елементи з позиціонуванням** `relative` (якщо не визначено `z-index`). 1294 | 1295 | 3. **Елементи з позиціонуванням** `absolute`, `fixed`, `sticky` (в залежності від `z-index`). 1296 | 1297 | 4. **Нове контексти накладання** (наприклад, елементи з `transform`, `opacity < 1`, `filter` тощо). 1298 | 1299 | #### Простіше кажучи: 1300 | 1301 | - Статичні елементи не створюють контексту накладання і накладаються в порядку їхнього розташування в HTML. 1302 | 1303 | - Елементи з позиціонуванням `relative`, `absolute`, `fixed`, `sticky` створюють контекст накладання, де `z-index` визначає, які елементи будуть поверх інших. 1304 | 1305 | - Елементи з новими контекстами накладання (наприклад, з `transform` або `opacity < 1`) накладаються поверх всіх інших елементів із меншим пріоритетом. 1306 | 1307 |
1308 | 1309 |
1310 | 36. Як за допомогою CSS визначити, чи підтримується властивість у браузері? 1311 | 1312 | #### CSS 1313 | 1314 | - Для того, щоб перевірити, чи підтримується властивість у браузері, в CSS безпосередньо неможливо це зробити, оскільки CSS сам по собі не має вбудованих механізмів для перевірки підтримки властивостей. Однак, є кілька способів зробити це за допомогою JavaScript та умовних конструкцій у CSS. 1315 | 1316 | 1. **Використання JavaScript (Modernizr)** 1317 | 1318 | Один із способів перевірити, чи підтримується CSS властивість у браузері — це використати JavaScript-бібліотеку, наприклад, Modernizr. Modernizr дозволяє перевіряти підтримку різних технологій і властивостей браузером. 1319 | 1320 | **Приклад використання Modernizr:** 1321 | 1322 | ```javascript 1323 | if (Modernizr.flexbox) { 1324 | console.log("Flexbox підтримується!"); 1325 | } else { 1326 | console.log("Flexbox не підтримується."); 1327 | } 1328 | ``` 1329 | 1330 | 2. **Використання умови @supports в CSS** 1331 | 1332 | CSS має власну конструкцію `@supports`, яка дозволяє перевіряти, чи підтримується певна CSS властивість або її значення в поточному браузері. 1333 | 1334 | **Приклад:** 1335 | 1336 | ```css 1337 | /* Перевіряє, чи підтримується flexbox */ 1338 | @supports (display: flex) { 1339 | .container { 1340 | display: flex; 1341 | } 1342 | } 1343 | 1344 | /* Якщо не підтримується flexbox, додається альтернативне значення */ 1345 | @supports not (display: flex) { 1346 | .container { 1347 | display: block; 1348 | } 1349 | } 1350 | ``` 1351 | 1352 | У цьому прикладі, якщо браузер підтримує `display: flex`, то він застосує стилі, визначені в першому блоці. Якщо ж не підтримує, застосує стилі з блоку `@supports` not. 1353 | 1354 | 3. **Використання префіксів для застарілих властивостей** 1355 | 1356 | Для старих властивостей або експериментальних властивостей браузерів часто використовуються вендорні префікси. Якщо необхідно працювати з такими властивостями, часто можна додавати ці префікси та перевіряти, чи працює код на різних браузерах. 1357 | 1358 | **Приклад з вендорними префіксами:** 1359 | 1360 | ```css 1361 | /* Вендорні префікси для трансформацій */ 1362 | .element { 1363 | -webkit-transform: rotate(45deg); 1364 | -moz-transform: rotate(45deg); 1365 | transform: rotate(45deg); 1366 | } 1367 | ``` 1368 | 1369 | Це допоможе забезпечити сумісність з різними версіями браузерів. 1370 | 1371 | #### Висновок 1372 | 1373 | Найбільш зручним методом перевірки підтримки властивості є використання @supports у CSS або бібліотеки Modernizr для JavaScript, яка дозволяє створити перевірки підтримки за допомогою скриптів. 1374 | 1375 |
1376 | 1377 |
1378 | 37. Глобальні ключові слова у CSS? 1379 | 1380 | #### CSS 1381 | 1382 | - Глобальні ключові слова в CSS — це спеціальні значення, які можна задати будь-якій CSS-властивості. Вони не змінюють саме значення властивості, а вказують, як її слід обчислювати. 1383 | 1384 | #### Список глобальних ключових слів 1385 | 1386 | 1. `inherit` – успадковує значення від батьківського елемента. 1387 | 2. `initial` – скидає значення до дефолтного (згідно зі специфікацією). 1388 | 3. `unset` – якщо властивість успадковується за замовчуванням (наприклад, color), діє як inherit, інакше – як initial. 1389 | 4. `revert` – повертає значення до того, що визначено у стилях браузера чи користувача. 1390 | 5. `revert-layer` – скидає значення до попереднього рівня каскаду (актуально для @layer). 1391 | 1392 | #### Приклади використання 1393 | 1394 | ✅ `inherit` (успадкування значення) 1395 | 1396 | ```css 1397 | p { 1398 | color: red; 1399 | } 1400 | span { 1401 | color: inherit; /* отримає червоний від

*/ 1402 | } 1403 | ``` 1404 | 1405 | ✅ `initial` (повернення до стандартного значення) 1406 | 1407 | ```css 1408 | button { 1409 | all: initial; /* скидає всі властивості до дефолтних */ 1410 | } 1411 | ``` 1412 | 1413 | ✅ `unset` (залежно від властивості) 1414 | 1415 | ```css 1416 | div { 1417 | color: unset; /* успадкує */ 1418 | width: unset; /* повернеться до `auto` */ 1419 | } 1420 | ``` 1421 | 1422 | ✅ `revert` (повернення до стандартних стилів браузера) 1423 | 1424 | ```css 1425 | a { 1426 | color: green; 1427 | } 1428 | a.special { 1429 | color: revert; /* поверне синій, якщо його задає браузер */ 1430 | } 1431 | ``` 1432 | 1433 | ✅ `revert-layer` (актуально для @layer) 1434 | 1435 | ```css 1436 | @layer framework { 1437 | button { 1438 | background: red; 1439 | } 1440 | } 1441 | 1442 | @layer custom { 1443 | button { 1444 | background: blue; 1445 | } 1446 | } 1447 | 1448 | /* revert-layer поверне червоний із framework, а не дефолтний */ 1449 | button { 1450 | background: revert-layer; 1451 | } 1452 | ``` 1453 | 1454 | #### Висновок 1455 | 1456 | - `inherit` – для спадкування. 1457 | - `initial` – для скидання до дефолту. 1458 | - `unset` – комбінує inherit та initial. 1459 | - `revert` – повертає значення браузера чи стилів користувача. 1460 | - `revert-layer` – скидає значення до попереднього рівня каскаду. 1461 | 1462 |

1463 | 1464 |
1465 | 38. Що таке перерахування селекторів? 1466 | 1467 | #### CSS 1468 | 1469 | - Перерахування селекторів — це використання кількох селекторів, розділених комою, для одночасного застосування стилів до різних елементів. 1470 | 1471 | #### Синтаксис 1472 | 1473 | ```css 1474 | selector1, 1475 | selector2, 1476 | selector3 { 1477 | property: value; 1478 | } 1479 | ``` 1480 | 1481 | #### Приклади 1482 | 1483 | ✅ Стилізація кількох елементів одночасно 1484 | 1485 | ```css 1486 | h1, 1487 | h2, 1488 | h3 { 1489 | color: red; 1490 | } 1491 | ``` 1492 | 1493 | - Усі h1, h2 і h3 стануть червоними. 1494 | 1495 | ✅ Комбінація класів і тегів 1496 | 1497 | ```css 1498 | button, 1499 | .btn { 1500 | padding: 10px; 1501 | } 1502 | ``` 1503 | 1504 | - Застосується до `
1524 | 1525 |
1526 | 39. Для чого використовується ключове слово currentColor у CSS? 1527 | 1528 | #### CSS 1529 | 1530 | - `currentColor` — це ключове слово в CSS, яке задає значення кольору (`color`) для інших властивостей, що підтримують кольори. 1531 | 1532 | #### Як працює 1533 | 1534 | - `currentColor` автоматично використовує значення, встановлене у властивості `color`. 1535 | 1536 | #### Приклади використання 1537 | 1538 | ✅ Однаковий колір для тексту та рамки 1539 | 1540 | ```css 1541 | button { 1542 | color: blue; 1543 | border: 2px solid currentColor; 1544 | } 1545 | ``` 1546 | 1547 | - Рамка кнопки буде того ж кольору, що й текст (`blue`). 1548 | 1549 | ✅ SVG-іконки із кольором тексту 1550 | 1551 | ```css 1552 | .icon { 1553 | color: red; 1554 | fill: currentColor; 1555 | } 1556 | ``` 1557 | 1558 | - `fill` у SVG прийме `color` елемента (`red`). 1559 | 1560 | ✅ Прозорість зі спадкуванням кольору 1561 | 1562 | ```css 1563 | .link { 1564 | color: green; 1565 | background: linear-gradient(currentColor 0%, transparent 100%); 1566 | } 1567 | ``` 1568 | 1569 | - Градієнт стартує від `green`, бо це значення `color`. 1570 | 1571 | #### Висновок 1572 | 1573 | - Використовує значення `color`, усуваючи дублювання стилів. 1574 | - Особливо корисно для SVG, `border`, `background`, `box-shadow`. 1575 | - Спрощує темізацію: змінюєш `color`, і все підлаштовується. 1576 | 1577 |
1578 | 1579 |
1580 | 40. Які псевдокласи є CSS? 1581 | 1582 | #### CSS 1583 | 1584 | #### Псевдокласи в CSS 1585 | 1586 | - ✅ Динамічні псевдокласи 1587 | 1588 | | Псевдоклас | Опис | 1589 | | ---------- | -------------------------------------------- | 1590 | | `:hover` | При наведенні курсору. | 1591 | | `:focus` | Коли елемент у фокусі (наприклад, `input`). | 1592 | | `:active` | Під час натискання. | 1593 | | `:visited` | Для відвіданих посилань. | 1594 | | `:target` | Для елемента, що відповідає `#anchor` в URL. | 1595 | 1596 | - ✅ Структурні псевдокласи 1597 | 1598 | | Псевдоклас | Опис | 1599 | | -------------------- | ------------------------------------------------------ | 1600 | | `:first-child` | Перший дочірній елемент. | 1601 | | `:last-child` | Останній дочірній елемент. | 1602 | | `:nth-child(n)` | Дочірній елемент за індексом `n` (можна `odd`/`even`). | 1603 | | `:nth-last-child(n)` | Те саме, але з кінця. | 1604 | | `:only-child` | Якщо елемент єдиний у батьківському контейнері. | 1605 | 1606 | - ✅ Типові псевдокласи 1607 | 1608 | | Псевдоклас | Опис | 1609 | | ---------------------- | -------------------------------------------- | 1610 | | `:first-of-type` | Перший елемент певного типу. | 1611 | | `:last-of-type` | Останній елемент певного типу. | 1612 | | `:nth-of-type(n)` | N-ий елемент певного типу. | 1613 | | `:nth-last-of-type(n)` | N-ий елемент певного типу з кінця. | 1614 | | `:only-of-type` | Якщо елемент унікальний серед такого ж типу. | 1615 | 1616 | - ✅ Логічні псевдокласи 1617 | 1618 | | Псевдоклас | Опис | 1619 | | ------------------ | ---------------------------------------------------- | 1620 | | `:not(selector)` | Вибирає все, **крім** вказаного селектора. | 1621 | | `:has(selector)` | Вибирає елементи, що містять інший елемент (`CSS4`). | 1622 | | `:where(selector)` | Як `:is()`, але без пріоритету. | 1623 | | `:is(selector)` | Спрощує складні селектори. | 1624 | 1625 | - ✅ Псевдокласи для форм 1626 | 1627 | | Псевдоклас | Опис | 1628 | | ------------- | ----------------------------------- | 1629 | | `:checked` | Позначений чекбокс або радіокнопка. | 1630 | | `:disabled` | Вимкнений елемент форми. | 1631 | | `:enabled` | Активний елемент форми. | 1632 | | `:required` | Поле `input`, що обов’язкове. | 1633 | | `:optional` | Поле `input`, що не є обов’язковим. | 1634 | | `:valid` | Поле форми з коректним значенням. | 1635 | | `:invalid` | Поле форми з некоректним значенням. | 1636 | | `:read-only` | Поле у режимі `readonly`. | 1637 | | `:read-write` | Поле, що можна редагувати. | 1638 | 1639 | **Псевдокласи допомагають стилізувати елементи без додаткових класів або JS. Використовуйте `:is()` та `:has()` для скорочення складних селекторів у CSS4.** 1640 | 1641 |
1642 | 1643 |
1644 | 41. Які фільтри є у CSS? 1645 | 1646 | #### CSS 1647 | 1648 | - Фільтри у CSS 1649 | 1650 | Фільтри (`filter`) дозволяють змінювати вигляд елементів, застосовуючи ефекти до їхнього рендерингу. 1651 | 1652 | #### 🔹 Основні фільтри 1653 | 1654 | | Фільтр | Опис | Приклад | 1655 | | --------------- | ----------------------------------------------------- | --------------------------- | 1656 | | `blur(px)` | Розмиття з вказаним радіусом у пікселях. | `filter: blur(5px);` | 1657 | | `brightness(%)` | Змінює яскравість (100% – без змін). | `filter: brightness(150%);` | 1658 | | `contrast(%)` | Змінює контраст (100% – без змін). | `filter: contrast(120%);` | 1659 | | `grayscale(%)` | Відтінки сірого (100% – чорно-біле). | `filter: grayscale(100%);` | 1660 | | `invert(%)` | Інвертує кольори (100% – повністю інвертоване). | `filter: invert(100%);` | 1661 | | `opacity(%)` | Прозорість (0% – повністю прозоре, 100% – непрозоре). | `filter: opacity(50%);` | 1662 | | `saturate(%)` | Насиченість (100% – без змін, 0% – ч/б). | `filter: saturate(200%);` | 1663 | | `sepia(%)` | Ефект сепії (100% – повністю сепія). | `filter: sepia(80%);` | 1664 | 1665 | #### 🔹 Фільтри для тіней та зміщення 1666 | 1667 | | Фільтр | Опис | Приклад | 1668 | | ----------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------- | 1669 | | `drop-shadow(x y blur color)` | Додає тінь до зображення (аналог `box-shadow`, але працює з прозорими PNG). | `filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.5));` | 1670 | 1671 | #### 🔹 Комбінування фільтрів 1672 | 1673 | - Фільтри можна комбінувати, вказуючи їх через пробіл: 1674 | 1675 | ```css 1676 | filter: brightness(120%) contrast(110%) blur(3px); 1677 | ``` 1678 | 1679 | - Фільтри застосовуються до всіх елементів, але найчастіше – до зображень (img), відео та бекграундів. 1680 | 1681 |
1682 | 1683 |
1684 | 42. Навіщо використовується псевдоклас :invalid? 1685 | 1686 | #### CSS 1687 | 1688 | - Псевдоклас `:invalid` використовується для стилізації полів вводу (``, `