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

Add justification controls to constrained layout #44065

Merged
merged 3 commits into from
Sep 13, 2022

Conversation

tellthemachines
Copy link
Contributor

Why?

Fixes #43650.

How?

Adds justification controls to the "constrained" layout type. These change the margin values on the block children so block content can be aligned left or right.

Note that setting justification to "right" does not right-align any text content, only the child blocks themselves.

Note also that when setting "left" or "right" justification on a Post Content block, the post editor view won't reflect that layout because we don't yet have a way to access the Post Content block settings from the post editor.

Testing Instructions

  1. In the Post Content block sidebar Layout section, toggle on "Inner blocks use content width";
  2. Check that "Justification" controls are added to the bottom of the Layout section;
  3. Change justification value and check that new value is reflected in the editor and on the front end.

Screenshots or screencast

Before (content centred):
Screen Shot 2022-09-12 at 1 51 16 pm

After (content left-aligned):
 wat

@tellthemachines tellthemachines added [Block] Group Affects the Group Block [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Block] Post Content Affects the Post Content Block [Block] Query Loop Affects the Query Loop Block labels Sep 12, 2022
@tellthemachines tellthemachines self-assigned this Sep 12, 2022
@github-actions
Copy link

github-actions bot commented Sep 12, 2022

Size Change: +1.32 kB (0%)

Total Size: 1.25 MB

Filename Size Change
build/block-editor/index.min.js 163 kB +1.3 kB (+1%)
build/block-editor/style-rtl.css 15.3 kB +16 B (0%)
build/block-editor/style.css 15.3 kB +13 B (0%)
build/block-library/blocks/search/style-rtl.css 409 B +13 B (+3%)
build/block-library/blocks/search/style.css 406 B +13 B (+3%)
build/block-library/index.min.js 188 kB +198 B (0%)
build/block-library/style-rtl.css 12.1 kB +10 B (0%)
build/block-library/style.css 12.1 kB +9 B (0%)
build/components/index.min.js 198 kB -254 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.05 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-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 65 B
build/block-library/blocks/archives/style.css 65 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 523 B
build/block-library/blocks/button/style.css 523 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 207 B
build/block-library/blocks/calendar/style.css 207 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 103 B
build/block-library/blocks/code/style.css 103 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 187 B
build/block-library/blocks/comment-template/style.css 185 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 834 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 630 B
build/block-library/blocks/cover/editor-rtl.css 605 B
build/block-library/blocks/cover/editor.css 607 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 337 B
build/block-library/blocks/group/editor.css 337 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 876 B
build/block-library/blocks/image/editor.css 873 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 284 B
build/block-library/blocks/latest-comments/style.css 284 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 463 B
build/block-library/blocks/latest-posts/style.css 462 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 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-submenu/view.min.js 423 B
build/block-library/blocks/navigation/editor-rtl.css 1.99 kB
build/block-library/blocks/navigation/editor.css 2 kB
build/block-library/blocks/navigation/style-rtl.css 2.15 kB
build/block-library/blocks/navigation/style.css 2.14 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 260 B
build/block-library/blocks/paragraph/style.css 260 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 493 B
build/block-library/blocks/post-comments-form/style.css 493 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 507 B
build/block-library/blocks/post-featured-image/editor.css 505 B
build/block-library/blocks/post-featured-image/style-rtl.css 166 B
build/block-library/blocks/post-featured-image/style.css 166 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 73 B
build/block-library/blocks/post-terms/style.css 73 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 282 B
build/block-library/blocks/query-pagination/style.css 278 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 439 B
build/block-library/blocks/query/editor.css 439 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/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 488 B
build/block-library/blocks/site-logo/editor.css 488 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 84 B
build/block-library/blocks/site-title/editor.css 84 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 190 B
build/block-library/blocks/table/theme.css 190 B
build/block-library/blocks/tag-cloud/style-rtl.css 239 B
build/block-library/blocks/tag-cloud/style.css 239 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 561 B
build/block-library/blocks/video/editor.css 563 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/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 kB
build/block-library/editor.css 11 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 719 B
build/block-library/theme.css 722 B
build/block-serialization-default-parser/index.min.js 1.1 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.6 kB
build/components/style-rtl.css 11.5 kB
build/components/style.css 11.5 kB
build/compose/index.min.js 12 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.06 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 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 30.7 kB
build/edit-post/style-rtl.css 6.94 kB
build/edit-post/style.css 6.94 kB
build/edit-site/index.min.js 58.5 kB
build/edit-site/style-rtl.css 8.3 kB
build/edit-site/style.css 8.28 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/index.min.js 41.6 kB
build/editor/style-rtl.css 3.66 kB
build/editor/style.css 3.65 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 6.75 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.81 kB
build/list-reusable-blocks/index.min.js 1.74 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 953 B
build/nux/index.min.js 2.05 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.3 kB
build/primitives/index.min.js 933 B
build/priority-queue/index.min.js 612 B
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.4 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.19 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

