Skip to content

Repeating background layer converts to a single intrinsic-size core/image (tiling lost) #3552

Closed

Description

@chubes4

Problem

An empty element whose only output is a repeating background image is converted to a single core/image at the image's intrinsic size. A tiled texture that covers a whole section renders as one tile in the corner.

HtmlCompilation::backgroundImageBlockFromElement() reads only background-size. It ignores background-repeat (and background-position), although CoverStyleResolver::hasRepeatingBackground() already detects repetition (CoverPattern uses it to decline).

Reduced reproduction (released SSI 1.33.156)

tile.png is a 40×40 checker.

<style>body{margin:0}.band{position:relative;padding:80px 24px}.t{position:absolute;inset:0}h2{position:relative}</style>
<section class="band"><div class="t" style="background-image:url(tile.png);background-repeat:repeat"></div><h2>Answer every call</h2></section>
Painted element Box Tiling
Source div.t background 800×206 (fills section) repeat
WordPress <img src=tile.png> 40×40 at top-left none

The quality gate reports 0 fallbacks, so the loss is invisible to the gate.

Expected

A repeating background stays a background. One option is a native container carrying style.background (backgroundImage, backgroundRepeat, backgroundSize, backgroundPosition), which core supports on core/group; this keeps the element's geometry, so the tiled texture fills the same box. Non-repeating cover/contain layers can keep today's image path.

Acceptance

  • A regression test using the reduced page. It fails on trunk and passes with the fix: the repeating layer is not a core/image, and its block carries the repeat.
  • Before/after render evidence: the painted box and repeat match the source.
  • Existing suites pass.

This also blocks #3551 (#2613 class 1). That PR routes empty background-only custom elements (Wix wix-bg-image tiled overlays) through this same path. It removes the fallback, but on https://www.getringwave.com/ the tiled overlays would render as single tiles.


AI disclosure: Claude (Opus) via Roadie/Pi found this while reviewing #3551 on a real import, and measured it with Playwright, under Chris Huber's direction.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions