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

Column: Add border support to column blocks #39967

Merged
merged 5 commits into from
Apr 18, 2022

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Apr 1, 2022

Fixes: #21889

Related:

What?

Opts into border support for individual column blocks.

Why?

To achieve block patterns and designs where columns use borders as visual separators.

How?

Leverages the new BorderBoxControl and individual border side block supports to offer control over inner Column block borders.

Questions

  1. Do individual columns benefit at all from offering border-radius support?
  2. Does the lack of responsive styling options for block supports block the addition of border support for column blocks?
  3. Would forcing the overriding of border support provided inner column styles be too restrictive? Given the inline styles in play this would require the use of !important

Testing Instructions

  1. Checkout this PR branch, create a new post, add Columns and some inner Column blocks with content
  2. Experiment setting borders on the inner Column blocks
    • It may help to remove block spacing for the columns and add padding so that the borders are evenly between columns. (This might be another point of friction for Column borders)
  3. Test with and without the Columns block stacking on mobile
  4. Check frontend/editor both on desktop and mobile viewports
Example columns code
<!-- wp:columns {"style":{"spacing":{"padding":{"top":"10px","right":"10px","bottom":"10px","left":"10px"},"blockGap":"0px"}}} -->
<div class="wp-block-columns" style="padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px"><!-- wp:column {"style":{"spacing":{"padding":{"top":"10px","right":"10px","bottom":"10px","left":"10px"}}}} -->
<div class="wp-block-column" style="padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px"><!-- wp:image {"id":193,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="http://localhost:4759/wp-content/uploads/2022/03/jorge-gardner-xwJgnoopjjg-unsplash.jpg" alt="" class="wp-image-193"/><figcaption>Image in column 1</figcaption></figure>
<!-- /wp:image --></div>
<!-- /wp:column -->

<!-- wp:column {"style":{"spacing":{"padding":{"top":"10px","right":"10px","bottom":"10px","left":"10px"}}}} -->
<div class="wp-block-column" style="padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px"><!-- wp:paragraph {"align":"left"} -->
<p class="has-text-align-left">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->

<!-- wp:column {"style":{"spacing":{"padding":{"top":"10px","right":"10px","bottom":"10px","left":"10px"}}}} -->
<div class="wp-block-column" style="padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px"><!-- wp:paragraph {"align":"left"} -->
<p class="has-text-align-left">Duis aute irure dolor in reprehenderit in voluptate</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->

Screenshots or screencast

Demo
Screen.Recording.2022-04-01.at.3.27.32.pm.mp4
Responsive Styling Issue

Example of behaviour without forcing borders on mobile to be hidden

Screen.Recording.2022-04-01.at.3.29.59.pm.mp4

@aaronrobertshaw aaronrobertshaw added [Block] Columns Affects the Columns Block [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Apr 1, 2022
@aaronrobertshaw aaronrobertshaw self-assigned this Apr 1, 2022
@aaronrobertshaw
Copy link
Contributor Author

@jasmussen if you have a few moments to take a look at this, it would be great to get your thoughts before heading too far in any given direction.

In particular I have a few questions you might be able to answer.

  1. Do individual columns benefit at all from offering border-radius support?
  2. Does the lack of responsive styling options for block supports block the addition of border support for column blocks?
    -This PR currently has some trial CSS styles to force 0 width border when stacked on mobile.
  3. Would forcing the overriding of border support provided inner column styles be too restrictive? Given the inline styles in play this would require the use of !important

@aaronrobertshaw aaronrobertshaw changed the title Add/border support to column blocks Column: Add border support to column blocks Apr 1, 2022
@aaronrobertshaw aaronrobertshaw mentioned this pull request Apr 1, 2022
7 tasks
@github-actions
Copy link

github-actions bot commented Apr 1, 2022

Size Change: +325 B (0%)

Total Size: 1.22 MB

Filename Size Change
build/block-editor/index.min.js 149 kB +26 B (0%)
build/block-library/blocks/columns/style-rtl.css 485 B +79 B (+19%) ⚠️
build/block-library/blocks/columns/style.css 480 B +74 B (+18%) ⚠️
build/block-library/index.min.js 173 kB -1 B (0%)
build/block-library/style-rtl.css 11.5 kB +73 B (+1%)
build/block-library/style.css 11.6 kB +69 B (+1%)
build/edit-site/index.min.js 46.7 kB +5 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 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/style-rtl.css 15.6 kB
build/block-editor/style.css 15.6 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 150 B
build/block-library/blocks/audio/editor.css 150 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/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 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 445 B
build/block-library/blocks/button/editor.css 445 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 292 B
build/block-library/blocks/buttons/editor.css 292 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 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 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/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 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.56 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 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 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 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 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 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 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 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 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 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 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 708 B
build/block-library/blocks/navigation-link/editor.css 706 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 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.93 kB
build/block-library/blocks/navigation/style.css 1.92 kB
build/block-library/blocks/navigation/view.min.js 2.85 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 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 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 323 B
build/block-library/blocks/post-template/style.css 323 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 370 B
build/block-library/blocks/pullquote/style.css 370 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 234 B
build/block-library/blocks/query-pagination/style.css 231 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 201 B
build/block-library/blocks/quote/style.css 201 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/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 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 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 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 615 B
build/block-library/blocks/table/style.css 614 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 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 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 571 B
build/block-library/blocks/video/editor.css 572 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 1 kB
build/block-library/common.css 1 kB
build/block-library/editor-rtl.css 9.96 kB
build/block-library/editor.css 9.96 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 47 kB
build/components/index.min.js 223 kB
build/components/style-rtl.css 14.9 kB
build/components/style.css 14.9 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.5 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.61 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.58 kB
build/edit-navigation/index.min.js 15.8 kB
build/edit-navigation/style-rtl.css 4.04 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.07 kB
build/edit-post/style.css 7.07 kB
build/edit-site/style-rtl.css 7.96 kB
build/edit-site/style.css 7.94 kB
build/edit-widgets/index.min.js 16.3 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 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.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 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.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 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.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.2 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@jasmussen
Copy link
Contributor

Hey, thanks for the ping. Took this for a spin, trying toth the all-sides border controls and the left/right individual side controls:
columns

First off, impressive work, and this does unlock some fun things. Nice work.

On the one hand:

  • The initial ticket provides some compelling arguments for why we should be liberal in the application of border controls, especially now that they can be unlinked.
  • The reduced footprint of the new border control makes it less prominent in the inspector, which is good.

On the other hand, the way the columns block is built doesn't lend itself well to how borders behave in responsive situations, as you flag yourself. As in the example you share, with vertical separators between columns, you'd likely expect those to shift orientation when collapsing to a single column, rather than being right of the first row and left of the last row. Especially considering the high level goal of having most responsiveness work out of the box (#34641), you can definitely get into situations where things behave in a way that you weren't expecting.

But does that mean we don't add border support just because you can get in trouble? I don't know, because you could get yourself into that very same situation today with the Row block by adding group blocks inside:
Screenshot 2022-04-01 at 09 02 43

So maybe it's fine? To an extent, the fact that the Group block supports borders, could mean both Columns and Column blocks support it too.

About border radius, the biggest issue is that it doesn't affect content inside, only the box itself. So if you apply a large radius you might assume it crops content inside. We could potentially explore a separate "Clip content" toggle (which would apply overflow: hidden;) to address that. But since this is an existing issue, it shouldn't affect radius presence here.

But your point about the separators is still valid — but maybe that needs a different solution? Notably something like this would be nice to accomplish:

The only way I can think of to accomplish the above would be blue site background, white columns background, and blue column backgrounds, and using a combination of columns padding and spacing to control the border width. Not ideal, but I can't think of a way to get borders to overlap in a flex situation:

Screenshot 2022-04-01 at 09 06 26

@kjellr do you have time for a quick look? Would column border controls be useful?

@paaljoachim
Copy link
Contributor

paaljoachim commented Apr 1, 2022

Testing.

This is impressive!
I really like the simple way of adding a border. If I want an individual border on only one side I click the chain icon and it opens a good visual showing all 4 sides. This is very cool and very helpful!

Screenshot 2022-04-01 at 09 53 19

I assume that later on we will see similar controls in the Radius option. Seeing the corners curve etc.

Screenshot 2022-04-01 at 09 55 01

+Something similar for Padding and margins controls.

I look forward to seeing the individual column borders featured included! It makes styling columns so much more powerful and flexible! Thank you!

@carolinan
Copy link
Contributor

Yes, borders for columns are useful.
I expect the borders to be visible on all screen sizes. I don't think this can be handled better until there are different options for different screen sizes.

@jasmussen
Copy link
Contributor

Seems fine to try and land this one.

@kjellr
Copy link
Contributor

kjellr commented Apr 4, 2022

On the other hand, the way the columns block is built doesn't lend itself well to how borders behave in responsive situations, as you flag yourself. As in the example you share, with vertical separators between columns, you'd likely expect those to shift orientation when collapsing to a single column, rather than being right of the first row and left of the last row. Especially considering the high level goal of having most responsiveness work out of the box (#34641), you can definitely get into situations where things behave in a way that you weren't expecting.

Is there something we can do automatically here in combination with the "stack on mobile" control? Maybe if that's set to true, we automatically hide left/right borders if they're the only border set for the column? Might get too opinionated. 🤔

@aaronrobertshaw
Copy link
Contributor Author

Thanks for taking the time to give this a run @jasmussen 👍

you'd likely expect those to shift orientation when collapsing to a single column

I'm not quite sure how we'd achieve that. I could imagine something like setting some CSS vars from the supplied border values and then some additional CSS to effect the desired switch in orientation. There've been issues adding CSS vars inline previously so we might not make it far down that road. There'd probably be some RTL issues to finesse as well.

I also share the same concerns as @kjellr here in that things could get very opinionated. Is simply hiding all Column (not Columns) borders if "stack on mobile" is enabled, as this PR does now, a satisfactory first step?

So maybe it's fine? To an extent, the fact that the Group block supports borders, could mean both Columns and Column blocks support it too.

I'm inclined to think the positives and value added by this feature outweigh the concerns at the moment. Particularly if by default on mobile there is no difference to what is achievable now (no individual column borders, or the unresponsive ones added by wrapping contents in group blocks).

We could potentially explore a separate "Clip content" toggle (which would apply overflow: hidden;) to address that

Perhaps we can leave out the border-radius support on individual columns until there is a proven demand for it or we have a means of enabling the clipping of content. I'd be happy to move that into a separate PR to discuss further.

For the designs above there are two open PRs that I believe would help here. The first makes vertically positioned columns stretch to the full height of the Columns block and the other adds borders to images. With both of those the above designs are likely achievable. At least it appears that way after a quick test run tonight.

I don't think we are too far off here for non-mobile viewports. The individual side border controls give us quite a bit of flexibility to achieve these kinds of designs.

Screen.Recording.2022-04-06.at.7.31.51.pm.mp4

Ignoring the responsive styling of borders the biggest challenge for me was getting the vertical spacing within columns right. Having a space-between justification for the Stack block would be great (it might already be available and I just missed it).

@aaronrobertshaw
Copy link
Contributor Author

Is there something we can do automatically here in combination with the "stack on mobile" control? Maybe if that's set to true, we automatically hide left/right borders if they're the only border set for the column? Might get too opinionated. 🤔

As noted above, this PR hides the individual column borders with the "stack on mobile" option enabled. At the moment, it's an all or nothing proposition. We could tweak that to where it is only left and right borders that get hidden.

@kjellr
Copy link
Contributor

kjellr commented Apr 6, 2022

We could tweak that to where it is only left and right borders that get hidden.

Let's give this a try and see how it feels. 👍

@aaronrobertshaw
Copy link
Contributor Author

We could tweak that to where it is only left and right borders that get hidden.

Let's give this a try and see how it feels. 👍

I've explored a few options today but none felt any more intuitive than simply hiding left and right borders.

In its current state this PR hides Column left and right borders when:

  • the parent Columns block enables the "Stacked on mobile" option, and
  • the left and right borders are applied individually e.g. via border-left-* or border-right-* longhand properties.

The above allows columns that have a complete consistent border to continue to be shown on mobile. There is also still the edge case with not being able to collapse borders given the flex layout.

Screen.Recording.2022-04-07.at.2.07.59.pm.mp4

@jasmussen
Copy link
Contributor

From the video above (thank you for providing), I wonder if it isn't better to start without those border handling changes. There are possibly cases where you want those borders to be visible on mobile, and where it feels confusing to not see them even if the inspector suggests they should be there. I think the general idea is good, but perhaps it's best to start without and see if we can go from there.

@aaronrobertshaw
Copy link
Contributor Author

I've removed the responsive styles that hide the borders as well as the border radius support. We can add either of these back in via follow-ups.

@jasmussen
Copy link
Contributor

Cool. Let's land this: group already supports this, and with the reduced footprint of the control, this one is able to carry it as well.

@aaronrobertshaw
Copy link
Contributor Author

Thanks for working through this one @jasmussen 👍

I'll merge it once #37770 lands.

@ndiego
Copy link
Member

ndiego commented Apr 7, 2022

Just tested and works well. I like that the responsive styles to hide the borders were removed. I feel the following will be a common layout that would break on mobile if borders were automatically hidden. I would love to see radius control in the future though 😉

image

@aaronrobertshaw
Copy link
Contributor Author

Just tested and works well.

Thanks for giving this a test @ndiego 👍

I like that the responsive styles to hide the borders were removed. I feel the following will be a common layout that would break on mobile if borders were automatically hidden. I would love to see radius control in the future though 😉

For the record, the layout in your screenshot would not have been broken by the responsive styles that were removed.

Each of the columns shown has a uniform flat border. The responsive styles I removed only affected individually configured borders i.e. non-uniform borders, so borders that were applied via border-left-*, border-right-* etc.

Base automatically changed from try/individual-border-support to trunk April 14, 2022 04:30
Copy link
Member

@ramonjd ramonjd 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 testing really well for me.

Screen Shot 2022-04-19 at 8 16 54 am

✅ Border colors/style/width work for Columns and Column blocks in the Post editor and frontend. Radius for Columns.
✅ Global styles and site editor show borders as expected.

Screen Shot 2022-04-19 at 8 29 51 am

And with stacking

Screen Shot 2022-04-19 at 8 35 09 am

This will open up a lot of design potential far beyond the screenshots I've added 🤣

Thank you!

@aaronrobertshaw aaronrobertshaw merged commit 97c2652 into trunk Apr 18, 2022
@aaronrobertshaw aaronrobertshaw deleted the add/border-support-to-column-blocks branch April 18, 2022 23:49
@github-actions github-actions bot added this to the Gutenberg 13.1 milestone Apr 18, 2022
@MadtownLems
Copy link

Unless I'm mistaken, it looks like this only adds Radius support for ColumnS and not an individual Column. I'm trying to understand why that decision was made, because I'd love to be able to easily create designs like this by setting background colors and border radii for columns. (Putting a Group block in the column and rounding corners there doesn't work because that does not guarantee the groups all have the same height)
rounded-corner-columns

@aaronrobertshaw
Copy link
Contributor Author

Hi @MadtownLems 👋

You are correct, this PR only added border color, style, and width support to the Column block. Nothing was changed for the parent Columns block itself.

I'm trying to understand why that decision was made

During the review of this PR, there was a small issue raised around border-radius not affecting content inside the column and the possible need to allow clipping column content. The opt-in to border radius support was removed from this PR so that it can be explored separately and proper discussion take place around clipping content, any introduction of new sidebar controls, where that might best be placed (at the Column or Columns level?) etc.

Here's the description of the issue from the earlier review:

About border radius, the biggest issue is that it doesn't affect content inside, only the box itself. So if you apply a large radius you might assume it crops content inside. We could potentially explore a separate "Clip content" toggle (which would apply overflow: hidden;) to address that. But since this is an existing issue, it shouldn't affect radius presence here.

Here's where I suggested removing it in favour of a separate exploration:

Perhaps we can leave out the border-radius support on individual columns until there is a proven demand for it or we have a means of enabling the clipping of content. I'd be happy to move that into a separate PR to discuss further.

The design you've highlighted is definitely something we wish to facilitate. We just need to work through the above concern before shipping it.

I hope that helps explain the decision and maybe makes the wait for border radius on Column blocks a touch easier.

Thanks for the feedback 👍

@DeoThemes
Copy link

Is there any date when this will be merged into a core?

@andrewserong
Copy link
Contributor

@DeoThemes I believe this change didn't make it in time to land in WordPress 6.0 as it depended on the new border control component which needed a little more time (more discussion over in #37770 (comment)), but will land as part of 6.1. I don't believe a date has been announced yet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Columns Affects the Columns Block [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi Needs User Documentation Needs new user documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Columns Block: Allow for border options