Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fluid Typography: Try adding a ceiling to the calculated minimum font size #49247

Conversation

andrewserong
Copy link
Contributor

@andrewserong andrewserong commented Mar 22, 2023

What?

A potential fix for #49162

In the fluid typography output, explore setting a ceiling for the calculated minimum font size. This is to ensure that on smaller viewports, the font-size never gets too big for the viewport.

The PR currently uses a hard-coded 64px as the ceiling (corresponding to 4rem), which borrows from the minimum font size of the xx-large font size preset from TwentyTwentyThree theme. My thinking here, is that if it's a good default for the TT3 theme to use, then perhaps it's a good default for the custom fluid typography rules, too.

Note: It is totally fine if the approach in this PR isn't viable — the intention is to poke at the existing fluid typography formula and learn more about what we need it to do.

Why?

The current rules for custom font-sizes with settings.typography.fluid set to true in theme.json is for the maximum font-size to be multiplied by 0.75 to arrive at the minimum font-size. This works nicely for smaller headings, but the linear scale doesn't work well for really big font-sizes, as they'll still be too big in smaller viewports.

The idea in this PR is to see whether adding a ceiling to the minimum font size could resolve the issue for the most-part in the shorter-term. From some quick testing, it seems to work fairly well, with clamp() magic taking care of adjusting the font-size in between the minimum and maximum values.

Of course, this PR is also just a starting point for discussion — we can try out other ideas or go in a different direction with this.

How?

  • In both the JS and PHP for fluid typography, add a ceiling for minimum font size, hard-coded to 64px / 4rem.
  • Use the ceiling for minimum font size only when a minimum font size has not been explicitly provided (so, we only invoke the ceiling for cases where the calculated rules apply, e.g. for custom font sizes)

Testing Instructions

  1. With a theme that uses settings.typography.fluid in theme.json (E.g. TwentyTwentyThree), add a bunch of paragraphs to a post or page using a variety of custom font sizes including really big ones like 8rem. For a long paragraph, try using the text from the linked issue: Loco brings you family recipes, fresh, simple, tasteful ingredients and a nice vibe.
  2. Publish the post and see how the fluid typography looks across a range of viewport sizes. Does the ceiling of 4rem work okay? If there are a multiple large font sizes that are different at wide viewports (e.g. 8rem next to 6rem), do these scale down pleasingly?

For quicker testing, here is some test markup that includes a range of paragraphs:

Test markup of a variety of paragraph blocks at different custom font sizes
<!-- wp:paragraph {"style":{"typography":{"fontSize":"8rem","lineHeight":"1.1"}}} -->
<p style="font-size:8rem;line-height:1.1">Loco brings you family recipes, fresh, simple, tasteful ingredients and a nice vibe.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"8rem"}}} -->
<p style="font-size:8rem">A paragraph at 8rem</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"6rem"}}} -->
<p style="font-size:6rem">A paragraph at 6rem</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"4rem"}}} -->
<p style="font-size:4rem">A paragraph at 4rem</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"3rem"}}} -->
<p style="font-size:3rem">A paragraph at 3rem</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"2rem"}}} -->
<p style="font-size:2rem">A paragraph at 2rem</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"1rem"}}} -->
<p style="font-size:1rem">A paragraph at 1rem</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"128px"}}} -->
<p style="font-size:128px">A paragraph at 128px</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"96px"}}} -->
<p style="font-size:96px">A paragraph at 96px</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"64px"}}} -->
<p style="font-size:64px">A paragraph at 64px</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"48px"}}} -->
<p style="font-size:48px">A paragraph at 48px</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"32px"}}} -->
<p style="font-size:32px">A paragraph at 32px</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"}}} -->
<p style="font-size:16px">A paragraph at 16px</p>
<!-- /wp:paragraph -->

Testing Instructions for Keyboard

Screenshots or screencast

Using the test paragraph from the linked issue, the following shows the font-size at desktop screen size, and a 375px viewport:

Desktop Mobile viewport
image image

Screengrab:

2023-03-22.14.24.24.mp4

@github-actions
Copy link

github-actions bot commented Mar 22, 2023

Size Change: +1.84 kB (0%)

Total Size: 1.34 MB

