Как установить разделитель больше, чем его контейнер с помощью CSS

У меня следующая форма с попутным ветром. Я хочу, чтобы красный разделитель покрывал всю ширину внешнего контейнера. Поэтому мне нужно, чтобы он начинался за 24 пикселя до левого поля (это -ml-6) и заканчивался через 24 пикселя после (он должен быть на 48 пикселей больше).

Я знаю, что могу просто позволить каждому разделу установить свой собственный горизонтальный отступ (px-6), но я хотел бы иметь общий отступ для всех разделов (это px-6) и разделители между разделами, чтобы игнорировать этот отступ.

Как я могу достичь этого?

// deal with the CDN warning
setTimeout(() => {console.clear()});
<div class = "grid h-screen w-screen content-center justify-center">
  <div class = "grid w-80 gap-4 rounded-lg bg-slate-50 p-4 px-6 shadow-lg">
    <div class = "grid gap-2 bg-slate-200">
      <div class = "text-lg">Section 1</div>
      <div class = "text-sm">Item1 1</div>
      <div class = "w-full border-t"></div>
      <div class = "text-sm">Item1 2</div>
      <div class = "w-full border-t"></div>
      <div class = "text-sm">Item1 3</div>
    </div>

    <div class = "-ml-6 mr-0 w-full border-t-2 border-red-400"></div>

    <div class = "grid gap-2 bg-slate-200">
      <div class = "text-lg">Section 2</div>
      <div class = "text-sm">Item1 1</div>
      <div class = "w-full border-t"></div>
      <div class = "text-sm">Item1 2</div>
      <div class = "w-full border-t"></div>
      <div class = "text-sm">Item1 3</div>
    </div>
  </div>
</div>

<script src = "https://cdn.tailwindcss.com"></script>

Примечание: здесь у вас есть пример игровой площадки попутного ветра

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы задали немного XY вопрос. Вместо того, чтобы вбивать дополнительную разметку в размер, просто выполните рефакторинг, чтобы вы могли поместить свою рамку на существующий элемент. Вы сказали, что предпочли бы иметь только один класс заполнения, но для этого требуется дополнительная разметка только для стилей. Это не очень хорошая практика.

Скорее всего, вы можете сделать то же самое для элементов интерьера. Вам не нужны дополнительные div только для строки. В целом, ваша разметка становится намного чище.

// deal with the CDN warning
setTimeout(() => {
  console.clear()
});
border-t-2 border-red-400
<div class = "grid h-screen w-screen content-center justify-center">
  <div class = "rounded-lg bg-slate-50 shadow-lg">
    <div class = "grid w-80 gap-4 ">
      <div class = "grid w-80 p-4 px-6">
        <div class = "grid gap-2 pb-2 bg-slate-200">
          <div class = "text-lg">Section 1</div>
          <div class = "text-sm">Item1 1</div>
          <div class = "text-sm pt-2 border-t border-gray-400">Item1 2</div>
          <div class = "text-sm pt-2 border-t border-gray-400">Item1 3</div>
        </div>
      </div>
    </div>

    <div class = "grid w-80 border-t-2 border-red-400">
      <div class = "grid w-80 p-4 px-6">
        <div class = "grid gap-2 pb-2 bg-slate-200">
          <div class = "text-lg">Section 2</div>
          <div class = "text-sm">Item1 1</div>
          <div class = "text-sm pt-2 border-t border-gray-400">Item1 2</div>
          <div class = "text-sm pt-2 border-t border-gray-400">Item1 3</div>
        </div>
      </div>
    </div>
  </div>
</div>

  <script src = "https://cdn.tailwindcss.com"></script>

большое спасибо за ваш ответ, точно, я пытаюсь избежать добавления div только для этого разделителя, посмотрите мой ответ, используя calc и отрицательное левое поле

opensas 07.02.2023 22:07

Но ваш ответ добавляет div для разделителя. На самом деле многие из них. Я в замешательстве.

isherwood 07.02.2023 22:08

Я добавляю div для каждого sep (на самом деле это тонкий компонент), но я не добавляю еще один контейнер, чтобы он покрывал всю ширину контейнера. Вы добавляете дополнительный div, окружающий каждый раздел с px-6, я просто добавляю px-6 в большой контейнер, каждый раздел находится внутри этого px, и каждый разделитель увеличивается, чтобы течь за его пределы, без какого-либо дополнительного контейнера.

opensas 07.02.2023 22:14

В таком случае да, есть еще один элемент. Но не для интерьерных, да и общая методика гораздо проще ваших ручных расчетов.

isherwood 07.02.2023 22:27

Решение, которое я нашел до сих пор, состоит в том, чтобы использовать -ml-6, чтобы разделитель начинался на 24 пикселя раньше, и использовать calc, чтобы увеличить ширину на 48 пикселей, например так:

<div class = "-ml-6 w-[calc(100%+48px)] border-t-2 border-red-400"></div>

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

Ответ принят как подходящий

Проблема в w-full (ширина: 100%). Вам просто нужно удалить этот класс (установить ширину по умолчанию «авто»).

Я думаю, когда вы указываете ширину: 100%, родительское дополнение учитывается при расчете ширины.

// deal with the CDN warning
setTimeout(() => {
  console.clear()
});
<div class = "grid h-screen w-screen content-center justify-center">
  <div class = "rounded-lg bg-slate-50 shadow-lg">
    <div class = "grid w-80 gap-4 rounded-lg bg-slate-50 p-4 px-6 shadow-lg">
      <div class = "grid gap-2 bg-slate-200">
        <div class = "text-lg">Section 1</div>
        <div class = "text-sm">Item1 1</div>
        <div class = "w-full border-t"></div>
        <div class = "text-sm">Item1 2</div>
        <div class = "w-full border-t"></div>
        <div class = "text-sm">Item1 3</div>
      </div>

      <div class = "-mx-6 border-t-2 border-red-400"></div>

      <div class = "grid gap-2 bg-slate-200">
        <div class = "text-lg">Section 2</div>
        <div class = "text-sm">Item1 1</div>
        <div class = "w-full border-t"></div>
        <div class = "text-sm">Item1 2</div>
        <div class = "w-full border-t"></div>
        <div class = "text-sm">Item1 3</div>
      </div>
    </div>
  </div>
</div>

<script src = "https://cdn.tailwindcss.com"></script>

Кажется, это сработало, я обновил пример попутного ветра с помощью вашего решения, play.tailwindcss.com/DN1qfcOZn8 спасибо

opensas 07.02.2023 22:34

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