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

Style Book: Add extra margin to support displaying box shadow #48470

Closed
wants to merge 2 commits into from

Conversation

andrewserong
Copy link
Contributor

What?

Fixes: #48392

This PR updates the styling rules for the Style Book so that there's a little more breathing room within the preview to account for the most common box shadow values. This helps prevents the Style Book from cutting off the shadows in the previews.

Note that this is a naive approach that just adds a little spacing. I also hacked away at an attempt to see if we can extract the shadow values to determine the exact amount of margin to add, but this turned out to be quite complex — we would need to both parse the shadow value, and also iterate over all blocks within the preview to see if it contains any blocks that have a shadow. Otherwise, Button within a Buttons block preview will not trigger additional margins to be added. I'm happy to continue exploring this in a follow-up if folks think the "proper" approach is worth it.

Why?

As reported in #48392 box shadow values fall outside of the content area of the block preview within the Style Book and were being cut off. This PR seeks to remedy this.

How?

  • Add 16px top and bottom margin to the preview in the Style Book
  • Add 16px top padding to the block title text so that it still lines up with the preview
  • Reduce spacing between each example to account for the additional margin

Testing Instructions

  1. Open up global styles, and go to the Button block and add a Shadow (as in Style Book: Box shadow is cut off  #48392)
  2. Open up the Style Book
  3. Play around with setting different shadows and see that the shadows can be seen in the Style Book now. A caveat: the large and soft shadows are still being cut off. So a question for the reviewer — is this PR good enough of an improvement for now?

Screenshots or screencast

Before After
image image

@andrewserong andrewserong added [Type] Bug An existing feature does not function as intended Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels Feb 27, 2023
@andrewserong andrewserong self-assigned this Feb 27, 2023
@andrewserong
Copy link
Contributor Author

I'm not too sure which designers were involved in the original styling of the Style Book, so please excuse the wider ping! @WordPress/gutenberg-design for visibility — very happy for feedback or other ideas on how to approach this if there's a better way to do it 🙂

@github-actions
Copy link

github-actions bot commented Feb 27, 2023

Size Change: +664 B (0%)

Total Size: 1.33 MB

Filename Size Change
build/block-editor/index.min.js 195 kB +13 B (0%)
build/block-library/index.min.js 201 kB +729 B (0%)
build/components/index.min.js 207 kB +27 B (0%)
build/edit-site/index.min.js 65.3 kB -243 B (0%)
build/edit-site/style-rtl.css 10 kB +66 B (+1%)
build/edit-site/style.css 10 kB +67 B (+1%)
build/editor/index.min.js 45.7 kB +1 B (0%)
build/editor/style-rtl.css 3.54 kB +2 B (0%)
build/editor/style.css 3.53 kB +2 B (0%)
ℹ️ 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-editor/style-rtl.css 14.4 kB
build/block-editor/style.css 14.4 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 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.57 kB
build/block-library/blocks/cover/style.css 1.56 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/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.2 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 376 B
build/block-library/blocks/page-list/editor.css 376 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/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 318 B
build/block-library/blocks/post-featured-image/style.css 318 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 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-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 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/style-rtl.css 12.7 kB
build/block-library/style.css 12.7 kB
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/blocks/index.min.js 51 kB
build/components/style-rtl.css 11.7 kB
build/components/style.css 11.7 kB
build/compose/index.min.js 12.4 kB
build/core-data/index.min.js 16.2 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.58 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.53 kB
build/edit-post/style.css 7.52 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.55 kB
build/edit-widgets/style.css 4.55 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.27 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/plugins/index.min.js 1.95 kB
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 940 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 10.8 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.53 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.69 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.31 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

Flaky tests detected in 3249e1c.
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/4279358856
📝 Reported issues:

'.wp-block:first-child { margin-top: 0; }' +
'.wp-block:last-child { margin-bottom: 0; }',
'.is-root-container > .wp-block:first-child { margin-top: 16px; }' +
'.is-root-container > .wp-block:last-child { margin-bottom: 16px; }',
Copy link
Member

@madhusudhand madhusudhand Feb 27, 2023

Choose a reason for hiding this comment

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

I verified the changes with different blocks.
Since shadow can grow in any direction, it needs space in all four directions.
image image

I think it is best to set margin for .is-root-container {margin: 1rem}
I guess a negative margin for edit-site-style-book__example is required to reset the space.

@talldan
Copy link
Contributor

talldan commented Feb 27, 2023

I'm happy to continue exploring this in a follow-up if folks think the "proper" approach is worth it.

To me, the ideal would be for the previews to have a visible overflow, but the previews are in an iframe where overflow: visible isn't possible.

Part of the issue in the style book is that the blocks feel like they're on a canvas, so the cropping is unexpected, it's a bit different to the global styles sidebar where the previews are more clearly boxed in:
Screen Shot 2023-02-27 at 3 43 28 pm

The inserter preview could be a bit better, not sure why there's so much empty space:
Screen Shot 2023-02-27 at 3 43 57 pm

I think you're taking the right approach in improving the situation, I can't think of any obvious alternatives.

@jasmussen
Copy link
Contributor

Just to echo Dan, the margin is fine but might not solve the problem for a sufficiently big shadow. Can we just allow visible overflow on the preview container in this particular case?
Screenshot 2023-02-27 at 11 02 56

@jameskoster
Copy link
Contributor

There's a small chance that a visible overflow could result in obscured UI if an extreme shadow is used. Or overlaps when consecutive blocks have shadows. Keeping the hidden overflow but adding some padding and a border helps you to understand why the shadow is cropped without jeopardising the rest of the UI. It's not a strong opinion but to be safe I lean slightly in that direction.

Screenshot 2023-02-27 at 11 32 36

@apeatling
Copy link
Contributor

All of the shadows worked except for the largest shadow. It did strike me as odd being cut off since in the stylebook you'd expect it to look how it's going to look on the site.

2023-02-27 11 39 29

@andrewserong
Copy link
Contributor Author

Thanks for all the feedback, everyone, lots of good notes! The cutoff of larger shadows is a limitation of using a hard-coded margin like this, but was one way to avoid a more complex approach.

I was keen to see if a more complex approach could work, so I've opened up an alternative PR over in #48578 that attempts to extract the real value for the shadow and use it to general margin rules for the preview. It's quite a lot more complicated, but seems to work a bit more reliably. I'm not too sure if I'm sold on adding all the extra complexity, but I'm happy to keep progressing with that PR if folks would prefer that approach instead 🙂

Now, back to this PR —

Just to echo Dan, the margin is fine but might not solve the problem for a sufficiently big shadow. Can we just allow visible overflow on the preview container in this particular case?

Unfortunately we can't as the shadow is rendered within the preview iframe and so the rendering of the shadow can't break out of it. We therefore need to pass styles down to the iframe to ensure that it gets rendered at a larger intrinsic size.

Keeping the hidden overflow but adding some padding and a border helps you to understand why the shadow is cropped without jeopardising the rest of the UI. It's not a strong opinion but to be safe I lean slightly in that direction.

I really liked this idea, but once I started adjusting background colours in my theme, the additional border around the preview seemed to remove the nice WYSIWYG feeling of the style book for me. For example, when playing around with a dark colour scheme, it looked like this:

image

So, I'm not too sure if the added border will really work, but again, happy to explore other ideas there 🤔

Since shadow can grow in any direction, it needs space in all four directions.

Thanks for calling that out @madhusudhand, I've done an update to this PR to account for left margins, so a top/left shadow now looks like this:

image

To recap:

  • If folks would prefer that we ensure large shadows are handled, I've opened up an alternative PR over in Style Book: Attempt to add margin offset for shadow values #48578 — if we have consensus that it's preferred to go with the more complex approach, I can close out this PR and we can continue the discussion over there.
  • Exploring adding in a border for the preview to delineate the preview area had mixed results — it looked kind of okay with a white background, but once you start playing around with theme colours, it feels like it removes the nice WYSIWYG feeling of the style book to me.
  • I've updated this PR to deal with top/left shadows so that should we wish to go with a quick fix for now for most of the shadows except the really big ones, we've got something to go on with.

Thanks again for all the great feedback! 🙇

@jasmussen
Copy link
Contributor

Oh right, the iframe.

I was about to respond to this one:

There's a small chance that a visible overflow could result in obscured UI if an extreme shadow is used. Or overlaps when consecutive blocks have shadows.

... namely that this is also something you could accomplish in your site, just add a column of buttons, so it would seem fair to represent this here as well.

I would prefer if we could avoid the border, but I can see how it might be the only real solution to convey what's going on here. But I want to ask a possibly obvious question, forgive me if it isn't a good fit: do we actually have to show every single block inside their own iframes? I know it uses the preview component, where one of its tasks is to protect it and its surroundings from CSS bleed. But could we update this component to make the iframe optional? The stylebook is conceptually similar to your editing canvas, meaning it could just be all the blocks shown, row by row, as they would be shown in the editing canvas, no iframes in sight except perhaps that of the canvas itself?

@andrewserong
Copy link
Contributor Author

But I want to ask a possibly obvious question, forgive me if it isn't a good fit: do we actually have to show every single block inside their own iframes?

That's a great question — I actually don't know the answer to this one. I assume the iframe is usually in use because block previews are displayed in places that aren't the editor canvas, so it probably helps prevent styles bleeding along with allowing styles to constrain the preview (scale, etc). But as you mention, in this case, we actually want the blocks to be properly rendered inline. I'll do a little digging to see if there's a reason it can't be done, it very much sounds like an idea worth investigating to me 👍

@andrewserong
Copy link
Contributor Author

Okay, after a bit of hacking around, I think Joen's idea sounds the most promising so far! It'll involve a bit of refactoring of the Style Book, but I think it'll get us closer to the ideal that the Style Book is really previewing how things should look in the editor, rather than be a number of separate iframes. Here's what I've managed to hack together so far:

image

In the above screenshot:

  • The iframe block previews are removed, and in their place is an ExperimentalBlockEditorProvider and a BlockList. Doing just that on its own (wrapped in a Disabled component) allowed for rendering the block markup, but not any of the styles, so we do still need an iframe.
  • I then added a single iframe at the root of the TabPanel content, and pass the editor styles in to this iframe. This means that the area where editor styles are loaded is still contained, but contained to the scope of the visible area of the contents of the Style Book — I think this is pretty much what we'd expect.
  • A caveat/potential blocker — by moving the iframe further up, we then lose all editor UI styles (e.g. Gutenberg components) within the canvas of the Style Book content, so the sizes, spacing of headings for the block names, etc, are not included.

That last point means that it'll involve a little wrangling to get the styling to work correctly within the iframe of the Style Book content area. I still need to do a bit more tidying of my experiment locally before pushing to a draft PR, but if there aren't any objections, I'll press on exploring this direction, as I think it'll likely help us for future block supports / styling things beyond big shadows in the future. The main argument I can think of against moving the iframe up to wrap all of the content of the Style Book is if we were planning to add fancier components to the canvas of the Style Book at any point in the future. That seems unlikely to me, and personally I'd lean toward trying to treat the canvas area as closely as possible as if it were kind of an editor canvas. Happy for any feedback on that, of course.

Thanks again for the feedback so far, everybody!

@tellthemachines
Copy link
Contributor

Oooh this looks good! Can we perhaps add the necessary subset of (duly scoped) editor styles to the iframe? It's really just block names we need to show, right?

@andrewserong
Copy link
Contributor Author

Can we perhaps add the necessary subset of (duly scoped) editor styles to the iframe? It's really just block names we need to show, right?

I think so! It should be pretty do-able, I think. I've put up a hacky draft PR over in #48664 with my work from today, and I managed to copy + paste some styling for the headings / buttons over, and it looks promising so far. I'll continue tweaking it tomorrow and see how stable we can get it 😀

@andrewserong
Copy link
Contributor Author

#48664 is ready for review now, and I think it's looking pretty viable, so I'll close out this PR now. Let's continue the discussion over in #48664 🙂

@ntsekouras ntsekouras removed the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Mar 3, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
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
No open projects
Development

Successfully merging this pull request may close these issues.

Style Book: Box shadow is cut off
8 participants