Абсолютно расположенная боковая панель получает дополнительную маржу при открытии

#javascript #css #reactjs #typescript #focus

Вопрос:

Я использую react и сделал боковую панель, которая анимируется на экране и за его пределами, но абсолютное положение и изменение css right div. Вот песочница для легкой настройки кода.

Поэтому, когда вы нажимаете на синее поле, оно должно исчезнуть с экрана, установив right отрицательное значение, а розовое поле должно появиться, установив значение right 0 . Как вы можете видеть, это не работает.

но

Если вы удалите весь код popout.tsx useEffect, то все будет работать так, как ожидалось. Код useEffect отвечает за фокусировку и размытие ввода текста на боковой панели в зависимости от состояния isOpen.

Спасибо!

Редактировать

Если вы хотите узнать, какое поведение ожидается, пожалуйста, прокомментируйте весь эффект использования в файле popout.tsx . Это ожидаемое поведение розовая коробка из ввода сфокусирована розовая коробка исчезла вход размыт.

Идея всего этого в том, что в синем поле будет текст «Нажми на меня», а розовое поле откроется из-за этого или с помощью привязки клавиш. Оба эти действия должны быть сосредоточены на вводе текста внутри.

Немного Дополнительной Информации

Существует также привязка клавиш, если вы нажмете ctl ~ , появится розовое поле, поэтому мне нужно изменить фокус в зависимости от состояния isOpem, а не нажимать события.

Комментарии:

1. Но розовая коробка предназначена для возврата, как только ввод будет сфокусирован, верно ?

2. нет, когда розовое поле находится на экране, ввод должен быть сфокусирован, а когда розовый цвет отсутствует на экране, он должен быть размытым.

3. Но в настоящее время розовое поле закрывается, когда ввод сфокусирован

4. Я закодировал его так, чтобы, когда вы нажимаете на розовое поле даже при вводе(поскольку ввод-это поле), оно закрывает розовое поле. Дело не в этом, хотя я хочу, чтобы он автоматически фокусировался, когда открывается розовая коробка. Так что, как вы можете видеть в useEffect, я ищу изменения в открываемой опоре и в зависимости от этой опоры устанавливаю фокус в коде. Вы можете видеть, что розовое поле появляется, когда оно сфокусировано, а когда закрыто, оно размыто просто потому, что розовое поле выходит слишком сильно, а не правильно : 0 пикселей, как указано в css. я неправильно понял ваш вопрос, но мы не хотим сосредотачиваться на вводе, нажимая на него, что приведет к закрытию

5. обычно мы закрывали бы розовое поле, используя на нем крестовую кнопку, но сейчас для простоты я поместил обработчик щелчков на все это.

Ответ №1:

Проблема в том, что вам нужно использовать position: fixed вместо position: absolute .