Как я могу позиционировать фиксированный div относительно тела, если он находится внутри фиксированного родительского div?

В настоящее время я работаю над макетом CSS, где у меня есть фиксированный родительский div, содержащий другой div. Я хочу, чтобы внутренний элемент div был зафиксирован относительно тела, а не его родителя.

Код (Попутный ветер):

<div class = "h-screen bg-red-100">
  <div class = "fixed left-1/2 top-1/2 h-80 w-80 -translate-x-1/2 -translate-y-1/2 bg-red-300">
    <div class = "fixed top-10 h-40 w-40 bg-red-600">I want to make this div fixed relative to body</div>
  </div>
</div>

Детская площадка попутного ветра

Есть ли способ добиться этого без JavaScript? Если нет, то как я могу сделать это с помощью JavaScript?

Я также тщательно исследовал и искал Stack Overflow, но не смог найти решение, которое точно соответствовало бы моим требованиям.

Спасибо!

Больше информации:

Основываясь на ответах @Paulie_D и @Yogi, я еще раз проверил свой код. Если я использую какое-либо свойство перевода в своем коде, то я обнаружил, что оно предназначено для модального открытия и закрытия transition (открытие сверху вниз и закрытие сверху вниз). Для этой цели я добавил свойство перевода.

 <div
      role = "dialog"
      aria-modal = "true"
      tabIndex = "-1"
      onKeyDown = {handleTabKey}
      ref = {modalRef}
      className = {`fixed top-0 left-0 inset-0 flex justify-center items-center bg-black z-50 bg-opacity-50 backdrop-blur-sm ${
        isModalOpen ? "opacity-100" : "opacity-0 pointer-events-none"
      } transition-all ease-in-out`}
    >
      <div
        className = {`bg-white rounded-md w-[30%] p-3 tb:p-6 ${
          isModalOpen ? "translate-y-0" : "-translate-y-full"
        } transition-all ease-in-out`}
      >
        . . . .
     </div>
    </div>

Сейчас я собираюсь удалить его, но, пожалуйста, может ли кто-нибудь помочь мне, как мы можем добиться того же перехода без свойства перевода?

Что вам мешает вынести его из "h-screen bg-red-100" div?

Rayon 29.03.2024 07:25

Просто чтобы уточнить: предоставленная структура bg-red-100 h-screen div является лишь примером, а в моем реальном проекте структура более сложная. Перемещение этого div за пределы этого div потребует значительной реструктуризации, которая на данный момент невозможна. Тем не менее, я ценю ваше предложение. Если нет простого решения CSS, я был бы открыт для изучения альтернатив JavaScript, но объяснение всего сценария проекта может оказаться для меня довольно трудным.

Prince Sadariya 29.03.2024 07:38

Просто чтобы переместить фиксированный дочерний div из фиксированного родительского div, если они не имеют никакого отношения к положению.

moon 29.03.2024 07:59

Я не уверен, почему это представляет для вас проблему. Элемент position: fixed всегда позиционируется относительно body, но вам необходимо указать, где он расположен. - codepen.io/Paulie-D/pen/KKYXaZB

Paulie_D 29.03.2024 08:34

Это работает? play.tailwindcss.com/oxLUCRm7ch

Tanishq S 29.03.2024 09:05

Если вы используете фиксированное положение и хотите, чтобы что-то скользило сверху вниз, вы можете позиционировать его на основе значения bottom вместо top. Использование bottom: 100% полностью переместит элемент за пределы экрана над видимой областью, а затем, когда вы захотите опустить его вниз, вы уменьшите это значение до того места, где вы хотите расположить элемент на экране.

jmcgriz 29.03.2024 14:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
109
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы пытались добавить позицию: относительно вложенного div? Поиграйтесь с примером CSS

.container-div {
  padding: 10px 10px 0;
background-color:#c3c3c3;
width:200px;
}

.child-div {
  display: inline-block;
  width: 100px;
  height: 60px;
  position:relative;
    top:-20px;
  border: 1px solid #efefef;
  background-color: #f5f5f5;
}
<br><br><div class = "container-div">
  <div class = "child-div">
This div appears to be nested.
  </div>
</div>

Попробуйте добавить position: relative ко второму дочернему элементу, родителю или телу и position: fixed к третьему:

Код:

<div class = "flex justify-center items-center h-screen bg-red-100">
  <div class = "h-80 w-80 bg-red-300">
    <div class = "fixed left-0 top-0 flex h-40 w-40 items-center justify-center bg-red-600">I want to make this div fixed relative to body</div>
  </div>
</div>

Внешний CSS:

body {
  position: relative;
}

Результат:

В чем проблема?

Tanishq S 29.03.2024 09:12

Удалить преобразования из родительского элемента

Примечание к техническим характеристикам :

Любое значение свойства Transform, отличное от none, также приводит к элемент для создания содержащего блока для всех потомков. Его поле заполнения будет использоваться для макета для всех его абсолютных позиций. потомки, потомки с фиксированной позицией и фиксированный потомок фоновые вложения.

Код OP нарушает фиксированное позиционирование, используя преобразование перевода для центрирования родительского элемента на странице.

Исправьте проблему, используя flex для центрирования родительского элемента без преобразования. Это можно сделать с помощью гибких классов Tailwind. Это центрирует родительский элемент, не затрагивая фиксированное положение дочернего элемента.

Ссылки на попутный ветер: Flex , Выровнять элементы , Выровнять контент

Фрагмент кода

<div class = "flex justify-center items-center h-screen bg-blue-100">
  <div class = "fixed top-20 h-80 w-80  bg-red-300">
    parent - centered
    <div class = "fixed top-10 left-0 h-40 w-40 bg-green-600 text-white">
    child - fixed to body
    </div>
  </div>
</div>

<script src = "https://cdn.tailwindcss.com"></script>
Ответ принят как подходящий

Наконец, я нашел решение:

Изначально я использовал свойство перевода для модального перехода (сверху вниз).

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

Чтобы решить эту проблему, я удалил свойство перевода. Вместо этого, для эффекта модального перехода, я добавил относительный класс ${isOpen ? "top-0" : "-top-full"}. Этот подход сработал идеально.

Спасибо всем.

Другие вопросы по теме