🤔 Какие методологии есть?
Методологии в верстке и CSS:
- BEM (Block Element Modifier) — строгая иерархия классов;
- SMACSS — деление стилей на категории (base, layout, module, state);
- OOCSS (Object-Oriented CSS) — повторное использование объектов;
- Atomic CSS / Utility-first — минималистичные, многоклассовые подходы (Tailwind).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Методологии в верстке и CSS:
- BEM (Block Element Modifier) — строгая иерархия классов;
- SMACSS — деление стилей на категории (base, layout, module, state);
- OOCSS (Object-Oriented CSS) — повторное использование объектов;
- Atomic CSS / Utility-first — минималистичные, многоклассовые подходы (Tailwind).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1🔥10👍2
🤔 Когда нужно использовать кнопки а когда ссылки?
В веб-разработке часто возникает вопрос: использовать кнопку (
🟠Когда использовать `<button>`?
Когда действие выполняется на странице без перехода на другую
Когда нужна интерактивность (отправка формы, открытие модального окна, запуск скрипта)
Отправка формы
Открытие/закрытие модального окна
Включение/выключение чего-то на странице
Взаимодействие с JavaScript (AJAX-запросы, события)
Пример кнопки в форме:
🟠Когда использовать `<a>`?
Когда нужно перейти на другую страницу (или секцию сайта)
Когда ссылка ведет на внешний или внутренний ресурс
Навигация по сайту
Переход на другую страницу
Ссылки на соцсети, статьи, файлы
Ссылка внутри страницы (якорь)
Открытие в новом окне
🟠Ошибки и неправильное использование
Ошибка: использовать
Ставь 👍 и забирай 📚 Базу знаний
В веб-разработке часто возникает вопрос: использовать кнопку (
<button>) или ссылку (<a>) для взаимодействий? Хотя они внешне могут выглядеть одинаково, у них разные назначения и поведение. 🟠Когда использовать `<button>`?
Когда действие выполняется на странице без перехода на другую
Когда нужна интерактивность (отправка формы, открытие модального окна, запуск скрипта)
Отправка формы
Открытие/закрытие модального окна
Включение/выключение чего-то на странице
Взаимодействие с JavaScript (AJAX-запросы, события)
<button onclick="alert('Нажато!')">Кликни</button>Пример кнопки в форме:
<form>
<input type="text" placeholder="Введите имя">
<button type="submit">Отправить</button>
</form>
🟠Когда использовать `<a>`?
Когда нужно перейти на другую страницу (или секцию сайта)
Когда ссылка ведет на внешний или внутренний ресурс
Навигация по сайту
Переход на другую страницу
Ссылки на соцсети, статьи, файлы
<a href="https://example.com">Перейти на сайт</a>
Ссылка внутри страницы (якорь)
<a href="#section">Перейти вниз</a>
<section id="section">Контент</section>
Открытие в новом окне
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
Открыть в новой вкладке
</a>
🟠Ошибки и неправильное использование
Ошибка: использовать
<button> вместо ссылки<button onclick="window.location.href='https://example.com'">Перейти</button>
Ставь 👍 и забирай 📚 Базу знаний
👍11
🤔 Зачем мы разбиваем код на компоненты?
Чтобы улучшить читаемость, переиспользуемость и поддержку. Компоненты упрощают тестирование, изоляцию логики и позволяют собирать интерфейс как из конструктора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Чтобы улучшить читаемость, переиспользуемость и поддержку. Компоненты упрощают тестирование, изоляцию логики и позволяют собирать интерфейс как из конструктора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍12
🤔 Что такое псевдоэлемент?
Это специальный синтаксис, позволяющий стилизовать определенные части элемента или добавлять специальные элементы (как бы "элементы-призраки"), не создавая для этого дополнительные теги в HTML. Псевдоэлементы предоставляют удобный способ внесения изменений в структуру документа, не затрагивая HTML.
🚩Синтаксис
Начинается с двойного двоеточия (
🟠Распространенные псевдоэлементы
🚩Особенности работы
Работают как часть документа, но на самом деле не существуют в DOM-дереве, а создаются стилями.
Чтобы псевдоэлементы
Могут быть стилизованы почти так же, как обычные элементы, но есть некоторые ограничения, например, связанные с взаимодействием с JavaScript.
Ставь 👍 и забирай 📚 Базу знаний
Это специальный синтаксис, позволяющий стилизовать определенные части элемента или добавлять специальные элементы (как бы "элементы-призраки"), не создавая для этого дополнительные теги в HTML. Псевдоэлементы предоставляют удобный способ внесения изменений в структуру документа, не затрагивая HTML.
🚩Синтаксис
Начинается с двойного двоеточия (
::), за которым следует название псевдоэлемента. Например, ::before или ::after.🟠Распространенные псевдоэлементы
::before и ::after: Позволяют вставлять содержимое до или после содержимого выбранного элемента соответственно. Очень часто используются для добавления декоративных элементов. p::before {
content: "«";
color: blue;
}
p::after {
content: "»";
color: blue;
}
::first-line: Применяет стили к первой строке текста в блочном элементе. p::first-line {
font-weight: bold;
}
::first-letter: Применяет стили к первой букве текста в блочном элементе. p::first-letter {
font-size: 200%;
}
::selection: Применяет стили к части текста, которую пользователь выделил. p::selection {
background: yellow;
}
🚩Особенности работы
Работают как часть документа, но на самом деле не существуют в DOM-дереве, а создаются стилями.
Чтобы псевдоэлементы
::before и ::after отображались, необходимо задать свойство content, даже если оно пустое (content: "";).Могут быть стилизованы почти так же, как обычные элементы, но есть некоторые ограничения, например, связанные с взаимодействием с JavaScript.
Ставь 👍 и забирай 📚 Базу знаний
👍4
🤔 Как можно заставить Git что-то забыть?
Использовать git rm --cached файл, если нужно убрать файл из индекса, но оставить на диске. Для полной очистки из истории — git filter-branch, BFG Repo-Cleaner или git reset.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Использовать git rm --cached файл, если нужно убрать файл из индекса, но оставить на диске. Для полной очистки из истории — git filter-branch, BFG Repo-Cleaner или git reset.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
8👍7🔥3
🤔 Что такое массив?
Это структура данных, которая представляет собой упорядоченный список элементов. В JavaScript массивы могут содержать любые типы данных: числа, строки, объекты, другие массивы и даже функции.
🚩Почему массивы нужны?
Массивы помогают удобно хранить и обрабатывать наборы данных. Вместо того чтобы создавать множество переменных, можно использовать массив, чтобы хранить сразу несколько значений и работать с ними с помощью специальных методов.
🚩Как используются массивы?
Массивы позволяют:
Хранить несколько значений в одной переменной
Перебирать элементы с помощью циклов
Добавлять, удалять, изменять элементы
Выполнять операции, например, сортировку и фильтрацию
🚩Как создать массив?
В JavaScript массив можно создать разными способами:
С использованием литерала массива
С использованием конструктора
🚩Как обращаться к элементам массива?
Доступ к элементу массива осуществляется по индексу (начинается с 0):
🚩Основные методы работы с массивами
Добавление элемента в конец
Удаление последнего элемента
Добавление элемента в начало
Удаление первого элемента
Перебор массива
Фильтрация элементов
Ставь 👍 и забирай 📚 Базу знаний
Это структура данных, которая представляет собой упорядоченный список элементов. В JavaScript массивы могут содержать любые типы данных: числа, строки, объекты, другие массивы и даже функции.
🚩Почему массивы нужны?
Массивы помогают удобно хранить и обрабатывать наборы данных. Вместо того чтобы создавать множество переменных, можно использовать массив, чтобы хранить сразу несколько значений и работать с ними с помощью специальных методов.
🚩Как используются массивы?
Массивы позволяют:
Хранить несколько значений в одной переменной
Перебирать элементы с помощью циклов
Добавлять, удалять, изменять элементы
Выполнять операции, например, сортировку и фильтрацию
🚩Как создать массив?
В JavaScript массив можно создать разными способами:
С использованием литерала массива
let fruits = ["яблоко", "банан", "апельсин"];
С использованием конструктора
Array let numbers = new Array(1, 2, 3, 4, 5);
🚩Как обращаться к элементам массива?
Доступ к элементу массива осуществляется по индексу (начинается с 0):
let fruits = ["яблоко", "банан", "апельсин"];
console.log(fruits[0]); // "яблоко"
console.log(fruits[1]); // "банан"
🚩Основные методы работы с массивами
Добавление элемента в конец
push() let arr = [1, 2, 3];
arr.push(4);
console.log(arr); // [1, 2, 3, 4]
Удаление последнего элемента
pop() arr.pop();
console.log(arr); // [1, 2, 3]
Добавление элемента в начало
unshift() arr.unshift(0);
console.log(arr); // [0, 1, 2, 3]
Удаление первого элемента
shift() arr.shift();
console.log(arr); // [1, 2, 3]
Перебор массива
forEach() arr.forEach(item => console.log(item));
Фильтрация элементов
filter() let evenNumbers = arr.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2]
Ставь 👍 и забирай 📚 Базу знаний
👍8
🤔 Как отследить изменение модели?
Способы:
- watch: следим за конкретным полем или выражением.
-@input или @update :modelValue — события от v-model.
- computed с геттером и сеттером — можно ловить изменения при записи.
- emit из компонента — в родителе можно слушать события.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Способы:
- watch: следим за конкретным полем или выражением.
-
- computed с геттером и сеттером — можно ловить изменения при записи.
- emit из компонента — в родителе можно слушать события.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊4🔥2👍1
🤔 В чём преимущество синтаксического сахара в виде async await над promise?
Оба способа позволяют работать с асинхронным кодом в JavaScript, но
🟠`async/await` проще читать и писать
Код на
Решение:
Иногда
Ставь 👍 и забирай 📚 Базу знаний
Оба способа позволяют работать с асинхронным кодом в JavaScript, но
async/await делает код чище, проще и удобнее. 🟠`async/await` проще читать и писать
Код на
Promise.then() часто становится вложенным и запутанным fetch("https://api.example.com/user")
.then(response => response.json())
.then(user => {
return fetch(`https://api.example.com/orders/${user.id}`);
})
.then(response => response.json())
.then(orders => {
console.log("Заказы:", orders);
})
.catch(error => console.error("Ошибка:", error));Решение:
async/awaitasync function getUserOrders() {
try {
const response = await fetch("https://api.example.com/user");
const user = await response.json();
const ordersResponse = await fetch(`https://api.example.com/orders/${user.id}`);
const orders = await ordersResponse.json();
console.log("Заказы:", orders);
} catch (error) {
console.error("Ошибка:", error);
}
}
getUserOrders();async/await лучше обрабатывает ошибкиfetch("https://api.example.com/data")
.then(response => response.json())
.then(data => {
throw new Error("Ошибка в обработке данных");
})
.catch(error => console.error("Ошибка:", error));async/await + try/catch – мощная обработка ошибокasync function fetchData() {
try {
const response = await fetch("https://api.example.com/data");
if (!response.ok) throw new Error("Ошибка HTTP " + response.status);
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Ошибка:", error);
}
}
fetchData();async/await удобен в for и try/catch const urls = ["url1", "url2", "url3"];
urls.forEach(url => {
fetch(url)
.then(response => response.json())
.then(data => console.log(data));
});
async/await в for ofasync function fetchAll(urls) {
for (const url of urls) {
const response = await fetch(url);
const data = await response.json();
console.log(data);
}
}
fetchAll(["url1", "url2", "url3"]);async/await работает с try/finally async function fetchData() {
try {
console.log("Запрос данных...");
const response = await fetch("https://api.example.com");
const data = await response.json();
console.log("Данные:", data);
} catch (error) {
console.error("Ошибка:", error);
} finally {
console.log("Закрываем соединение...");
}
}
fetchData();async/await можно использовать внутри Promise.all()Иногда
Promise.all() быстрее, потому что запускает промисы параллельно. async function fetchMultiple() {
const [user, orders] = await Promise.all([
fetch("https://api.example.com/user").then(res => res.json()),
fetch("https://api.example.com/orders").then(res => res.json())
]);
console.log(user, orders);
}
fetchMultiple();Ставь 👍 и забирай 📚 Базу знаний
👍9💊2
🤔 В чём разница между event.preventDefault и event.stopPropagation?
1. event.preventDefault: предотвращает стандартное поведение элемента (например, отправку формы).
2. event.stopPropagation: останавливает дальнейшее распространение события по дереву DOM.
3. Часто используются совместно для полной обработки события без влияния на другие элементы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. event.stopPropagation: останавливает дальнейшее распространение события по дереву DOM.
3. Часто используются совместно для полной обработки события без влияния на другие элементы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍8🔥3
🤔 Как работает HTTP?
HTTP — это протокол клиент-серверного взаимодействия. Клиент отправляет запрос (метод, заголовки, тело) на сервер, сервер возвращает ответ (статус-код, заголовки, данные). Протокол работает на основе TCP, чаще всего используется для работы с вебом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
HTTP — это протокол клиент-серверного взаимодействия. Клиент отправляет запрос (метод, заголовки, тело) на сервер, сервер возвращает ответ (статус-код, заголовки, данные). Протокол работает на основе TCP, чаще всего используется для работы с вебом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍8🔥2
🤔 Зачем нужен nginx?
Nginx — это мощный веб-сервер, который используется для раздачи статических файлов, балансировки нагрузки, проксирования запросов и обеспечения безопасности.
🟠Как Nginx раздаёт фронтенд-приложение?
Когда мы билдим SPA-приложение (например, React/Vue/Angular), в папке
🟠Как Nginx проксирует запросы к бэкенду?
Если фронтенд (
🟠Как Nginx балансирует нагрузку?
Если у нас несколько бэкенд-серверов, Nginx может распределять нагрузку между ними.
🟠Как Nginx ускоряет сайт с кэшем?
Кэширование уменьшает нагрузку на сервер и ускоряет загрузку страниц.
Ставь 👍 и забирай 📚 Базу знаний
Nginx — это мощный веб-сервер, который используется для раздачи статических файлов, балансировки нагрузки, проксирования запросов и обеспечения безопасности.
🟠Как Nginx раздаёт фронтенд-приложение?
Когда мы билдим SPA-приложение (например, React/Vue/Angular), в папке
dist появляются статические файлы (index.html, app.js, styles.css). server {
listen 80;
server_name myapp.com;
root /var/www/myapp/dist;
index index.html;
location / {
try_files $uri /index.html;
}
}🟠Как Nginx проксирует запросы к бэкенду?
Если фронтенд (
myapp.com) и бэкенд (api.myapp.com) находятся на разных серверах, Nginx может перенаправлять запросы на API. server {
listen 80;
server_name myapp.com;
root /var/www/myapp/dist;
index index.html;
location / {
try_files $uri /index.html;
}
# Проксирование API-запросов
location /api/ {
proxy_pass http://localhost:5000/; # Node.js, Python, PHP и т. д.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}🟠Как Nginx балансирует нагрузку?
Если у нас несколько бэкенд-серверов, Nginx может распределять нагрузку между ними.
upstream backend {
server backend1.myapp.com;
server backend2.myapp.com;
}
server {
listen 80;
server_name api.myapp.com;
location / {
proxy_pass http://backend;
}
}🟠Как Nginx ускоряет сайт с кэшем?
Кэширование уменьшает нагрузку на сервер и ускоряет загрузку страниц.
location /static/ {
expires 7d; # Кэшировать файлы на 7 дней
add_header Cache-Control "public, max-age=604800";
}Ставь 👍 и забирай 📚 Базу знаний
🔥6👍3
🤔 Что такое позднее статическое связывание в PHP?
Это механизм, при котором PHP определяет класс, откуда был вызван статический метод, даже если он унаследован. Используется для того, чтобы self:: и static:: работали по-разному в иерархии классов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это механизм, при котором PHP определяет класс, откуда был вызван статический метод, даже если он унаследован. Используется для того, чтобы self:: и static:: работали по-разному в иерархии классов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥6
🤔 Что можно использовать при написании JS-кода в рамках JSX?
- Переменные и выражения;
- Вызовы функций;
- Условные конструкции через тернарный оператор;
- Метод .map() для вывода списков;
- Логические выражения (&&).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Переменные и выражения;
- Вызовы функций;
- Условные конструкции через тернарный оператор;
- Метод .map() для вывода списков;
- Логические выражения (&&).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍5🔥3
🤔 Как реализовать адаптивную верстку?
Адаптивная верстка (responsive design) – это метод создания веб-страниц, которые корректно отображаются на разных устройствах (телефон, планшет, ноутбук, ПК).
🟠Гибкие сетки (Flexbox, Grid, `max-width`)
Использование
Использование Flexbox
Использование CSS Grid
🟠Медиа-запросы (`@media`)
Изменяют стили в зависимости от ширины экрана.
🟠Адаптивные изображения (`srcset`, `sizes`)
Позволяет загружать разные изображения в зависимости от устройства.
🟠Viewport (`meta viewport`)
Управляет масштабированием на мобильных устройствах.
🟠CSS-фреймворки (Bootstrap, Tailwind)
Фреймворки содержат готовые адаптивные классы.
Bootstrap (грид-система)
Tailwind CSS
Ставь 👍 и забирай 📚 Базу знаний
Адаптивная верстка (responsive design) – это метод создания веб-страниц, которые корректно отображаются на разных устройствах (телефон, планшет, ноутбук, ПК).
🟠Гибкие сетки (Flexbox, Grid, `max-width`)
Использование
max-width вместо width.container {
width: 100%; /* Контейнер занимает всю ширину */
max-width: 1200px; /* Но не больше 1200px */
margin: auto; /* Центрирование */
}Использование Flexbox
.container {
display: flex;
flex-wrap: wrap; /* Перенос элементов, если не влезают */
justify-content: space-between;
}
.item {
width: 48%; /* Два элемента в ряд */
}
@media (max-width: 768px) {
.item {
width: 100%; /* Один элемент в ряд на маленьких экранах */
}
}Использование CSS Grid
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}🟠Медиа-запросы (`@media`)
Изменяют стили в зависимости от ширины экрана.
/* Десктоп (от 1024px) */
body {
font-size: 18px;
}
/* Планшеты (768px – 1023px) */
@media (max-width: 1023px) {
body {
font-size: 16px;
}
}
/* Телефоны (до 767px) */
@media (max-width: 767px) {
body {
font-size: 14px;
}
}
🟠Адаптивные изображения (`srcset`, `sizes`)
Позволяет загружать разные изображения в зависимости от устройства.
<img
src="image-400.jpg"
srcset="image-800.jpg 800w, image-1200.jpg 1200w"
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
alt="Адаптивное изображение">
🟠Viewport (`meta viewport`)
Управляет масштабированием на мобильных устройствах.
<meta name="viewport" content="width=device-width, initial-scale=1">
🟠CSS-фреймворки (Bootstrap, Tailwind)
Фреймворки содержат готовые адаптивные классы.
Bootstrap (грид-система)
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-12">Контент</div>
<div class="col-md-6 col-sm-12">Контент</div>
</div>
</div>
Tailwind CSS
<div class="grid grid-cols-2 md:grid-cols-3 sm:grid-cols-1 gap-4">
<div class="bg-blue-500">1</div>
<div class="bg-green-500">2</div>
<div class="bg-red-500">3</div>
</div>
Ставь 👍 и забирай 📚 Базу знаний
👍8
🤔 Зачем нужен хеш в названиях файлов (на примере Vue CLI)?
- Например: app.4f3e1a.js
- Если файл меняется — хеш меняется.
- Браузер получает новый файл, обходит кеш.
Это способ кеш-инвалидации — позволяет пользователям всегда получать актуальные файлы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Например: app.4f3e1a.js
- Если файл меняется — хеш меняется.
- Браузер получает новый файл, обходит кеш.
Это способ кеш-инвалидации — позволяет пользователям всегда получать актуальные файлы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥1🤔1
🤔 Что произойдет если мы напишем невалидную разметку?
Если в HTML-документе будет невалидная разметка, браузер всё равно попытается её обработать и отобразить страницу, но возможны различные неожиданные ошибки и баги. Давайте разберём, что может пойти не так.
🚩Что делает браузер с невалидным HTML?
Когда браузер сталкивается с ошибками в разметке, он использует механизм исправления ошибок (HTML Parser Error Handling). Это означает, что:
Браузер автоматически исправит некоторые ошибки (например, добавит закрывающий тег).
Некоторые элементы могут быть проигнорированы или отображены некорректно.
CSS и JavaScript могут работать неправильно из-за ошибки в DOM-структуре.
🚩Примеры ошибок и их последствия
Отсутствие закрывающего тега
Вложенность тегов в неправильных местах
По спецификации
Итоговый HTML может быть таким:
🟠Отсутствие `DOCTYPE`
Если не указать
Неправильные атрибуты в тегах
Незакрытые теги в таблице
Ставь 👍 и забирай 📚 Базу знаний
Если в HTML-документе будет невалидная разметка, браузер всё равно попытается её обработать и отобразить страницу, но возможны различные неожиданные ошибки и баги. Давайте разберём, что может пойти не так.
🚩Что делает браузер с невалидным HTML?
Когда браузер сталкивается с ошибками в разметке, он использует механизм исправления ошибок (HTML Parser Error Handling). Это означает, что:
Браузер автоматически исправит некоторые ошибки (например, добавит закрывающий тег).
Некоторые элементы могут быть проигнорированы или отображены некорректно.
CSS и JavaScript могут работать неправильно из-за ошибки в DOM-структуре.
🚩Примеры ошибок и их последствия
Отсутствие закрывающего тега
<p>Привет, мир!
<p>Это новый абзац?
Вложенность тегов в неправильных местах
<p>Текст <div>Блок внутри абзаца</div></p>
По спецификации
<div> нельзя вкладывать в <p>, браузер может вынести <div> за пределы абзаца. Итоговый HTML может быть таким:
<p>Текст </p>
<div>Блок внутри абзаца</div>
🟠Отсутствие `DOCTYPE`
Если не указать
<!DOCTYPE html>, браузер может перейти в режим совместимости (Quirks Mode), что приведёт к некорректному отображению стилей. Неправильные атрибуты в тегах
<img src="image.jpg" alt="Картинка" wrongAttr="что это?">
Незакрытые теги в таблице
<table>
<tr>
<td>Ячейка 1
<td>Ячейка 2
</tr>
</table>
Ставь 👍 и забирай 📚 Базу знаний
👍7
🤔 Что такое inline-block?
Это значение CSS-свойства display, при котором элемент ведёт себя как строчный, но сохраняет возможность задавать ширину и высоту, как блочный. Это удобно для создания адаптивных интерфейсов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это значение CSS-свойства display, при котором элемент ведёт себя как строчный, но сохраняет возможность задавать ширину и высоту, как блочный. Это удобно для создания адаптивных интерфейсов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍11
🤔 Как общаться между iframe и самой страницой?
Общение между
Метода
Доступа к
Передачи данных через
🟠`postMessage` – безопасный способ для разных доменов
Метод
🚩Передача данных из `iframe` в родительскую страницу
*Код в
Код в родительской странице (index.html)
🚩Передача данных из родителя в `iframe`
Код в родительской странице (index.html)
Код в
🚩Доступ к `window.frames` и `window.parent` (только если тот же домен!)
Если
Родительская страница →
🚩`localStorage` или `cookies` (если оба окна на одном домене)
Можно сохранять данные в
Запись в
Чтение
Ставь 👍 и забирай 📚 Базу знаний
Общение между
iframe и родительской страницей может происходить с помощью: Метода
postMessage (лучший способ) Доступа к
window.frames или window.parent (если тот же домен) Передачи данных через
localStorage или cookies 🟠`postMessage` – безопасный способ для разных доменов
Метод
window.postMessage() позволяет передавать сообщения между разными окнами (iframe, popup, другие вкладки) даже если они на разных доменах.🚩Передача данных из `iframe` в родительскую страницу
*Код в
iframe (child.html) // Отправляем сообщение родительскому окну
window.parent.postMessage({ type: "hello", data: "Привет, родитель!" }, "*");
Код в родительской странице (index.html)
window.addEventListener("message", (event) => {
console.log("Получено сообщение от iframe:", event.data);
});* в postMessage означает, что сообщение отправляется любому домену. Лучше указывать конкретный, например: window.parent.postMessage({ type: "hello" }, "https://example.com");🚩Передача данных из родителя в `iframe`
Код в родительской странице (index.html)
const iframe = document.getElementById("myIframe");
// Ждём, когда iframe загрузится
iframe.onload = () => {
iframe.contentWindow.postMessage({ type: "greeting", data: "Привет, iframe!" }, "*");
};Код в
iframe (child.html) window.addEventListener("message", (event) => {
console.log("Получено сообщение от родителя:", event.data);
});🚩Доступ к `window.frames` и `window.parent` (только если тот же домен!)
Если
iframe и основная страница находятся на одном домене, можно обращаться к их window напрямую.Родительская страница →
iframe const iframe = document.getElementById("myIframe");
// Получаем объект `window` внутри `iframe`
iframe.contentWindow.document.body.style.backgroundColor = "lightblue";iframe → Родительская страница console.log(window.parent.document.title); // Доступ к заголовку страницы
🚩`localStorage` или `cookies` (если оба окна на одном домене)
Можно сохранять данные в
localStorage или cookies, а другая сторона будет их читать. Запись в
localStorage из iframe localStorage.setItem("message", "Привет от iframe!");Чтение
localStorage в родительской странице console.log(localStorage.getItem("message")); // "Привет от iframe!"Ставь 👍 и забирай 📚 Базу знаний
👍6🔥1💊1
🤔 Как между собой связаны HTML, CSS и JS
HTML задаёт структуру, CSS отвечает за внешний вид, JS — за динамическое поведение. Они взаимодействуют через DOM: JS может читать и изменять HTML и CSS.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍14💊5
🤔 К какой категории относятся промисы?
Промисы (
Категория: Асинхронные программные конструкции (Async Objects / Async Patterns)
Тип: Объект (Promise Object)*
Используются в: Асинхронном программировании (Async/Await,
🚩Почему промисы – асинхронная конструкция?
Промисы не выполняются сразу, а ждут завершения операции, после чего выполняют код в
🚩Promise – это не просто колбэк
До появления
Решение с
Ставь 👍 и забирай 📚 Базу знаний
Промисы (
Promise) относятся к асинхронным объектам, реализующим паттерн "Promise". Они позволяют работать с отложенными и асинхронными операциями (например, сетевые запросы, таймеры, операции с файлами). Категория: Асинхронные программные конструкции (Async Objects / Async Patterns)
Тип: Объект (Promise Object)*
Используются в: Асинхронном программировании (Async/Await,
then/catch) 🚩Почему промисы – асинхронная конструкция?
Промисы не выполняются сразу, а ждут завершения операции, после чего выполняют код в
.then() или .catch(). const fetchData = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Данные загружены!"); // Успех
}, 2000);
});
fetchData.then(data => console.log(data));🚩Promise – это не просто колбэк
До появления
Promise в JavaScript использовались колбэки, но они приводили к "callback hell". function fetchData(callback) {
setTimeout(() => {
callback("Данные загружены!");
}, 2000);
}
fetchData(data => console.log(data));Решение с
Promise fetchData()
.then(data => console.log(data))
.catch(error => console.error(error));
Ставь 👍 и забирай 📚 Базу знаний
👍6💊1
🤔 Что такое falsy значения?
Это значения, которые при приведении к булевому типу становятся false.
1. Примеры: 0, '' (пустая строка), null, undefined, NaN, false.
2. Они полезны для проверки в логических операциях и условиях.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Примеры: 0, '' (пустая строка), null, undefined, NaN, false.
2. Они полезны для проверки в логических операциях и условиях.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍12🔥1