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

Increase font-size selector specificity #22671

Closed
wants to merge 1 commit into from
Closed

Conversation

oandregal
Copy link
Member

@oandregal oandregal commented May 27, 2020

This PR is a follow-up to this conversation.

While adding the editor styles wrapper to the preset colors we discussed why we used the :root pseudo-class there while we didn't for font-sizes. It looks like the :root for colors was added to cover for hover/focus statuses (PR, conversation).

The question is: is there a similar need for font-sizes? Is this PR useful?

cc @kjellr @jasmussen

@github-actions
Copy link

Size Change: +4 B (0%)

Total Size: 1.12 MB

Filename Size Change
build/block-library/style-rtl.css 7.48 kB +2 B (0%)
build/block-library/style.css 7.48 kB +2 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.48 kB 0 B
build/block-directory/style-rtl.css 788 B 0 B
build/block-directory/style.css 788 B 0 B
build/block-editor/index.js 105 kB 0 B
build/block-editor/style-rtl.css 11 kB 0 B
build/block-editor/style.css 11 kB 0 B
build/block-library/editor-rtl.css 7.2 kB 0 B
build/block-library/editor.css 7.2 kB 0 B
build/block-library/index.js 119 kB 0 B
build/block-library/theme-rtl.css 684 B 0 B
build/block-library/theme.css 686 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 48.1 kB 0 B
build/components/index.js 190 kB 0 B
build/components/style-rtl.css 17.1 kB 0 B
build/components/style.css 17.1 kB 0 B
build/compose/index.js 9.31 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.42 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 771 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.11 kB 0 B
build/edit-navigation/index.js 6.62 kB 0 B
build/edit-navigation/style-rtl.css 857 B 0 B
build/edit-navigation/style.css 856 B 0 B
build/edit-post/index.js 302 kB 0 B
build/edit-post/style-rtl.css 12.2 kB 0 B
build/edit-post/style.css 12.2 kB 0 B
build/edit-site/index.js 14 kB 0 B
build/edit-site/style-rtl.css 5.52 kB 0 B
build/edit-site/style.css 5.53 kB 0 B
build/edit-widgets/index.js 8.05 kB 0 B
build/edit-widgets/style-rtl.css 4.59 kB 0 B
build/edit-widgets/style.css 4.59 kB 0 B
build/editor/editor-styles-rtl.css 425 B 0 B
build/editor/editor-styles.css 428 B 0 B
build/editor/index.js 44.6 kB 0 B
build/editor/style-rtl.css 5.06 kB 0 B
build/editor/style.css 5.06 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 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.51 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 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.29 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 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 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 14.8 kB 0 B
build/server-side-render/index.js 2.68 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.02 kB 0 B
build/viewport/index.js 1.84 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

From what I can tell at a glance, this is nice, simple, and does not negatively affect themes as far as I can tell. So if it benefits the work you're doing, this seems okay. I'll keep thinking about this, and would love to also hear what Kjell thinks. but overall, 👍 👍

@kjellr
Copy link
Contributor

kjellr commented May 29, 2020

The added specificity here appears to break theme font sizes for Twenty Twenty. It also makes it tougher for themes to override these custom sizes — if their editor stylesheet declares something like .has-small-font-size (which is actually more common than the more specific styles that Twenty Twenty includes), this PR would override that by default.

Before After
Screen Shot 2020-05-29 at 2 01 59 PM Screen Shot 2020-05-29 at 1 59 45 PM

@jasmussen
Copy link
Contributor

Thanks for the insight, Kjell!

A meta-question is: what is the right path forward, and do editor styles need to change to accommodate the right path? This PR is part of the global styles efforts, and to some extent these efforts need to override some theme styles. As part of that, the theme itself will also get new tools to help adjust and accommodate these overrides. It may be a chicken and egg situation, where until global styles can be configured by the theme itself.

But it all has to be balanced against the breakage along the way, of course. I personally definitely prefer the :root selector over a wp-gs classname applied to the body, which is another opt-in method I know has been discussed. Do we need a theme opt-in to global styles that adds this :root prefix?

One other option is to leverage the fact that add_editor_style currently rewrites the CSS. Theoretically, though I don't think @youknowriad will like this, we could add the :root prefix to any font sizes defined by the theme.

Final question: would this conversation be different if the editor was in an iframe?

@oandregal
Copy link
Member Author

Thanks for the feedback!

For context, this PR was created to have this conversation and not because it was really necessary for any of the work we are doing for the Block Style System. Primarily, the conversation we had pivoted on why colors increase its selector specificity with :root but fonts don't?

It seems that increased specificity is necessary for colors & pseudo-classes (hover, visited, active statuses), which doesn't look like something fonts need in practice. I've looked at GitHub issues and I couldn't find any issue that would be resolved by this change. Although I like how the code becomes simpler, I wonder if that warrants a breaking change, so I'm inclined to close this PR as for now.

The situation Kjell mentions (themes using the same preset names that core so having specificity issues due to the enqueued classes) is something that should be resolved by a different approach: either conditionally enqueue core presets only if the theme doesn't provide any and/or by using theme.json (by managing the theme CSS we can do "smart things" easily without the theme author having to worry about this).

@jasmussen
Copy link
Contributor

Primarily, the conversation we had pivoted on why colors increase its selector specificity with :root but fonts don't?

Yes and I think that's an important point. I would love to see us, if possible, land on the same end result for both font sizes and colors. The inconsistency is likely to create confusion for future developers.

: either conditionally enqueue core presets only if the theme doesn't provide any and/or by using theme.json (by managing the theme CSS we can do "smart things" easily without the theme author having to worry about this).

This sounds good.

@kjellr
Copy link
Contributor

kjellr commented Jun 3, 2020

either conditionally enqueue core presets only if the theme doesn't provide any and/or by using theme.json (by managing the theme CSS we can do "smart things" easily without the theme author having to worry about this).

This sounds excellent to me.

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

With #25768 we are now automatically generating the preset classes. I guess we may discuss what specificity we should generate, but I think by default we should just use a simple class. Themes can always use custom CSS with higher specificity if needed.

Base automatically changed from master to trunk March 1, 2021 15:43
@jorgefilipecosta
Copy link
Member

Hi @nosolosw, given that now we are handling selectors with global styles I guess we can close this PR?

@oandregal
Copy link
Member Author

Right, let's clean this up and close, it wasn't a good fit anyway.

@oandregal oandregal closed this Apr 22, 2021
@oandregal oandregal deleted the add/root-font-sizes branch April 22, 2021 08:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants