From 1b1d88a522c76d31f46f7a356e2dae35bec48b8b Mon Sep 17 00:00:00 2001 From: DualFroz Date: Fri, 11 Sep 2026 23:11:28 +0200 Subject: [PATCH] Fix grid gap inheritance from row-gap and column-gap longhands --- lib/hacks/grid-utils.js | 9 +++++---- test/cases/grid-gap.css | 20 ++++++++++++++++++++ test/cases/grid-gap.out.css | 25 +++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/lib/hacks/grid-utils.js b/lib/hacks/grid-utils.js index 2d0b162..568f83d 100644 --- a/lib/hacks/grid-utils.js +++ b/lib/hacks/grid-utils.js @@ -5,6 +5,8 @@ let uniq = require('../utils').uniq let escapeRegexp = require('../utils').escapeRegexp let splitSelector = require('../utils').splitSelector +const GAP_PROPS = /^(grid-)?((row|column)-)?gap$/ + function convert(value) { if ( value && @@ -878,8 +880,7 @@ function getGridGap(decl) { let gap = {} // try to find gap - let testGap = /^(grid-)?((row|column)-)?gap$/ - decl.parent.walkDecls(testGap, ({ prop, value }) => { + decl.parent.walkDecls(GAP_PROPS, ({ prop, value }) => { if (/^(grid-)?gap$/.test(prop)) { let [row, , column] = parser(value).nodes @@ -1014,8 +1015,8 @@ function inheritGridGap(decl, gap) { return false } - // find grid-gap values - r.walkDecls('grid-gap', d => (gridGap = getGridGap(d))) + // find gap values, set either by the shorthand or by the longhands + r.walkDecls(GAP_PROPS, d => (gridGap = getGridGap(d))) // skip rule without gaps if (!gridGap || Object.keys(gridGap).length === 0) { diff --git a/test/cases/grid-gap.css b/test/cases/grid-gap.css index d2a7a81..6ed8932 100644 --- a/test/cases/grid-gap.css +++ b/test/cases/grid-gap.css @@ -301,3 +301,23 @@ grid-template-rows: repeat(2, 100px); } } + +.longhand-gap { + display: grid; + grid-column-gap: 50px; + grid-row-gap: 40px; + grid-template-areas: + "p p" + "q q"; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, 100px); +} + +/* must inherit gap from .longhand-gap */ +.longhand-gap.modifier { + grid-template-areas: + "p p" + "q q"; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, 100px); +} diff --git a/test/cases/grid-gap.out.css b/test/cases/grid-gap.out.css index ab77e51..7d5e4fc 100644 --- a/test/cases/grid-gap.out.css +++ b/test/cases/grid-gap.out.css @@ -435,3 +435,28 @@ grid-template-rows: repeat(2, 100px); } } + +.longhand-gap { + display: -ms-grid; + display: grid; + grid-column-gap: 50px; + grid-row-gap: 40px; + grid-template-areas: + "p p" + "q q"; + -ms-grid-columns: 1fr 50px 1fr; + grid-template-columns: repeat(2, 1fr); + -ms-grid-rows: 100px 40px 100px; + grid-template-rows: repeat(2, 100px); +} + +/* must inherit gap from .longhand-gap */ +.longhand-gap.modifier { + grid-template-areas: + "p p" + "q q"; + -ms-grid-columns: 1fr 50px 1fr; + grid-template-columns: repeat(2, 1fr); + -ms-grid-rows: 100px 40px 100px; + grid-template-rows: repeat(2, 100px); +}