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: adjust font size min and max rules #45536

Merged
merged 9 commits into from Nov 10, 2022

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Nov 4, 2022

What?

Part of

Resolves #45504

  1. Where no fluid max values are set (e.g., single or custom font size values), the "size" value will act as the maximum value in a clamp() function.
  2. In the absence of any fluid min / max values, we will enforce the lower bound rule of >16px. This applies to custom values from the editor or single-value theme.json styles. Font sizes below this will not be clamped.
  3. In a preset, if a fluid.min value has been specified, the lower bound rule of >16px won't be enforced on this value. Presets with a fluid object therefore, give precedence to theme author's values.
  4. In a preset, if there is NOT a fluid.max but there is fluid.min, use the incoming "size" value as the max.
  5. In a preset, if there is NOT a fluid.min but there is a fluid.max, use size * min_size_factor as the min. Here we do enforce the lower bound rule of >16px, because Gutenberg is computing the min value. This is consistent with the way we calculate minimum sizes for single or custom values.

Testing Instructions

Example theme.json
{
	"version": 2,
	"settings": {
		"typography": {
			"fluid": true,
			"fontSizes": [
				{
					"size": "12px",
					"slug": "piccolino",
					"name": "Piccolino"
				},
				{
					"size": "2rem",
					"fluid": {
						"min": ".8rem",
						"max": "40px"
					},
					"slug": "in-mezzo",
					"name": "In Mezzo"
				},
				{
					"size": "2.8rem",
					"fluid": {
						"min": "0.3rem"
					},
					"slug": "neutrale",
					"name": "Neutrale"
				},
				{
					"size": "4.75rem",
					"slug": "grandone",
					"name": "Grandone"
				},
				{
					"size": "6rem",
					"fluid": {
						"max": "7rem"
					},
					"slug": "colossal",
					"name": "Colossal"
				}
			]
		}
	},
	"styles": {
		"typography": {
			"fontSize": "12px"
		},
		"elements": {
			"h1": {
				"typography": {
					"fontSize": "4rem"
				}
			}
		},
		"blocks": {
			"core/post-date": {
				"typography": {
					"fontSize": "16px"
				}
			}
		}
	}
}

Add some text blocks to the editor, apply presets and custom sizes, and ensure they:

Please test by playing around with:

  1. Font size presets in theme.json
  2. Global styles in theme.json (global, elements, blocks)
  3. Global styles in the site editor (global, elements, blocks)
  4. Typography block supports at the individual block level in the post/side editor

@ramonjd ramonjd added [Type] Enhancement A suggestion for improvement. [Feature] Typography Font and typography-related issues and PRs labels Nov 4, 2022
@ramonjd ramonjd self-assigned this Nov 4, 2022
@codesandbox
Copy link

codesandbox bot commented Nov 4, 2022

CodeSandbox logoCodeSandbox logo  Open in CodeSandbox Web Editor | VS Code | VS Code Insiders

@github-actions
Copy link

github-actions bot commented Nov 4, 2022

Size Change: -38 B (0%)

Total Size: 1.29 MB

Filename Size Change
build/block-editor/index.min.js 174 kB -38 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.09 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 15.9 kB
build/block-editor/style.css 15.9 kB
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 126 B
build/block-library/blocks/audio/theme.css 126 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 84 B
build/block-library/blocks/avatar/style.css 84 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 482 B
build/block-library/blocks/button/editor.css 482 B
build/block-library/blocks/button/style-rtl.css 532 B
build/block-library/blocks/button/style.css 532 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.57 kB
build/block-library/blocks/cover/style.css 1.55 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 126 B
build/block-library/blocks/embed/theme.css 126 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 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 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 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 394 B
build/block-library/blocks/group/editor.css 394 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 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 880 B
build/block-library/blocks/image/editor.css 880 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/latest-comments/style-rtl.css 298 B
build/block-library/blocks/latest-comments/style.css 298 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 712 B
build/block-library/blocks/navigation-link/editor.css 711 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 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.15 kB
build/block-library/blocks/navigation/editor.css 2.16 kB
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 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 363 B
build/block-library/blocks/page-list/editor.css 363 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 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 586 B
build/block-library/blocks/post-featured-image/editor.css 584 B
build/block-library/blocks/post-featured-image/style-rtl.css 315 B
build/block-library/blocks/post-featured-image/style.css 315 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-template/style-rtl.css 282 B
build/block-library/blocks/post-template/style.css 282 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 440 B
build/block-library/blocks/query/editor.css 440 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 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 202 B
build/block-library/blocks/rss/editor.css 204 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-rtl.css 409 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 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 490 B
build/block-library/blocks/site-logo/editor.css 490 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 322 B
build/block-library/blocks/spacer/editor.css 322 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 505 B
build/block-library/blocks/table/editor.css 505 B
build/block-library/blocks/table/style-rtl.css 631 B
build/block-library/blocks/table/style.css 631 B
build/block-library/blocks/table/theme-rtl.css 172 B
build/block-library/blocks/table/theme.css 172 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 235 B
build/block-library/blocks/template-part/editor.css 235 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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 691 B
build/block-library/blocks/video/editor.css 694 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 162 B
build/block-library/classic.css 162 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 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.3 kB
build/block-library/editor.css 11.3 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 193 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.4 kB
build/block-library/style.css 12.4 kB
build/block-library/theme-rtl.css 704 B
build/block-library/theme.css 708 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.9 kB
build/components/index.min.js 203 kB
build/components/style-rtl.css 11.3 kB
build/components/style.css 11.4 kB
build/compose/index.min.js 12.2 kB
build/core-data/index.min.js 15.5 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 8.08 kB
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 34.1 kB
build/edit-post/style-rtl.css 7.31 kB
build/edit-post/style.css 7.3 kB
build/edit-site/index.min.js 58.2 kB
build/edit-site/style-rtl.css 8.37 kB
build/edit-site/style.css 8.35 kB
build/edit-widgets/index.min.js 16.7 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/index.min.js 43.6 kB
build/editor/style-rtl.css 3.6 kB
build/editor/style.css 3.59 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/experiments/index.min.js 868 B
build/format-library/index.min.js 6.95 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.83 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 963 B
build/nux/index.min.js 2.06 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.33 kB
build/primitives/index.min.js 944 B
build/priority-queue/index.min.js 1.58 kB
build/react-i18n/index.min.js 696 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.74 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.7 kB
build/server-side-render/index.min.js 1.77 kB
build/shortcode/index.min.js 1.53 kB
build/style-engine/index.min.js 1.48 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@ramonjd ramonjd force-pushed the update/fluid-font-size-max-min-rules branch from 257dc09 to f6dcac0 Compare November 6, 2022 23:17
@Mamaduka
Copy link
Member

Mamaduka commented Nov 7, 2022

Hi, @ramonjd

I just wanted to check the status of this PR. Do you think it will be ready for the next minor release?

The WP 6.1.1 RC is scheduled for this Friday.

@ramonjd ramonjd marked this pull request as ready for review November 8, 2022 00:18
@ramonjd ramonjd added the Needs Design Feedback Needs general design feedback. label Nov 8, 2022
@ramonjd
Copy link
Member Author

ramonjd commented Nov 8, 2022

I just wanted to check the status of this PR. Do you think it will be ready for the next minor release?

Hi @Mamaduka,

Thanks for checking in.

I cannot honestly say. As it stands, this PR is ready to test, and will need thorough testing to ensure it meets folks' expectations.

If it turns out that things are working well, then I see no impediment for the minor release.

It all depends on the feedback, and the work needed to implement the feedback.

@ramonjd ramonjd force-pushed the update/fluid-font-size-max-min-rules branch from 70ce728 to 2684da7 Compare November 8, 2022 00:44
@@ -461,7 +461,6 @@ function gutenberg_get_typography_font_size_value( $preset, $should_use_fluid_ty
$default_maximum_viewport_width = '1600px';
$default_minimum_viewport_width = '768px';
$default_minimum_font_size_factor = 0.75;
$default_maximum_font_size_factor = 1.5;
Copy link
Member Author

@ramonjd ramonjd Nov 8, 2022

Choose a reason for hiding this comment

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

Removed since we never need to compute the max size. We fallback to the incoming "size" or single/custom value. See issue: #45504

Copy link
Contributor

@andrewserong andrewserong 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 the ping, and working on this @ramonjd! Just gave this a quick skim and manual test, and it seems to be working nicely! Left a couple of tiny nits about comments, but nothing major there 🙂

One thing that might be good to get feedback from designers on is whether the scaling multiplier still reduces font sizes enough across viewport sizes. The effect seems a little subtle to me now when setting quite a large font size for the largest viewport size. Whereas before I think because we had the max value scaling up from the desired font-size, there was a greater variance between the computed min and max sizes. To put it simply: now that the selected font size is set for max instead of the middle value, is 0.75 the right multiplier to use, or should it be a smaller fraction?

@ramonjd
Copy link
Member Author

ramonjd commented Nov 8, 2022

now that the selected font size is set for max instead of the middle value, is 0.75 the right multiplier to use, or should it be a smaller fraction?

This is a good question, and I'm not sure what the right fallback min font size multiplier should be.

The motivation behind this PR was to give more meaning to the value a user enters, in other words, so that what they see on the screen has a closer relationship with the value they entered.

Given that, how much smaller could we get away with in relation to the min font size multiplier without contradicting this principle?

So I agree that feedback from themers/designers is crucial here.

For those with the time and inclination to test this particular aspect, the default min font size factor (how we auto-generate min font sizes in the absence of an explicit value) can be tweaked:

  1. Here for the frontend: https://github.com/WordPress/gutenberg/blob/6e89b8116fbb1002a46f8ab20beb809d1cb5c279/lib/block-supports/typography.php#L463
  2. Here for the editor: https://github.com/WordPress/gutenberg/blob/6e89b8116fbb1002a46f8ab20beb809d1cb5c279/packages/block-editor/src/components/font-sizes/fluid-utils.js#L11

There's another PR #42489 in the works that will allow the min font size multiplier to be configurable via theme.json.

@Mamaduka
Copy link
Member

Mamaduka commented Nov 8, 2022

Thanks for the update, @ramonjd!

Let's ping the @WordPress/block-themers group for more feedback.

@aristath
Copy link
Member

aristath commented Nov 8, 2022

Why did we choose 14px as the minimum? 🤔
For a11y and readability purposes, 16px is the universally accepted minimum value, so perhaps that should be the default minimum if not defined?
The number 14 is a remnant of text-editors like MS-Word etc, where it was referring to pt and not px units 😅

@jasmussen
Copy link
Contributor

Took this for a spin, works well, and feels totally safe to me as a point release improvement, mainly in that it fixes the main headache around using custom font sizes. I set a custom font size to 36px, and it clamps between 27 and 36.

Why did we choose 14px as the minimum? 🤔

No strong opinion, and happy to defer. As an addendum: even with 16px as the minimum clampable value, it will always be possible for themes to create presets smaller than this, and users to likewise set custom font sizes at nigh unreadable sizes. I like to think we have an opportunity to educate rather than predicate, for example by showing either clarifying help-text, or a contrast-like warning, in the custom font size control. Not something that I think need block this PR.

@ramonjd
Copy link
Member Author

ramonjd commented Nov 8, 2022

Thanks @aristath and @jasmussen

For a11y and readability purposes, 16px is the universally accepted minimum value, so perhaps that should be the default minimum if not defined?

I just tested with >16px (so, we'll only clamp() when a font size is 17px or 1.1em for example). Things look fine!

Example, when I select 17px as my font size, the resulting clamp value will be clamp(16px, 1rem + (1vw - 7.68px) * 0.12, 17px);.

Should I bump it to 16px? Updating the tests will be the hardest part 😄

cc @tellthemachines for thoughts

@ramonjd ramonjd force-pushed the update/fluid-font-size-max-min-rules branch from 6e89b81 to 863d9ae Compare November 9, 2022 01:14
@ramonjd ramonjd force-pushed the update/fluid-font-size-max-min-rules branch from 154e3ba to 01fc69f Compare November 10, 2022 17:29
@ramonjd
Copy link
Member Author

ramonjd commented Nov 10, 2022

Do folks think this one is good to merge, based on the feedback in the issue?

@ramonjd ramonjd added Backport to WP Minor Release Pull request that needs to be backported to a WordPress minor release and removed [Status] In Progress Tracking issues with work in progress labels Nov 10, 2022
Copy link
Member

@Mamaduka Mamaduka left a comment

Choose a reason for hiding this comment

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

The code looks good to me, and happy to approve it based on the gathered feedback 👍

@ramonjd, will you be able to create the Core backport patch for this?

ramonjd added a commit to ramonjd/wordpress-develop that referenced this pull request Nov 10, 2022
- Where no fluid max values are set (e.g., single or custom font size values), the "size" value will act as the maximum value in a clamp() function.
- Do not clamp value if a font size is lower than 14px
- Always honor a supplied fluid.min value, the lower bound of 14px notwidthstanding
@ramonjd
Copy link
Member Author

ramonjd commented Nov 10, 2022

@ramonjd, will you be able to create the Core backport patch for this?

Thank you @Mamaduka !!! I have prepped the PHP backport patch over here: WordPress/wordpress-develop#3602

@ramonjd ramonjd merged commit 9928e2c into trunk Nov 10, 2022
@ramonjd ramonjd deleted the update/fluid-font-size-max-min-rules branch November 10, 2022 21:11
@github-actions github-actions bot added this to the Gutenberg 14.6 milestone Nov 10, 2022
ramonjd added a commit to ramonjd/wordpress-develop that referenced this pull request Nov 10, 2022
- Where no fluid max values are set (e.g., single or custom font size values), the "size" value will act as the maximum value in a clamp() function.
- Do not clamp value if a font size is lower than 14px
- Always honor a supplied fluid.min value, the lower bound of 14px notwidthstanding
@ramonjd
Copy link
Member Author

ramonjd commented Nov 10, 2022

Just checking, is there a 6.1.1 release branch or somewhere we need to cherry pick the JS changes into?

I see there are few PRs with the "Backport to WP Minor Release" label.

@Mamaduka
Copy link
Member

I will cherry-pick the change on the Gutenberg repo, not a problem :)

Mamaduka pushed a commit that referenced this pull request Nov 11, 2022
* Initial commit. No tests.

* Update PHP unit tests

* Updating JS tests
Harmonizing test descriptions across PHP and JS
Updated CHANGELOG.md and README.md

* Updating global styles JS tests

* Update typography props JS units tests to reflect new max value

* Aligning comments acrossing PHP and JS and making sure they're clearer.

Bumping the lower bound from 14px to 16px
Updating tests

* Updating global styles tests

* Revert "Updating global styles tests"

This reverts commit 72d4a38.

* Revert "Aligning comments acrossing PHP and JS and making sure they're clearer."

This reverts commit 863d9ae.
Mamaduka pushed a commit that referenced this pull request Nov 11, 2022
* Initial commit. No tests.

* Update PHP unit tests

* Updating JS tests
Harmonizing test descriptions across PHP and JS
Updated CHANGELOG.md and README.md

* Updating global styles JS tests

* Update typography props JS units tests to reflect new max value

* Aligning comments acrossing PHP and JS and making sure they're clearer.

Bumping the lower bound from 14px to 16px
Updating tests

* Updating global styles tests

* Revert "Updating global styles tests"

This reverts commit 72d4a38.

* Revert "Aligning comments acrossing PHP and JS and making sure they're clearer."

This reverts commit 863d9ae.
@Mamaduka Mamaduka removed the Backport to WP Minor Release Pull request that needs to be backported to a WordPress minor release label Nov 14, 2022
@bph bph mentioned this pull request Feb 6, 2023
47 tasks
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 Needs Design Feedback Needs general design feedback. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fluid typography: custom values should be set as maximum font size
5 participants