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 padding support to Group block #24966

Merged
merged 2 commits into from Sep 3, 2020
Merged

Add padding support to Group block #24966

merged 2 commits into from Sep 3, 2020

Conversation

youknowriad
Copy link
Contributor

closes #14747

This PR adds padding support to the Group block similar to how we do it for the Cover block.

Testing instructions

  • Enable the custom spacing support for your theme add_theme_support( 'experimental-custom-spacing' )
  • Play with the padding control for the gorup block.

@youknowriad youknowriad added [Feature] Blocks Overall functionality of blocks [Block] Group Affects the Group Block [Feature] Themes Questions or issues with incorporating or styling blocks in a theme. [Type] Experimental Experimental feature or API. labels Sep 1, 2020
@youknowriad youknowriad self-assigned this Sep 1, 2020

.block-editor-block-list__layout > .wp-block:last-child {
margin-bottom: 0;
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@jasmussen The idea here is that since we're defining the base margin above, we need to reset these margins for the first and last block of each container block.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Without this, the padding is not applied properly in the group block (you'll notice an extra space on tthe editor)

Copy link
Contributor

Choose a reason for hiding this comment

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

As can be seen in #24966 (comment), this isn't working for me. I have the following in my editor style:

figure,
p {
	margin-top: 2.5rem;
	margin-bottom: 2.5rem;
}

I'm still sort of worried about this being an awfully specific style rule that could have consequences we can't imagine. I don't have a strong opinion, insofar as I appreciate you trying to handle this so I wouldn't have to manually go to the last paragraph and specify a zero margin. I suppose we can try it, and remove it if it has side effects.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm afraid this had unintended consequences.

appender

The above happens because every nesting container has a last child that's the appender:

Screenshot 2020-09-22 at 09 36 51

Unless, apparently, an adjacent block has been selected:

Screenshot 2020-09-22 at 09 37 00

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 guess that's because the appender div is the "last child" so the margin reset is not applied. I wonder why this empty div is rendered and whether we can remove it.

Copy link
Contributor

Choose a reason for hiding this comment

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

In this PR, I remove the rules: #25527 — I honestly think it's for the best.

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'll take a look but I think there's still value in the rules. So I'd like to see if we can find a better solution.

<BoxControlVisualizer
values={ attributes.style?.spacing?.padding }
showValues={ attributes.style?.visualizers?.padding }
/>
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 think this can probably be absorbed by the hook and added automatically somehow. cc @ItsJonQ

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@ItsJonQ I'm not familiar with the attribute shape yet, can you clarify a bit what visualizers contain here?

Copy link
Member

Choose a reason for hiding this comment

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

It'd be nice if it would be absorbed by the hook, otherwise we need to be more careful with any updates to BoxControlVisualizer. Also from its name, it feels like it shouldn't be a public API.

Choose a reason for hiding this comment

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

@youknowriad Sure! I can expand on this a bit. The visualizers need to show in 2 ways:

  1. On value change (they flash) (via the values prop)
  2. On hover (they persist) (via the showValues prop, which are boolean values)

Right now, state for showValues object is being communicated from the controls (in the sidebar) to the canvas via updating the style attribute.

It works, but I'd prefer a more streamlined way of coordinating this state - Ideally without using the data store and relying on a context + Provider wrapper.

Hope this helps!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I'm a bit concerned about the use of an attribute for that state since it's not a persistent state.
I wonder if we could just rely on local state if we move the rendering of the BoxControlVisualizer to the hook. Not sure thought.

@@ -3,9 +3,6 @@
*/

.wp-block-group {
// Zero out the baseline margin that is set for every block in the editor.
margin-top: 0;
margin-bottom: 0;
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 think this is not needed with my change here https://github.com/WordPress/gutenberg/pull/24966/files#r481034215

@github-actions
Copy link

github-actions bot commented Sep 1, 2020

Size Change: +4.24 kB (0%)

Total Size: 1.17 MB

Filename Size Change
build/api-fetch/index.js 3.41 kB -34 B (0%)
build/block-editor/index.js 128 kB +1.69 kB (1%)
build/block-editor/style-rtl.css 10.8 kB +47 B (0%)
build/block-editor/style.css 10.8 kB +45 B (0%)
build/block-library/editor-rtl.css 8.57 kB +20 B (0%)
build/block-library/editor.css 8.57 kB +19 B (0%)
build/block-library/index.js 137 kB +267 B (0%)
build/components/index.js 200 kB +37 B (0%)
build/components/style-rtl.css 15.5 kB +5 B (0%)
build/components/style.css 15.5 kB +7 B (0%)
build/edit-navigation/index.js 11.7 kB +13 B (0%)
build/edit-post/index.js 305 kB +600 B (0%)
build/edit-post/style-rtl.css 6.26 kB +645 B (10%) ⚠️
build/edit-post/style.css 6.24 kB +637 B (10%) ⚠️
build/edit-site/index.js 17 kB +51 B (0%)
build/edit-widgets/index.js 12 kB +61 B (0%)
build/editor/index.js 45.4 kB +125 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.67 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 7.99 kB 0 B
build/block-directory/style-rtl.css 953 B 0 B
build/block-directory/style.css 952 B 0 B
build/block-library/style-rtl.css 7.47 kB 0 B
build/block-library/style.css 7.47 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 742 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 47.7 kB 0 B
build/compose/index.js 9.67 kB 0 B
build/core-data/index.js 12.3 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.55 kB 0 B
build/date/index.js 5.38 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.48 kB 0 B
build/edit-navigation/style-rtl.css 1.16 kB 0 B
build/edit-navigation/style.css 1.16 kB 0 B
build/edit-site/style-rtl.css 3.06 kB 0 B
build/edit-site/style.css 3.06 kB 0 B
build/edit-widgets/style-rtl.css 2.46 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/editor/style-rtl.css 3.81 kB 0 B
build/editor/style.css 3.81 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.71 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.32 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.41 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 13.9 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@jasmussen
Copy link
Contributor

Nice work. This is what I see:

group

Note that I'm applying a big padding by default on any group that has a background, in the theme shown here. But the padding correctly overrides that, including on the frontend.

I'm seeing an error when customizing just one of the padding sides:

error

... but I'm seeing that also in Cover:

Screenshot 2020-09-01 at 12 37 49

@youknowriad
Copy link
Contributor Author

Yes, got the same error @jasmussen I'll have to investigate this one separately.

@youknowriad
Copy link
Contributor Author

I opened this separately to fix the unlinked padding values issues #25000

@ItsJonQ
Copy link

Hmm! I see the error as well. Taking a look at this 🤔

@ItsJonQ
Copy link

ItsJonQ commented Sep 2, 2020

Update: It looks like there's something with the Tooltip that's making things unhappy:
https://github.com/WordPress/gutenberg/blob/master/packages/components/src/box-control/unit-control.js#L33

It works for me once I wrap the content in a div:

function Tooltip( { children, text } ) {
	if ( ! text ) return children;

	return (
		<BaseTooltip text={ text } position="top">
			<div>{ children }</div> {/* here */}
		</BaseTooltip>
	);
}

I'm not sure if anything changed 🤔 . My only guess is that something is happening with Tooltip's handling of children or ref?

@youknowriad
Copy link
Contributor Author

Are we ok shipping this as is?

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 [Feature] Blocks Overall functionality of blocks [Feature] Themes Questions or issues with incorporating or styling blocks in a theme. [Type] Experimental Experimental feature or API.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Group Block: add ability to alter padding values
4 participants