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

Customizer: Implement mobile responsive block toolbar #31589

Merged
merged 4 commits into from
May 18, 2021

Conversation

talldan
Copy link
Contributor

@talldan talldan commented May 7, 2021

Description

Follow up to #31134
Progresses #30912
Closes #30720

Styles the fixed (mobile responsive) toolbar that #31134 introduced to look like the design in #30720 (comment).

I've also styled the top bar a bit and set it to position: sticky (#30912), but for some reason it doesn't stick while the toolbar does. Not sure if any CSS pros have any ideas how to solve that? There's still a separate issue open for it, so it doesn't have to be solved in this PR, but it might be nice.

The stickyness of the block toolbar itself isn't perfect as the customizer has it's own JavaScript-y scrolling thing happening with the sidebar description container above it.

How has this been tested?

  1. Open the customizer widget editor (after having enabled the Gutenberg experiment)
  2. Make your browser viewport a mobile-ish size
  3. Select a block and see the block toolbar
  4. Add enough blocks that the sidebar scrolls
  5. Scroll and see the sticky behavior

Screenshots

Screenshot 2021-05-07 at 5 01 16 pm

Types of changes

New feature (non-breaking change which adds functionality)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@talldan talldan added [Type] Enhancement A suggestion for improvement. [Feature] Widgets Customizer Ability to add and edit blocks in Customize → Widgets. labels May 7, 2021
@talldan talldan self-assigned this May 7, 2021
@github-actions
Copy link

github-actions bot commented May 7, 2021

Size Change: -11.6 kB (-1%)

Total Size: 1.3 MB

Filename Size Change
build/a11y/index.js 1.12 kB +1 B (0%)
build/annotations/index.js 2.93 kB +2 B (0%)
build/api-fetch/index.js 2.42 kB +1 B (0%)
build/block-directory/index.js 6.61 kB +16 B (0%)
build/block-editor/index.js 118 kB +2.33 kB (+2%)
build/block-editor/style-rtl.css 13 kB +9 B (0%)
build/block-editor/style.css 13 kB +9 B (0%)
build/block-library/blocks/button/style-rtl.css 601 B +86 B (+17%) ⚠️
build/block-library/blocks/button/style.css 600 B +85 B (+17%) ⚠️
build/block-library/blocks/buttons/style-rtl.css 375 B +7 B (+2%)
build/block-library/blocks/buttons/style.css 375 B +7 B (+2%)
build/block-library/blocks/cover/editor-rtl.css 643 B +40 B (+7%) 🔍
build/block-library/blocks/cover/editor.css 645 B +41 B (+7%) 🔍
build/block-library/blocks/file/frontend.js 771 B -2 B (0%)
build/block-library/blocks/image/style-rtl.css 481 B +5 B (+1%)
build/block-library/blocks/image/style.css 485 B +7 B (+1%)
build/block-library/blocks/navigation/editor-rtl.css 1.52 kB +205 B (+16%) ⚠️
build/block-library/blocks/navigation/editor.css 1.52 kB +205 B (+16%) ⚠️
build/block-library/blocks/navigation/style-rtl.css 1.71 kB +440 B (+35%) 🚨
build/block-library/blocks/navigation/style.css 1.71 kB +443 B (+35%) 🚨
build/block-library/blocks/page-list/style-rtl.css 204 B +37 B (+22%) 🚨
build/block-library/blocks/page-list/style.css 204 B +37 B (+22%) 🚨
build/block-library/blocks/post-featured-image/style-rtl.css 119 B +19 B (+19%) ⚠️
build/block-library/blocks/post-featured-image/style.css 119 B +19 B (+19%) ⚠️
build/block-library/editor-rtl.css 9.84 kB +214 B (+2%)
build/block-library/editor.css 9.83 kB +215 B (+2%)
build/block-library/index.js 146 kB +4.18 kB (+3%)
build/block-library/style-rtl.css 10.1 kB +690 B (+7%) 🔍
build/block-library/style.css 10.2 kB +686 B (+7%) 🔍
build/block-serialization-spec-parser/index.js 3.06 kB -1 B (0%)
build/blocks/index.js 47.1 kB +19 B (0%)
build/components/index.js 188 kB +1.04 kB (+1%)
build/components/style-rtl.css 16.2 kB +8 B (0%)
build/components/style.css 16.2 kB +9 B (0%)
build/compose/index.js 9.92 kB -40 B (0%)
build/core-data/index.js 12.1 kB +6 B (0%)
build/customize-widgets/index.js 5.98 kB +187 B (+3%)
build/customize-widgets/style-rtl.css 811 B +113 B (+16%) ⚠️
build/customize-widgets/style.css 813 B +114 B (+16%) ⚠️
build/data-controls/index.js 828 B -1 B (0%)
build/date/index.js 31.8 kB +1 B (0%)
build/deprecated/index.js 739 B +1 B (0%)
build/dom-ready/index.js 577 B +1 B (0%)
build/dom/index.js 4.62 kB -5 B (0%)
build/edit-navigation/index.js 13.6 kB +26 B (0%)
build/edit-navigation/style-rtl.css 2.83 kB +17 B (+1%)
build/edit-navigation/style.css 2.83 kB +18 B (+1%)
build/edit-post/index.js 334 kB +298 B (0%)
build/edit-post/style-rtl.css 6.8 kB +6 B (0%)
build/edit-post/style.css 6.79 kB +6 B (0%)
build/edit-site/index.js 26 kB -43 B (0%)
build/edit-widgets/index.js 12.5 kB -86 B (-1%)
build/editor/index.js 38.4 kB -22.1 kB (-36%) 🎉
build/element/index.js 3.44 kB -2 B (0%)
build/format-library/index.js 5.67 kB -9 B (0%)
build/hooks/index.js 1.76 kB -1 B (0%)
build/html-entities/index.js 627 B -1 B (0%)
build/i18n/index.js 3.73 kB -2 B (0%)
build/keyboard-shortcuts/index.js 1.65 kB -1 B (0%)
build/keycodes/index.js 1.43 kB -1 B (0%)
build/nux/index.js 2.31 kB +5 B (0%)
build/plugins/index.js 1.99 kB -13 B (-1%)
build/primitives/index.js 1.03 kB -6 B (-1%)
build/react-i18n/index.js 923 B -1 B (0%)
build/redux-routine/index.js 2.82 kB -4 B (0%)
build/reusable-blocks/index.js 2.54 kB -24 B (-1%)
build/rich-text/index.js 10.7 kB -1.21 kB (-10%) 👏
build/server-side-render/index.js 1.64 kB -2 B (0%)
build/shortcode/index.js 1.68 kB -1 B (0%)
build/token-list/index.js 846 B -1 B (0%)
build/warning/index.js 1.13 kB -1 B (0%)
build/widgets/index.js 1.66 kB -21 B (-1%)
build/wordcount/index.js 1.24 kB +2 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/autop/index.js 2.28 kB 0 B
build/blob/index.js 673 B 0 B
build/block-directory/style-rtl.css 993 B 0 B
build/block-directory/style.css 995 B 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 422 B 0 B
build/block-library/blocks/columns/style.css 422 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB 0 B
build/block-library/blocks/cover/style.css 1.22 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 301 B 0 B
build/block-library/blocks/file/editor.css 300 B 0 B
build/block-library/blocks/file/style-rtl.css 255 B 0 B
build/block-library/blocks/file/style.css 255 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.06 kB 0 B
build/block-library/blocks/gallery/style.css 1.05 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/home-link/style-rtl.css 259 B 0 B
build/block-library/blocks/home-link/style.css 259 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 557 B 0 B
build/block-library/blocks/legacy-widget/editor.css 557 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 176 B 0 B
build/block-library/blocks/media-text/editor.css 176 B 0 B
build/block-library/blocks/media-text/style-rtl.css 492 B 0 B
build/block-library/blocks/media-text/style.css 489 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 617 B 0 B
build/block-library/blocks/navigation-link/editor.css 619 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B 0 B
build/block-library/blocks/navigation-link/style.css 94 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 239 B 0 B
build/block-library/blocks/page-list/editor.css 240 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B 0 B
build/block-library/blocks/post-comments-form/style.css 140 B 0 B
build/block-library/blocks/post-comments/style-rtl.css 360 B 0 B
build/block-library/blocks/post-comments/style.css 359 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-title/style-rtl.css 60 B 0 B
build/block-library/blocks/post-title/style.css 60 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 83 B 0 B
build/block-library/blocks/query-loop/editor.css 82 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 131 B 0 B
build/block-library/blocks/query/editor.css 132 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 189 B 0 B
build/block-library/blocks/search/editor.css 189 B 0 B
build/block-library/blocks/search/style-rtl.css 359 B 0 B
build/block-library/blocks/search/style.css 362 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 440 B 0 B
build/block-library/blocks/site-logo/editor.css 441 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 154 B 0 B
build/block-library/blocks/site-logo/style.css 154 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 796 B 0 B
build/block-library/blocks/social-links/editor.css 795 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 308 B 0 B
build/block-library/blocks/spacer/editor.css 308 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 485 B 0 B
build/block-library/blocks/table/style.css 485 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 551 B 0 B
build/block-library/blocks/template-part/editor.css 550 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 569 B 0 B
build/block-library/blocks/video/editor.css 570 B 0 B
build/block-library/blocks/video/style-rtl.css 169 B 0 B
build/block-library/blocks/video/style.css 169 B 0 B
build/block-library/common-rtl.css 1.26 kB 0 B
build/block-library/common.css 1.26 kB 0 B
build/block-library/reset-rtl.css 506 B 0 B
build/block-library/reset.css 507 B 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.3 kB 0 B
build/data/index.js 7.23 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-site/style-rtl.css 4.79 kB 0 B
build/edit-site/style.css 4.78 kB 0 B
build/edit-widgets/style-rtl.css 3.02 kB 0 B
build/edit-widgets/style.css 3.03 kB 0 B
build/editor/style-rtl.css 3.95 kB 0 B
build/editor/style.css 3.95 kB 0 B
build/escape-html/index.js 739 B 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/list-reusable-blocks/index.js 2.06 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 3.08 kB 0 B
build/navigation/index.js 2.85 kB 0 B
build/notices/index.js 1.07 kB 0 B
build/nux/style-rtl.css 718 B 0 B
build/nux/style.css 716 B 0 B
build/priority-queue/index.js 791 B 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/url/index.js 1.95 kB 0 B
build/viewport/index.js 1.28 kB 0 B

