Skip to content

Commit 1abaa6b

Browse files
authored
Fix i-amphtml-sizer responsive issue (#1319)
* Remove inline padding-top from responsive sizer * Add paddint-top only when heights attr is missing * Add comment and issue link * Use hasAttribute to detect the heights attr
1 parent e40c5c3 commit 1abaa6b

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

packages/optimizer/lib/transformers/ApplyLayout.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ function maybeAddSizerInto(node, layout, width, height) {
111111
}
112112
let sizer = null;
113113
if (layout === 'responsive') {
114-
sizer = createResponsiveSizer(width, height);
114+
sizer = createResponsiveSizer(node, width, height);
115115
} else if (layout === 'intrinsic') {
116116
sizer = createIntrinsicSizer(width, height);
117117
}
@@ -121,11 +121,18 @@ function maybeAddSizerInto(node, layout, width, height) {
121121
}
122122
}
123123

124-
function createResponsiveSizer(width, height) {
124+
function createResponsiveSizer(node, width, height) {
125125
const padding = (height.numeral / width.numeral) * 100;
126+
127+
// Skip adding padding-top when heights attr is present. HeightsTransformer will take care of it.
128+
// https://github.com/ampproject/amp-toolbox/issues/1314
129+
const style = !hasAttribute(node, 'heights')
130+
? `;padding-top:${parseFloat(padding.toFixed(4))}%`
131+
: '';
132+
126133
const sizer = createElement('i-amphtml-sizer', {
127134
slot: 'i-amphtml-svc',
128-
style: `display:block;padding-top:${parseFloat(padding.toFixed(4))}%`,
135+
style: `display:block${style}`,
129136
});
130137
return sizer;
131138
}

packages/optimizer/spec/transformers/valid/ServerSideRendering/converts_heights_attribute_to_css/expected_output.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<body>
1010
<!-- converts heights to css -->
1111
<amp-img height="256" layout="responsive" src="https://acme.org/image1.png" width="320" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive" id="i-amp-0">
12-
<i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:80%"></i-amphtml-sizer>
12+
<i-amphtml-sizer slot="i-amphtml-svc" style="display:block"></i-amphtml-sizer>
1313
</amp-img>
1414
</body>
1515
</html>

packages/optimizer/spec/transformers/valid/ServerSideRendering/does_not_convert_invalid_heights_attribute/expected_output.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</head>
99
<body>
1010
<amp-img height="300" layout="responsive" heights="(min-width: 320px), 100vw" src="https://acme.org/image1.png" width="400" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive">
11-
<i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:75%"></i-amphtml-sizer>
11+
<i-amphtml-sizer slot="i-amphtml-svc" style="display:block"></i-amphtml-sizer>
1212
</amp-img>
1313
</body>
1414
</html>

packages/optimizer/spec/transformers/valid/ServerSideRendering/transforms_layout_responsive/expected_output.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</amp-ad>
1313
<!-- Auto adds responsive attribute if height, width and heights -->
1414
<amp-ad class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" type="taboola" data-block-on-consent="_till_responded" width="300" height="250" data-publisher="..." data-mode="thumbnails-a-amp" data-placement="Mobile Below Article Thumbnails AMP" data-article="auto" data-target_type="mix" layout="responsive" i-amphtml-layout="responsive" id="i-amp-0">
15-
<i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:83.3333%"></i-amphtml-sizer>
15+
<i-amphtml-sizer slot="i-amphtml-svc" style="display:block"></i-amphtml-sizer>
1616
</amp-ad>
1717
</body>
1818
</html>

0 commit comments

Comments
 (0)