Бесшовное выравнивание фоновых изображений?

Я хотел бы выделить некоторые ячейки в таблице, заштриховав их.

Если две ячейки с одинаковым узором расположены рядом друг с другом, узор должен плавно покрывать обе ячейки.

table.demo {
  border: 1px solid blue;
  border-collapse: separate;
  border-spacing: 0;
  table-layout: fixed;
  text-align: center;
  width: 100%;
}

table.demo td {
  height: 100px;
}

table.demo td.stripes {
  /* Using  background-attachment: fixed;  is _not_ the desired solution, because the background no longer scrolls alogn with the table. */
  /* background-attachment: fixed; */

  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAIElEQVQImWNggIKOjo7/HR0d/xmQAbIAnI2hCocYYQAATEQPi+UvdB4AAAAASUVORK5CYII=);
}

table.demo td.B { background-color: #ffe; }
table.demo td.C { background-color: #efe; }
table.demo td.E { background-color: #eef; }
table.demo td.F { background-color: #fee; }
<table class = "demo">
  <tr>
    <td class = "stripes A">A</td>
    <td class = "stripes B">B</td>
    <td class = "stripes C">C</td>
  </tr>
  <tr>
    <td class = "stripes D">D</td>
    <td class = "stripes E">E</td>
    <td class = "stripes F">F</td>
  </tr>
  <tr>
    <td class = "stripes G">G</td>
    <td>H</td>
    <td class = "stripes I">I</td>
  </tr>
</table>

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

Желаемый результат и цель этого вопроса:

Уже пробовал:

  • Использование background-attachment: fixed; вроде бы решает проблему, но тогда фоновое изображение фиксируется в начале координат области просмотра, то есть перестает прокручиваться вместе с таблицей.

  • Применение фонового изображения к элементу <table> не помогает, поскольку оно охватывает все ячейки, а не только индивидуально выбранные.

Таким образом, вопрос в том, как можно добиться того же плавного выравнивания, но сохранить начало координат фиксированным к <body>, <table> элементу или чему-либо еще, чтобы штриховки прокручивались вместе с остальным содержимым страницы.

вы можете установить повторяющееся изображение внутри таблицы, а затем скрыть или смешать его из каждой ячейки: jsfiddle.net/94ytch8p режим смешивания включает множество настроек Developer.mozilla.org/fr/docs/Web/CSS /mix-blend-mode#syntaxe выберите тот, который соответствует вашим потребностям .. если есть

G-Cyrillus 22.06.2024 13:06

@G-Cyrillus: К сожалению, это работает только в том случае, если есть только шаблон, как в упрощенной таблице, которую я использовал в коде выше. Моя фактическая таблица намного больше, и я хотел бы использовать с ней несколько шаблонов, каждый из которых указывает на разную цель, но две соседние ячейки с одинаковым шаблоном все равно должны плавно соприкасаться.

Carsten Fuchs 22.06.2024 15:44
Улучшение производительности загрузки с помощью 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
2
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот подходящее решение.

Add background-position: center bottom;

Добавление отступов также в:table.demo td:height:100px; padding:10px;

table.demo {
  border: 1px solid blue;
  border-collapse: separate;
  border-spacing: 0;
  table-layout: fixed;
  text-align: center;
  width: 100%;
}

table.demo td {
  height: 100px;
  padding:10px;
}

table.demo td.stripes {
  /* Using  background-attachment: fixed;  is _not_ the desired solution, because the background no longer scrolls alogn with the table. */
  /* background-attachment: fixed; */

  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAIElEQVQImWNggIKOjo7/HR0d/xmQAbIAnI2hCocYYQAATEQPi+UvdB4AAAAASUVORK5CYII=);
  background-position: center bottom;
}

table.demo td.B { background-color: #ffe; }
table.demo td.C { background-color: #efe; }
table.demo td.E { background-color: #eef; }
table.demo td.F { background-color: #fee; }
<table class = "demo">
      <tr>
        <td class = "stripes A">A</td>
        <td class = "stripes B">B</td>
        <td class = "stripes C">C</td>
      </tr>
      <tr>
        <td class = "stripes D">D</td>
        <td class = "stripes E">E</td>
        <td class = "stripes F">F</td>
      </tr>
      <tr>
        <td class = "stripes G">G</td>
        <td>H</td>
        <td class = "stripes I">I</td>
      </tr>
    </table>

Спасибо.

Это меняет проблему, но не решает ее: по-прежнему существует смещение как по горизонтали, так и по вертикали.

Carsten Fuchs 22.06.2024 15:50

Я добавил зазор в 10 пикселей к элементу td. Это делает его немного более отзывчивым. Если это работает для вас. Спасибо.

Raj Kumar 22.06.2024 19:25
Ответ принят как подходящий

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

table.demo {
  border: 1px solid blue;
  border-collapse: separate;
  border-spacing: 0;
  table-layout: fixed;
  text-align: center;
  width: 100%;
  position: relative; /* relative here */
  z-index: 0;
}

table.demo td {
  height: 100px;
  clip-path: inset(0); /* this is important */
}

/* the background */
table.demo td.stripes:before {
  content:"";
  position: absolute;
  z-index: -1;
  inset: 0; 
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAIElEQVQImWNggIKOjo7/HR0d/xmQAbIAnI2hCocYYQAATEQPi+UvdB4AAAAASUVORK5CYII=);
}
/**/

table.demo td.B { background-color: #ffe; }
table.demo td.C { background-color: #efe; }
table.demo td.E { background-color: #eef; }
table.demo td.F { background-color: #fee; }
<table class = "demo">
  <tr>
    <td class = "stripes A">A</td>
    <td class = "stripes B">B</td>
    <td class = "stripes C">C</td>
  </tr>
  <tr>
    <td class = "stripes D">D</td>
    <td class = "stripes E">E</td>
    <td class = "stripes F">F</td>
  </tr>
  <tr>
    <td class = "stripes G">G</td>
    <td>H</td>
    <td class = "stripes I">I</td>
  </tr>
</table>

Спасибо, это работает хорошо, и я смог обобщить это, используя несколько разных шаблонов в одной таблице. (Например, один общий шаблон для ячеек B, C, F и другой шаблон для D, G, H.) Однако кажется, что шаблоны теперь находятся перед текстом, то есть буквы A, B, C. , … ?

Carsten Fuchs 23.06.2024 10:58

@CarstenFuchs забыл объявления z-index, добавленные сейчас

Temani Afif 23.06.2024 11:03

Ух ты, здорово! Спасибо! :-)

Carsten Fuchs 23.06.2024 11:09

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