Кнопки «text»

Почему у кнопок только с иконками есть этот текст ​?

Интересно, для чего он нужен, так как он сбивает мою стилизацию кнопок только с иконками :skull_and_crossbones:

Вы можете прочитать описание от pmusaraj, объясняющее причины, в этом PR:

Это добавляет единый размер для текстовых полей ввода, выпадающих списков и кнопок во всём приложении. Это важно, поскольку эти элементы часто используются вместе в формах, и наличие разных вычисленных высот вызывает множество проблем с макетом.

Связанный код:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/components/d-button.gjs#L215-L218

Похоже, есть более надёжный способ достичь того же эффекта без использования ZeroWidthSpace

Возможно, вы правы! Это PR от 2021 года. В 2024 году и позже может существовать современный способ обеспечения согласованности.

Да, мы уже рассматривали этот вопрос (и, вероятно, вернёмся к нему), но, к сожалению, даже такое простое решение, как добавление min-height ко всем кнопкам, внесёт слишком много изменений в существующие темы.

Почему минимальная высота? Не могли бы кнопки иметь базовые отступы и шрифт, включая межстрочный интервал, соответствующие размеру выпадающих списков и полей ввода?

Я думаю, что мы движемся к состоянию, где всё будет более стандартизировано, и это станет возможным, но высота строки может варьироваться в зависимости от шрифта… поэтому любое решение по умолчанию может привести к несогласованным высотам, как только тема сменит шрифт.

Символ нулевой ширины пробела гарантирует, что даже при изменениях высоты строки и шрифта кнопки без текста будут вести себя аналогично кнопкам с текстом (иными словами, высота строки символа нулевой ширины влияет на высоту кнопки так же, как и у кнопок с текстом).

Разве использование единого шрифта для всех элементов не обеспечивает одинаковую высоту строки, тем самым исключая различия в высоте строк разных шрифтов?

Нет, потому что высота кнопок без текста не зависит от line-height, а у кнопок с текстом зависит, поэтому возникает несоответствие между кнопками с текстом и без него.

Может быть, высоту иконки не стоит привязывать к высоте строки шрифта? Я представляю себе функцию @function, которая принимает детали/токен шрифта и применяет высоту строки к высоте иконки.

Да. Единица измерения lh в CSS хорошо поддерживается в современных браузерах, поэтому применение текущего межстрочного интервала к элементу сейчас довольно просто.

Но, конечно, я не знаю о сложностях внесения изменений без нарушения работы существующих тем.