Filename Size Change
build/block-editor/index.min.js 198 kB +940 B (0%)
build/block-editor/style-rtl.css 14.5 kB +48 B (0%)
build/block-editor/style.css 14.5 kB +47 B (0%)
build/block-library/blocks/navigation/style-rtl.css 2.22 kB +6 B (0%)
build/block-library/blocks/navigation/style.css 2.21 kB +7 B (0%)
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B +2 B (0%)
build/block-library/blocks/post-featured-image/editor.css 586 B +2 B (0%)
build/block-library/blocks/post-template/style-rtl.css 281 B -1 B (0%)
build/block-library/blocks/post-template/style.css 281 B -1 B (0%)
build/block-library/blocks/search/style-rtl.css 408 B -1 B (0%)
build/block-library/index.min.js 202 kB +561 B (0%)
build/block-library/style-rtl.css 12.7 kB +5 B (0%)
build/block-library/style.css 12.7 kB +3 B (0%)
build/blocks/index.min.js 51.1 kB +44 B (0%)
build/components/index.min.js 208 kB +129 B (0%)
build/components/style-rtl.css 11.7 kB +16 B (0%)
build/components/style.css 11.7 kB +17 B (0%)
build/edit-site/index.min.js 65.2 kB +9 B (0%)
build/plugins/index.min.js 1.94 kB -10 B (-1%)
build/style-engine/index.min.js 1.55 kB +20 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.11 kB
build/block-editor/content.css 4.1 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 91 B
build/block-library/blocks/avatar/style.css 91 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 628 B
build/block-library/blocks/button/style.css 627 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 100 B
build/block-library/blocks/categories/style.css 100 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 612 B
build/block-library/blocks/cover/editor.css 613 B
build/block-library/blocks/cover/style-rtl.css 1.6 kB
build/block-library/blocks/cover/style.css 1.59 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 265 B
build/block-library/blocks/file/style.css 265 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 984 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 830 B
build/block-library/blocks/image/editor.css 829 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 716 B
build/block-library/blocks/navigation-link/editor.css 715 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 134 B
build/block-library/blocks/post-excerpt/style.css 134 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 463 B
build/block-library/blocks/query/editor.css 463 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 489 B
build/block-library/blocks/site-logo/editor.css 489 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 404 B
build/block-library/blocks/template-part/editor.css 404 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 179 B
build/block-library/blocks/video/style.css 179 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.6 kB
build/block-library/editor.css 11.6 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/compose/index.min.js 12.4 kB
build/core-data/index.min.js 16.3 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.62 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.72 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 34.8 kB
build/edit-post/style-rtl.css 7.59 kB
build/edit-post/style.css 7.58 kB
build/edit-site/style-rtl.css 10.2 kB
build/edit-site/style.css 10.2 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.56 kB
build/edit-widgets/style.css 4.56 kB
build/editor/index.min.js 45.8 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.26 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.99 kB
build/notices/index.min.js 977 B
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 937 B
build/react-i18n/index.min.js 702 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.3 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@github-actions
Copy link

github-actions bot commented Mar 22, 2023

Flaky tests detected in 72a5feb.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/4486001305
📝 Reported issues:

@andrewserong andrewserong marked this pull request as ready for review March 22, 2023 03:30
@andrewserong andrewserong self-assigned this Mar 22, 2023
@andrewserong andrewserong added [Feature] Typography Font and typography-related issues and PRs [Type] Bug An existing feature does not function as intended Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels Mar 22, 2023
Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for addressing this! It's certainly an improvement over trunk on mobile screens, but maybe still needs a little adjustment for larger ones.

I tried the (admittedly a bit exaggerated) size of 20rem on a 1200px wide screen, and on trunk it's clamped to ~17.5rem whereas on this branch it's 12.25rem. On a 900px screen, trunk gives me 15.75 (which is starting to look grotesquely overlarge) but this branch goes all the way down to 6.5 which seems a little on the small side.

If we don't want a slightly higher ceiling, could the other numbers be changed in a way that preserves the proportions a bit more for wider screens?

@andrewserong
Copy link
Contributor Author

Thanks for testing @tellthemachines, and good catch about the font-size at larger viewports!

If we don't want a slightly higher ceiling, could the other numbers be changed in a way that preserves the proportions a bit more for wider screens?

I think the next step, then, might be to try tweaking either the middle part of the clamp() rules potentially, or use a different minimum viewport size when the font-size is larger, so that the reduction happens closer to the narrower viewport. I'll keep hacking away at the values and see if there's a sweet spot anywhere. Happy for any more ideas, though!

@andrewserong
Copy link
Contributor Author

In 09ad429, I've had a play with reducing the default minimum viewport width, which seems to change the calculation for the mid screen sizes a bit, so that it's now a bit larger across that range of sizes. That seems to be a pretty good other variable to play with, so I'll continue tweaking next week.

For the moment, I won't bother updating the tests while we're still playing around with values — I'll do a little more testing next week between this PR and trunk, too, to see if we can change how things are affected at the narrower viewports without otherwise changing things too much from trunk.

@andrewserong andrewserong requested a review from ramonjd April 2, 2023 23:30
Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for starting to look at this @andrewserong

I think you're targeting the right place in the code — where the min value is calculated — since we're really only worried about custom font values.

Font values that have a defined min and max will just do what they do.

It's a tricky one to get right however 🤔

@@ -516,6 +516,14 @@ function gutenberg_get_typography_font_size_value( $preset, $should_use_fluid_ty
)
);

