Всплывающие подсказки и раскрывающиеся меню с порталами
Используйте порталы для отображения подсказок и раскрывающихся меню за пределами контейнеров overflow-hidden
«Всплывающие подсказки и раскрывающиеся меню с порталами» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Добро пожаловать
Проблема overflow
Стратегия позиционирования
const rect = triggerRef.current.getBoundingClientRect();
const top = rect.bottom + window.scrollY + 8;
const left = rect.left + window.scrollX;Компонент всплывающей подсказки
function Tooltip({ content, children }) {
const [visible, setVisible] = useState(false);
const [pos, setPos] = useState({ top: 0, left: 0 });
const ref = useRef();
const show = () => {
const r = ref.current.getBoundingClientRect();
setPos({ top: r.bottom + window.scrollY + 4,
left: r.left + window.scrollX });
setVisible(true);
};
return (
<span ref={ref} onMouseEnter={show} onMouseLeave={() => setVisible(false)}>
{children}
{visible && createPortal(
<div style={{ position:'absolute', top: pos.top, left: pos.left }}
className="tooltip">{content}</div>,
document.body
)}
</span>
);
}Обновление позиции при прокрутке и изменении размера
useEffect(() => {
if (!visible) return;
const update = () => setVisible(false);
window.addEventListener('scroll', update, true);
window.addEventListener('resize', update);
return () => {
window.removeEventListener('scroll', update, true);
window.removeEventListener('resize', update);
};
}, [visible]);Архитектура раскрывающегося меню
Обработчик нажатия за пределами
useEffect(() => {
if (!open) return;
const handler = (e) => {
if (!menuRef.current?.contains(e.target) &&
!triggerRef.current?.contains(e.target)) {
setOpen(false);
}
};
document.addEventListener('mousedown', handler);
return () => document.removeEventListener('mousedown', handler);
}, [open]);Навигация с клавиатуры в раскрывающихся меню
Использование библиотеки позиционирования
import { useFloating, flip, shift } from '@floating-ui/react';
const { refs, floatingStyles } = useFloating({
middleware: [flip(), shift()],
});Доступность: ARIA для всплывающих подсказок
<button aria-describedby="tip1">Hover me</button>
{visible && createPortal(
<div id="tip1" role="tooltip">Helpful text</div>,
document.body
)}Быстрая проверка
Повторение
Курс завершён
Часто задаваемые вопросы
Урок «Всплывающие подсказки и раскрывающиеся меню с порталами» бесплатный?
Да — полный текст урока «Всплывающие подсказки и раскрывающиеся меню с порталами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Всплывающие подсказки и раскрывающиеся меню с порталами»?
Используйте порталы для отображения подсказок и раскрывающихся меню за пределами контейнеров overflow-hidden Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Всплывающие подсказки и раскрывающиеся меню с порталами»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое React Portals
- Создание модального компонента с порталами
- Управление фокусом и клавиатурные ловушки в модальных окнах
- Всплывающие подсказки и раскрывающиеся меню с порталами