compressed-size-action

@tellthemachines
Copy link
Contributor

I've also styled the top bar a bit and set it to position: sticky (#30912), but for some reason it doesn't stick while the toolbar does.

The header needs a top value set for the stickiness to work. Also, assuming we want the header above the block toolbar, we'll have to adjust the toolbar's top so they don't end up overlapping one another.

The stickyness of the block toolbar itself isn't perfect as the customizer has it's own JavaScript-y scrolling thing happening with the sidebar description container above it.

The description container only overlays the toolbar when scrolling up, and I don't think that's too bad. It's easy enough to hide again by scrolling down, and users are familiar with how it works already.

@talldan
Copy link
Contributor Author

talldan commented May 10, 2021

Thanks for the hints @tellthemachines, that should be working now!

Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

This is working very well now ✅

border-bottom: 1px solid $gray-200;

// Ensure widget UI doesn't overlap when scrolling
z-index: 8;
Copy link
Contributor

Choose a reason for hiding this comment

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

What's the reason for 8 here? 2 seems to work as well. Might be worth adding something to the comment about what we're trying to overlay.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've move this to the z-indexes file and added a better comment 👍

Also split the topbar and toolbar indices. I figure it's best to make them as high as possible as nothing else should overlap them other than the odd element (popovers, tooltips) that already has a much higher z-index.

@talldan
Copy link
Contributor Author

talldan commented May 10, 2021

I've just spotted an additional issue. The floating block toolbar on desktop viewports is now overlapped by the sticky topbar when scrolling down. I need to find a way to offset it. I think it defaults to stopping at the top of its scroll area:

Screenshot 2021-05-10 at 5 05 46 pm

@critterverse
Copy link
Contributor

Nice! The only thing I spotted is that I think we should hide the fixed toolbar bottom border when everything is deselected, so that there’s no visible bar area there unless a block is selected. Here's how it works in the post editor:

fixed-toolbar-post-editor.mov

Thanks @talldan!

@talldan
Copy link
Contributor Author

talldan commented May 11, 2021

I haven't yet come up with a way to solve this issue where the toolbar goes under the topbar when scrolling up:
annoying

I think this is what the __unstableStickyBoundaryElement on the popover does, it defaults to sticking at the top of the nearest scrollable area:

__unstableStickyBoundaryElement,

Open to suggestions (or a commit that solve the issue 😄).

@talldan
Copy link
Contributor Author

talldan commented May 17, 2021

For now I've removed the sticky topbar behavior to solve the issue I had above. I think it's more important to get this in before the WordPress 5.8 feature freeze.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Widgets Customizer Ability to add and edit blocks in Customize → Widgets. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Blocks in Widget Customizer: Block toolbar not visible at small screen sizes.
3 participants