@carolinan
Copy link
Contributor

This mostly tests well for me.

When the post content block is placed inside a group with "Inner blocks use content width" enabled, the justification options for the post content block doesn't seem to do anything.

I believe the UI may need some small changes, because it may look like the "Customize the width for all...." text is related to the justification option:
The help text of the first option sits close to the label for the justification option

@tellthemachines
Copy link
Contributor Author

Thanks for testing @carolinan !

When the post content block is placed inside a group with "Inner blocks use content width" enabled, the justification options for the post content block doesn't seem to do anything.

Yeah, this will always happen if we nest two blocks with the same content width. Not sure what would be best to do - maybe show a warning that the parent is already constrained? That would require adding some sort of context mechanism so we could know the parent's layout settings.

I believe the UI may need some small changes, because it may look like the "Customize the width for all...." text is related to the justification option:

Yes, I just threw it in there, it should probably get some design feedback 😅 cc. @WordPress/gutenberg-design

@jasmussen
Copy link
Contributor

Thanks for working on this! Here's a GIF:

status

Here's a "before" shot for reference:

before

This is an important feature, thank you for working on it (and thanks for pinging the design group!)

The big challenge to address here is that the Layout panel is already both big, and complex, so we need to simplify and reduce if possible. Here's a few minimal things we can do:

Layout Panel v1

  • Remove the "reset" button. It does the same as clearing out both values.
  • Use the right gray help-text style. The toggle has a prop that outputs the correct styling, I'm not sure what the best way is for the two width controls, but we should avoid just applying the CSS class (CC: @ciampo @mirka for input)
  • Use the correct label style and apperance for the justification controls. It looks like this uses a fieldset/legend combo, unlike for example "Letter case". This may be a components issue too. Should the legend element just use the same allcaps style as labels?
  • The spacing is a bit off compared to the grid. Should be 16px between sections of a panel, 8px between label/input/help text.

Letter case, for reference:
Screenshot 2022-09-12 at 10 18 37

A followup could be to move this panel to use the ToolsPanel component. This would allow us to hide the justification control by default. The control is useful when you need it, but probably not always?

Layout Panel v2

@ciampo
Copy link
Contributor

ciampo commented Sep 12, 2022

Use the right gray help-text style. The toggle has a prop that outputs the correct styling, I'm not sure what the best way is for the two width controls, but we should avoid just applying the CSS class (CC: @ciampo @mirka for input)

This is a tricky one, since in this in case we'd like to apply one help text paragraph to two separate controls ("content" and "wide"), and I don't think that's possible with out of the box components. It may be possible to achieve something similar with BaseControl, but I'm not sure how we could represent these two separate controls correctly in terms of semantics.

Not sure if it's a good idea, but we could consider creating some sort of "help text" component ? @mirka do you have any ideas?

@jasmussen
Copy link
Contributor

Just for the purposes of keeping things simple, if we can just get the right color and spacing, that would go a long way.

@mtias
Copy link
Member

mtias commented Sep 12, 2022

This is great, thanks for implementing it quickly.

@jameskoster
Copy link
Contributor

When the post content block is placed inside a group with "Inner blocks use content width" enabled, the justification options for the post content block doesn't seem to do anything.

This just highlights how awkward the current layout controls are, and how bad things can get when you start nesting containers. A similar issue exists on trunk when child containers set different content-width values to their parents. On balance it is probably an issue to explore separately?

In terms of the work in this PR, Joen's suggestions look good.

I wonder if it would be possible to reflect the justification in the post editor? Here's my current setup:

Single template Front end Post Editor
Screenshot 2022-09-12 at 12 28 27 Screenshot 2022-09-12 at 12 28 47 Screenshot 2022-09-12 at 12 29 06

The Post Editor is letting the team down by still justifying everything centrally :)

@mirka
Copy link
Member

mirka commented Sep 12, 2022

@tellthemachines What do you think about implementing this using ToggleGroupControl? We recently added support for this exact use case (i.e. icon buttons, borderless, radio-like behavior).

@mirka
Copy link
Member

mirka commented Sep 12, 2022

Not sure if it's a good idea, but we could consider creating some sort of "help text" component ?

@ciampo It's probably a good idea! We can expose it as a subcomponent of BaseControl, similar to BaseControl.VisualLabel The main use case would be to do something like this, which I think is applicable to this particular case as well:

<fieldset>
  <SomeControl />
  <AnotherControl />
  <BaseControl.VisualHelpText as="legend">
    The help text.
  </BaseControl.VisualHelpText>
</fieldset>

@andrewserong
Copy link
Contributor

This is testing nicely for me, too! The only other tiny issue I ran into that I didn't see mentioned above is being able to toggle off the justification (e.g. clicking the center button explicitly sets "justifyContent":"center" in the block comment in the markup, rather than being able to remove it altogether). However, I don't think this is a blocker as we don't do anything with this in the server-rendered output, and toggling off "Inner blocks use content width" effectively resets this value anyway.

I wonder if it would be possible to reflect the justification in the post editor?

I think this would be great to investigate separately — if we think of this as effectively a bug in the post editor styling then perhaps we can argue that we can improve this beyond the feature freeze? One potential way to explore addressing this might to be see if we can extract the post-content block used in the selected template for the post currently being edited. If we can gather the attributes from that block instance and apply them to the post editor styling, then that might get us closer to a 1:1 between the editor and site frontend. Not sure how do-able that is, but I'm happy to write up an issue for it if there isn't one already 🙂

@tellthemachines
Copy link
Contributor Author

Thanks for the feedback folks!

@jasmussen I think I've addressed all your comments except for the spacing between the toggle and the inputs, because it's coming from base control styles:

Screen Shot 2022-09-13 at 11 43 24 am

Changing that value will probably impact other areas of the UI, not sure if we want that? Alternatively I can add a local override.

@mirka I was able to use ToggleGroupControl, thanks for the suggestion!

The remaining problem with the help text for the input fields is that it's not semantically connected to them in any way, so essentially useless for a screen reader user. I could wrap them in a fieldset and make the text a legend, but we'll need to either switch the text to above the controls or deploy some very awkward positioning tricks so that legend can be the first child of fieldset. Not sure if there's any other way to label a group of fields - from the comments I assume there's nothing we can use in the components package?

I wonder if it would be possible to reflect the justification in the post editor?

I think this would be great to investigate separately — if we think of this as effectively a bug in the post editor styling then perhaps we can argue that we can improve this beyond the feature freeze? One potential way to explore addressing this might to be see if we can extract the post-content block used in the selected template for the post currently being edited. If we can gather the attributes from that block instance and apply them to the post editor styling, then that might get us closer to a 1:1 between the editor and site frontend. Not sure how do-able that is, but I'm happy to write up an issue for it if there isn't one already 🙂

I created #42911 a while ago; it's specifically about knowing the layout type of Post Content, but we can use it to track the whole thing. Comments and ideas welcome!

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.

Nice work on the quick follow-ups, @tellthemachines! The changes looks nice in the editor for me, and it's testing well:

2022-09-13 14 02 44

With the ToggleGroupControl it might be worth us also updating the Flex layout controls and labels in a separate PR for consistency in the UI? Definitely not a blocker for this PR.

This LGTM from my perspective and looks like it implements the design feedback so far 🎉 (looks much nicer to me without the reset button 👍). I agree with Joen, that it'd be good for us to also look at implementing the ToolsPanel for layout controls one day, particularly as we add more controls to the UI.

I created #42911 a while ago; it's specifically about knowing the layout type of Post Content, but we can use it to track the whole thing. Comments and ideas welcome!

Ah, perfect, I knew you'd written something up already. I'll add some thoughts / ideas to that issue 🙂

@noisysocks
Copy link
Member

Are you meant to be able to remove the justification? Unfortunately ToggleGroupControl doesn't support that right now 😀

@tellthemachines
Copy link
Contributor Author

Are you meant to be able to remove the justification?

Good question! We're not doing it with the flex layout controls, which these are based on. I can't think of any real world use case for it, as the default state will always be one of the possible settings. It might even be less confusing to make sure that it's always clear which setting is applied by default?

@tellthemachines tellthemachines merged commit 2daa22b into trunk Sep 13, 2022
@tellthemachines tellthemachines deleted the try/justify-constrained-layout branch September 13, 2022 05:07
@github-actions github-actions bot added this to the Gutenberg 14.1 milestone Sep 13, 2022
@jameskoster
Copy link
Contributor

The icons in the justification control appear to be the wrong color (they are a lighter grey than all other icon buttons). Is that something that occurred in this PR, or something relating to the underlying component? Either way it would be good to fix it because at the moment the buttons look disabled 🙈

@jasmussen
Copy link
Contributor

I think those icons are that shade of gray because it's a segmented control under the hood, and the segmented control has a #757575 color gray for non-active items. However I'd agree, when we use icons, we should probably just keep the color dark gray. Sorry about the trouble, @ciampo @mirka

@paaljoachim
Copy link
Contributor

paaljoachim commented Sep 13, 2022

Testing. Using the PR Gutenberg build.
It seems that this is for FSE themes.
Activating Twenty Twenty Two.
Going into the site editor and adding the Post Content block.

In the Post Content block sidebar Layout section, toggle on "Inner blocks use content width";

Ok.

Check that "Justification" controls are added to the bottom of the Layout section;

I can see these.

Change justification value and check that new value is reflected in the editor and on the front end.

Changing to left.

Screenshot 2022-09-13 at 11 11 54

Changing to center.

Screenshot 2022-09-13 at 11 12 03

Changing to right.

Screenshot 2022-09-13 at 11 13 36

Frontend.

Left.
Screenshot 2022-09-13 at 11 18 16

Center.
Screenshot 2022-09-13 at 11 18 30

Right.
Screenshot 2022-09-13 at 11 18 41


What I see...

There are hardly any differences in the backend between using left/center/right justification. I expected it to be related to the boundry it is in. I also expected even bigger differences on the frontend.

(For whatever reason when I left the site editor and came back in the Justification controls did not work....Skipping this part.)

Can we change the color of the grey controls to become black similar to the icons for Content and Wide?
As grey icons to me gives a signal that these are not in use/deactivated.

Screenshot 2022-09-13 at 11 30 17

@tellthemachines
Copy link
Contributor Author

There are hardly any differences in the backend between using left/center/right justification. I expected it to be related to the boundry it is in. I also expected even bigger differences on the frontend.

@paaljoachim thanks for testing! If the editor canvas width is not much more than the content width, it might be hard to tell the difference between the three settings. On the front end it will also depend on viewport width. As I mentioned in the PR description, this control doesn't align text content, only the blocks themselves. So depending on the width of the content vs the viewport, plus any root padding, the difference might be quite subtle.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Group Affects the Group Block [Block] Post Content Affects the Post Content Block [Block] Query Loop Affects the Query Loop Block [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Feature] Layout Layout block support, its UI controls, and style output. Needs User Documentation Needs new user documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add justification option to Post Content block (and potentially other containers)