// Sets a ceiling for the minimum font size.
$minimum_font_size_ceiling = gutenberg_get_typography_value_and_unit(
'64px',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you think this could be added up near the default var declarations? E.g.,

$minimum_font_size_ceiling = '64px';?

That way we can open it up for theme.json config later (if we decide that's a good thing to do of course!)

@@ -540,6 +548,12 @@ function gutenberg_get_typography_font_size_value( $preset, $should_use_fluid_ty
if ( ! $minimum_font_size_raw ) {
$calculated_minimum_font_size = round( $preferred_size['value'] * $default_minimum_font_size_factor, 3 );
Copy link
Member

@ramonjd ramonjd Apr 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah linear doesn't appear to cut it.

Maybe we need a plot a growth curve so that y (the calculated min size) grows at different rates depending on the value of x (the give custom size).

I'm no expert by the way, but I can try to play around with equations to see if we can get a good fit.

Simple exponential growth seems to work okay as well, e.g.,

$calculated_minimum_font_size = round( pow( $preferred_size['value'], $default_minimum_font_size_factor ), 3 );

It seems to scale better when the scale factor is bumped from 0.75 to 0.875, which is the ratio of 14px/16px, that is, $default_minimum_font_size_limit / root size

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simple exponential growth seems to work okay as well, e.g.,

Oh, very cool idea! Feel free to commit to this branch or fork if you think it'd help for us to have multiple approaches on the go. I reckon a non-linear curve is a good thing to try out 👍

I should have a bit of time before the end of the week to have a play with this if you don't beat me to it!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I'll have a play this week. 🍺

@jasmussen
Copy link
Contributor

@beafialho @iamtakashi @henriqueiamarino not urgent, but if you have time I would love if you could test this PR and how it feels with regards to fluid typography "just working" out of the box. The easiest way to test might be to use http://gutenberg.run/49247 🙏

@beafialho
Copy link

Besides testing a paragraph on a custom font size, I tried by setting a huge custom font size to the site title and navigation and it seems to work well!

responsive.mp4

Thank you for the heads up @jasmussen and to everyone else who worked on this.

@ramonjd
Copy link
Member

ramonjd commented Apr 11, 2023

Hi folks!

Using this PR as a base, I've thrown up an alternative PR #49707 that calculates minimum font sizes according to a log curve.

Here's a test URL: http://gutenberg.run/49707

The curve ensures that the scale used to calculate minimum font size for custom font sizes will decrease as the custom font size grows larger.

But because the scale isn't linear, the scale will start closer to 0.75 for smaller font sizes and taper out to 0.25 for larger font sizes.

Example:

Font size Calculated min font size
128px 53.473px
32px 18.692px

The major difference between this PR and mine is that I've removed the minimum font size ceiling. As font sizes get very very big, the scale will reduce down to 0.25. I considered it a good balance whereby incredibly huge font sizes, such as 250px++, won't be coerced to 64px, which may seem arbitrary to a designer who wishes to use such large sizes.

However, there's still scope in my PR to include a ceiling for calculated min font sizes if folks think it's a good idea.

@andrewserong
Copy link
Contributor Author

Thanks for diving in @ramonjd! I think your idea of using a logarithmic / non-linear scale would be a better approach so that in narrower viewports the visual differentiation between larger font sizes is preserved. In this one, we just cap out at 64px in narrow viewports, whereas with your approach, if you have two large headings (e.g. 8rem and 6rem), they'll continue to be different in size as the viewport is narrowed, which sounds like it'll better reflect a user's design choices.

If I don't get to it today, I'll take it for a proper run through tomorrow!

@jasmussen
Copy link
Contributor

Thanks for working on this one, it's an important one! Really appreciate this landing soon.

@andrewserong
Copy link
Contributor Author

Thanks for the encouragement @jasmussen! From re-testing, I think that the work @ramonjd is doing looking into a logarithmic scale in #49707 will be more viable as it preserves the proportionality between different font-sizes. It's looking really good to me so far, so let's all give that one a test to see how it might work.

For now (and for clarity so that folks can see which PR is in the lead), I'll close out this PR. We can always re-open if we decided to go with a ceiling for the minimum font size instead of a logarithmic scale.

@ramonjd
Copy link
Member

ramonjd commented Apr 18, 2023

We can always re-open if we decided to go with a ceiling for the minimum font size instead of a logarithmic scale.

Yeah, it might be worth keeping this one in our back pockets if it turns out the font size scale is too big of a change.

I can't see anything wrong with having a config entry that says: "When calculating min font sizes, make sure none are larger than x" so we might even decide to merge this PR and keep tweaking the curved scaled PR to buy us time.

🍺

@andrewserong
Copy link
Contributor Author

Yeah, it might be worth keeping this one in our back pockets if it turns out the font size scale is too big of a change.

Sounds good. I'll be ready to press the "Reopen and comment" button if we decide go with this option in the end 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Typography Font and typography-related issues and PRs Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants