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

Image block: Set image display to grid when no alignment sent to properly align caption on resize #35787

Merged
merged 8 commits into from
Dec 9, 2021

Conversation

glendaviesnz
Copy link
Contributor

@glendaviesnz glendaviesnz commented Oct 20, 2021

Description

Currently the image caption does not align correctly when no alignment is set if the image is small, or resized smaller. This PR adds the same table display property as is used when an explicit alignment is set.

Fixes: #17162

To Test

  • Check out PR to local dev env
  • Add an image and set caption
  • Resize the image and check that the caption stays aligned correctly
  • Test other explicit layout options, left, right, centre and make sure they still behave as expected

Screenshots

Before:
caption-before

After:
caption-after

@github-actions
Copy link

github-actions bot commented Oct 20, 2021

Size Change: +308 B (0%)

Total Size: 1.11 MB

Filename Size Change
build/block-library/blocks/image/editor-rtl.css 810 B +79 B (+11%) ⚠️
build/block-library/blocks/image/editor.css 809 B +79 B (+11%) ⚠️
build/block-library/editor-rtl.css 10 kB +75 B (+1%)
build/block-library/editor.css 10 kB +75 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 139 kB
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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 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 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 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 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 210 B
build/block-library/blocks/columns/editor.css 208 B
build/block-library/blocks/columns/style-rtl.css 503 B
build/block-library/blocks/columns/style.css 502 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 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 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 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 966 B
build/block-library/blocks/gallery/editor.css 970 B
build/block-library/blocks/gallery/style-rtl.css 1.63 kB
build/block-library/blocks/gallery/style.css 1.62 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 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 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/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 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 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 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-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.91 kB
build/block-library/blocks/navigation/editor.css 1.91 kB
build/block-library/blocks/navigation/style-rtl.css 1.68 kB
build/block-library/blocks/navigation/style.css 1.67 kB
build/block-library/blocks/navigation/view.min.js 2.79 kB
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 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 172 B
build/block-library/blocks/page-list/style.css 172 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 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 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/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 391 B
build/block-library/blocks/post-template/style.css 392 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 80 B
build/block-library/blocks/post-title/style.css 80 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 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 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 273 B
build/block-library/blocks/query-pagination/style.css 269 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 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 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 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 772 B
build/block-library/blocks/site-logo/editor.css 772 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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 569 B
build/block-library/blocks/video/editor.css 570 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 857 B
build/block-library/common.css 856 B
build/block-library/index.min.js 162 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.7 kB
build/block-library/style.css 10.7 kB
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/index.min.js 215 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 10.9 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-site/index.min.js 34.3 kB
build/edit-site/style-rtl.css 6.58 kB
build/edit-site/style.css 6.58 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

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.

Interesting issue @glendaviesnz! This fix appears to work well for themes where the default styling is for the image block to be centred in the front end view, so it works nicely in TwentyTwentyOne. I noticed in TwentyTwenty, though, the front end styling defaults to the block being rendered left aligned. So with this change applied, in the editor view, resizing the image causes it to appear as though it's centre-aligned, however the front-end view is left aligned.

TwentyTwentyOne editor view TwentyTwentyOne front end view
image image
TwentyTwenty editor view TwentyTwenty front end view
image image

I'm not quite sure what the solution is, but it seems that display: table overrides the theme's max-width for the block, so it effectively makes it centre aligned? I had a quick go at seeing if we could pass width to the style of the RichText instead of using the CSS change, but it then meant we lose the real-time updating of the caption position, so probably doesn't really work as an alternative 🤔

Kapture 2021-10-20 at 15 37 26

@@ -59,7 +59,8 @@ figure.wp-block-image:not(.wp-block) {

.wp-block[data-align="left"],
.wp-block[data-align="center"],
.wp-block[data-align="right"] {
.wp-block[data-align="right"],
*:not([data-align]) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Does this need to be the broad * selector, or would .wp-block:not([data-align]) work?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Unfortunately the .wp-block wrapper is only added around the image block if an explicit alignment is set

@paaljoachim
Copy link
Contributor

Thank you for creating this PR, Glen @glendaviesnz !

Before:
Screenshot 2021-10-20 at 22 42 20

Screenshot 2021-10-20 at 22 42 36

After:
Screenshot 2021-10-20 at 22 45 14

Screenshot 2021-10-20 at 22 45 29

What I like about this approach is that the boundry box stays close to the image.

@glendaviesnz
Copy link
Contributor Author

I noticed in TwentyTwenty, though, the front end styling defaults to the block being rendered left aligned.

@andrewserong - this is proving to be a difficult one to cover all the basis, which I guess is why the issue has been open so long 😄 I pushed a change to use grid instead of table, and that fixes it for TwentyTwenty, but breaks it for TT1 😢

@andrewserong
Copy link
Contributor

Thanks for taking a look @glendaviesnz! Unfortunately it looks like that change also affects the placeholder state and the width when a custom width/height value isn't set:

Placeholder Image without width/height set appears smaller than it should
image image

This is proving surprisingly tricky! I had a go at using the follow, but it wound up causing a variety of other issues too 😞

.wp-block.wp-block-image.is-resized {
  max-width: min-content;
}

@paaljoachim
Copy link
Contributor

I assume one needs to look at what works for most themes and create a trac ticket for either Twenty Twenty or TT1 and get it fixed there.

@jblossomweb
Copy link

@glendaviesnz thanks for this fix, looking forward to it making it to a release.
In the meantime, does anyone happen to have a minimally invasive workaround handy?
I don't want to manage a fork, point at a branch, or otherwise hack my dependency until the fix is published.

only needed for back-end, as I am working with a headless front-end.
my use case is allowing core/image as an innerBlock of a custom Gutenberg block, so I was going to try and stuff some deep css selectors with conditional rules into the parent for now.

Curious if anyone had a better idea, since, even if temporary:

  1. doing this would leave me more coupled to the existing DOM structure than I'd prefer, especially if it could change.
  2. this would only be reflected in the parent custom block, and it would be nice to have it fixed across the board.

thanks!

@paaljoachim
Copy link
Contributor

paaljoachim commented Dec 6, 2021

The work around I have done on a client site is the following...

Backend

Screenshot 2021-12-06 at 17 40 27

Frontend

Screenshot 2021-12-06 at 17 40 37

I added this CSS.

/* Show caption in the bottom center of the frontend image.*/
.wp-block-image {
    margin-bottom: 1.2em;
    display: inline-block;
    justify-content: center;
}

@jblossomweb
Copy link

@paaljoachim yes I saw that, thanks for the idea!

this is for the back-end, in the context of a custom block.
so I wrote a hook, where I just selected the child block and its attributes out of Redux.
then ran the width through this to apply a dynamic modular class styles.innerBlocks on render:

const styles = {
	innerBlocks: width => css`
		.block-editor-inner-blocks figure,
		.block-editor-inner-blocks figure > figcaption {
			width: ${width}px;
		}
	`,
};

and that worked for my needs, in case it helps anyone. (using emotion, but styled-components, etc. would be similar)
I think I am ok with the level of DOM element coupling here for now. it's not too bad.

cheers! 🍻

@glendaviesnz
Copy link
Contributor Author

@andrewserong I finally got back to this! I have just pushed a change which seems to fix the issue you identified with the placeholder and non-resized image sizing.

@andrewserong
Copy link
Contributor

Nice one, thanks @glendaviesnz! That's a clever idea using separate linenames to handle the different behaviour. It's testing well for me at a quick glance, but I'll do some more in depth testing later on today 👍

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 @glendaviesnz, this is testing well for me in Chrome, Firefox and Edge on macOS. I noticed some odd behaviour in Safari that I've been able to replicate on trunk (so it doesn't appear to be affected by this PR, but would be good for us look into separately). In Safari, resizing the image block works okay for me at first, but if I switch alignment on the image block (between no alignment and an alignment or vice-versa), I'm then unable to access the resizer controls:

Kapture 2021-12-07 at 14 54 06

Are you able to replicate that?

Other than that, the only blocker I've run into is that the current e2e test failure for the Image block appears to be caused by this PR, but I'm not sure why. In the test 'should replace, reset size, and keep selection', in the final step, the image block is selected via the .wp-block-image class, and then the Backspace key is pressed to delete the image. This works on trunk, but in testing locally with the following command, it looks like the caret at that stage of the test is within the image caption, so backspace doesn't delete the whole block:

PUPPETEER_HEADLESS="false" npm run test-e2e specs/editor/blocks/image.test.js

I've been unable to replicate getting the caret stuck in the caption while walking through the testing steps manually, so I'm not too sure why the CSS change here would affect it? 🤔
Let me know if you can't replicate the failed e2e test locally, and I can investigate further.

@glendaviesnz
Copy link
Contributor Author

the only blocker I've run into is that the current e2e test failure for the Image block appears to be caused by this PR

@andrewserong this is weird, I can't replicate that issue in a browser manually as clicking on the block wrapper div never give the figcaption focus for me - but does every time in that test. I can't see how that css change could have caused this and the only way I could fix the test was by clicking on the image wrapper div instead. Not 100% happy with fixing it this way, but a bit stumped on alternatives.

@glendaviesnz
Copy link
Contributor Author

I noticed some odd behaviour in Safari that I've been able to replicate on trunk (so it doesn't appear to be affected by this PR, but would be good for us look into separately)

I could replicate this on trunk on Safari - do you want to add an issue for that @andrewserong ?

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.

I could replicate this on trunk on Safari - do you want to add an issue for that @andrewserong ?

Sure thing! Thanks for confirming, I'll open up an issue.

I can't see how that css change could have caused this and the only way I could fix the test was by clicking on the image wrapper div instead.

Me either, it doesn't seem like a bad way to handle it necessarily, but it is confusing why it'd change the behaviour. On its own, I think that change to the e2e test is probably fine — after all, users select the image visually, not by classname 😀

Unfortunately, I ran into another issue re-testing this (sorry I didn't catch it yesterday!) If I upload an image that has a natural size that is less than the width of the current container, then with this PR applied, the resizable box container fills the full width of the container, rather than being constrained to the width of the image (when the image has not yet been resized). It results in the image being stretched during the initial resize:

Kapture 2021-12-08 at 10 51 34

Could this be due to the resizable box container having grid-column of auto which fills the container rather than being limited to the image width? I couldn't quite work out how to fix it without re-introducing other styling issues 🤔

@andrewserong
Copy link
Contributor

I'll open up an issue.

Turns out there was already and issue for it so I've added my GIF to #24587

@glendaviesnz
Copy link
Contributor Author

Unfortunately, I ran into another issue re-testing this (sorry I didn't catch it yesterday!) If I upload an image that has a natural size that is less than the width of the current container, then with this PR applied

Nice catch @andrewserong - I have pushed another change which appears to make it behave correctly in both instances.

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 @glendaviesnz, that improves things, and we're getting closer! There's another couple of issues that I can see now:

The image placeholder doesn't extend to the full width of the container:

image

In Safari (but seemingly only in Safari), if I switch an Image block from having an alignment to having no alignment it effectively disappears:

Kapture 2021-12-08 at 14 05 03

I think this is because of the issue where in Safari in that context the div that's a child of the figure element doesn't get the classname .components-resizable-box__container assigned to it:

I'm dealing with a fix for the presence of the classname there (showing the resizer) in #37210, but in the shorter term for this PR, I wonder if we can target it via .wp-block-image > div — though, we'd likely need to account for it being not the .components-placeholder class 🤔

@paaljoachim paaljoachim added the [Type] Bug An existing feature does not function as intended label Dec 8, 2021
@paaljoachim paaljoachim added 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 Dec 8, 2021
@paaljoachim
Copy link
Contributor

I went ahead and added the bug and backtrack labels here, as I assume we might be able to add this to the next Beta of WordPress 5.9. @noisysocks

@jblossomweb
Copy link

we'd likely need to account for it being not the .components-placeholder class 🤔

@andrewserong not sure if relevant, but in case this helps:

https://developer.mozilla.org/en-US/docs/Web/CSS/:not

@glendaviesnz
Copy link
Contributor Author

@andrewserong I have pushed another change and it seems to work for placeholder, image with no size set and fixed size image, and in Safari - 🤞

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.

Great work @glendaviesnz, I think that's done the trick!

The issue of the disappearing image when switching alignments in Safari is no longer present, and the placeholder state looks correct, and I also tested it within a columns block, too 👍

I've re-tested in Safari, Chrome, Firefox, and Edge on macOS. I haven't been able to fault it (aside from the image resizer controls visibility in Safari which will be fixed in #37210).

The final thing to deal with now, I think, is that the Cover block e2e test appears to be failing because of this fix (where it attempts to convert an Image block to a Cover block). From running the following test manually, I think it's that the corrected position of the caption input field trips up how the test is written.

For example, here's how the Image block looks within the editor with a tiny image on trunk:

image

And here's how a tiny image looks while running the e2e test — note that the rich text controls for the caption field obscure the button to convert the image to a cover block:

image

The good news is that I don't think we need to adjust the CSS any further — the behaviour looks correct to me, but I think we might need an update to that e2e test, perhaps a similar fix to the Image block e2e test?

Here's what I'm running from the command line to observe the test run:

PUPPETEER_HEADLESS="false" npm run test-e2e specs/editor/blocks/cover.test.js

@glendaviesnz
Copy link
Contributor Author

The final thing to deal with now, I think, is that the Cover block e2e test appears to be failing because of this fix

Thanks @andrewserong - I have pushed a fix for this.

@glendaviesnz glendaviesnz changed the title Image block: Set image display to table when no explicit alignment set to properly align caption on resize Image block: Set image display to grid to properly align caption on resize Dec 9, 2021
@glendaviesnz glendaviesnz changed the title Image block: Set image display to grid to properly align caption on resize Image block: Set image display to grid when no alignment sent to properly align caption on resize Dec 9, 2021
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.

I have pushed a fix for this.

Thanks, Glen! E2E tests are passing now, and it's been testing well for me, so giving it the ✅. LGTM! 🎉

@glendaviesnz glendaviesnz merged commit d718629 into trunk Dec 9, 2021
@glendaviesnz glendaviesnz deleted the fix/image-caption-align branch December 9, 2021 19:55
@github-actions github-actions bot added this to the Gutenberg 12.2 milestone Dec 9, 2021
@noisysocks noisysocks 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 Dec 13, 2021
noisysocks pushed a commit that referenced this pull request Dec 13, 2021
…rly align caption on resize (#35787)

Co-authored-by: Glen Davies <[email protected]>
@youknowriad
Copy link
Contributor

Hey folks, I'm considering reverting this PR, it only impacts the editor which makes the style inconsistent with the frontend. If we ever want to change the behavior of resized images like done here, we should do it for both frontend and editor. See #38613

@andrewserong
Copy link
Contributor

Thanks for the heads-up @youknowriad! That makes sense, the fix in this PR was to work around the inconsistency in the editor, and given that the other PR is moving in the direction of further removing the differences between the editor and front-end that sounds reasonable to me. I suppose a challenge with the image resizer is that there'll always be some difference between the editor and frontend DOM due to the injected inserter controls, but hopefully we can come up with a way to work around that without overall changing how the image block and caption are rendered? 🤔

@youknowriad
Copy link
Contributor

but hopefully we can come up with a way to work around that without overall changing how the image block and caption are rendered

I'd love to know if there's still an inconsistency in the editor compared to frontend. I do see that there's still an extra div due to the resized (which might be hard to get rid of) but I wasn't able to have different behaviors in terms of captions between frontend and backend (testing with empty theme without any theme styles that can mess things up)

@andrewserong
Copy link
Contributor

I just re-tested the image caption position while adjusting the image resizer in a few different blocks-based and classic themes, and it looks like the issue is resolved as of #38613 landing in trunk, so I think we're good here! Thanks so much again for the work in that PR, this looks a better situation all around 😀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Image Affects the Image Block [Type] Bug An existing feature does not function as intended
Projects
None yet
6 participants