Как идентифицировать и редактировать/удалять элементы Ember?

Я очень новичок в CSS и подобных вещах, поэтому извините, если нижеизложенное покажется невероятно банальным и/или слишком пространным.

Мой вопрос: как можно идентифицировать и скрыть элементы «ember» с помощью CSS? Я предполагаю, что для этого используется свойство «display: none».

В качестве случайного примера: допустим, я хочу убрать кнопку закладки в нижней части тем. При просмотре элемента в консоли Chrome я вижу только CSS-стили для всех кнопок в подвале темы в целом, но не для конкретной кнопки. Поэтому, если я добавлю «display: none», это применится ко всем кнопкам, а не только к одной.

Результат применения «display: none» к тегу кнопки в CSS:

До:

Добавление «display: none».

После:

Я почти уверен, что скрыть только одну кнопку возможно, и этот метод применим и к другим элементам ember, большинство из которых сгруппированы аналогичным образом. Ранее мне удавалось удалять другие элементы ember (а именно кнопку выравнивания в панели инструментов редактора), но только с помощью других пользователей этого форума.

Однако, как найти конкретный CSS-тег, к которому можно применить «display: none»?

Ещё раз извините, если вопрос слишком прост или затянут.

Это можно сделать в ваших настройках администратора, и CSS не потребуется

админ > настройки > Базовая настройка > меню поста

2 лайка

Приношу извинения, если привёл неудачный пример, так как не знал, что у него есть опция вне CSS. Я просто выбрал случайный элемент Ember.

Думаю, лучшим примером будет страница пользователя. Дело в том, что я ищу способ определить, что можно поместить в CSS (аналогично цитируемому сообщению из ветки «MD Composer Extras», на которую я ссылался выше), чтобы гипотетически скрыть элемент Ember от отображения.

Более подходящий пример — боковая панель в разделе «Активность» профиля. Насколько мне известно, для этого нет специальной опции в настройках, и потребуется использование CSS.

Привет, @b481!

То, что вы ищете, называется «CSS-селектор» (или просто «селектор»). CSS-селекторы используются для «поиска» (или, очевидно, выбора) элемента DOM, который вы хотите стилизовать.

Например, прямо сейчас, пока я пишу это, я покажу, как найти селектор для вашего имени пользователя в композере (просто как пример).

Мы наводим курсор мыши на элемент (ваше имя пользователя b481 в композере), нажимаем правую кнопку мыши, и появляется меню с пунктом «Inspect» (Проверить).

Нажмите на «Inspect», и откроется консоль разработчика (сейчас я использую Chrome на macOS); и при удаче нужный нам элемент будет подсвечен.

Если вы нажмете правую кнопку мыши на подсвеченном элементе в консоли, вы увидите пункт меню «Copy → Copy selector» (Копировать → Копировать селектор).

Если вы выберете этот вариант и скопируете селектор, в данном примере вы получите:

#ember433 > span > a

Это не очень хороший селектор, так как #ember433 назначается фреймворком Ember, но вы можете перемещать мышь по элементам в консоли, и они будут подсвечиваться как на интересующей вас странице, так и в консоли. Хорошая новость в том, что мы уже близко к цели, быстро и легко.

Затем вы можете найти элемент, который хотите скрыть, и, в этом примере, снова нажать правую кнопку мыши на элементе (в данном примере) и выбрать из меню под курсором «add attribute» (добавить атрибут), чтобы протестировать наш селектор.

Я только что сделал это в качестве примера на этом скриншоте:

и теперь элемент с вашим id ‘b481’ скрыт в этой части DOM…

Итак, в данном случае мы знаем, что если использовать CSS:

span.action-title{
   display:none;
}

мы можем добавить это в нашу тему, и элемент будет скрыт.

В этом случае вам следует проверить, есть ли на странице более одного элемента с таким же селектором, а также убедиться, что выбранный вами селектор не будет слишком «жадным» и не выберет элементы на других страницах, которые вы не хотите скрывать.

Чем конкретнее селектор, тем лучше.

Например, в данном случае мы можем сделать его более конкретным, указав, что наш селектор является дочерним элементом родительского элемента, в данном случае (не проверено):

div.compose-action-title > span.action-title{
   display:none;
}

Как видите, мы становимся более конкретными; и на этом этапе у вас уже должно быть довольно четкое представление о том, как искать элементы, которые вы хотите изменить.

Удачной охоты!

Одно последнее замечание:

Вы можете использовать JavaScript и jQuery для выбора элементов, но я обнаружил, что в SPA-приложениях, таких как Discourse/Ember, CSS-селекторы работают хорошо, по крайней мере, для меня. Я обычно использую JavaScript-селекторы только тогда, когда нужно каким-то «хитрым» образом обходить DOM (что тоже может быть очень увлекательно).

Надеюсь, это поможет.

См. также:

4 лайка

Огромное спасибо @neounix. Попробую это чуть позже.

Я столкнулся с небольшой проблемой. При попытке удалить пример «bookmarks», который я привёл выше, у меня не получается сделать это, потому что номер ember, который к нему прикреплён, постоянно меняется.

Вот код, который я использовал, когда он был 52. Также пробовал без !important.

span.ember52.ember-view{
display:none !important;
}

Хорошее начало, но нужно доработать @b481.

Да, я уже упоминал об этом @b481: не следует выбирать селектор на основе классов и идентификаторов, назначаемых Ember.

Вам нужно использовать селектор, который не является классом, назначенным Ember. Я описал, как это сделать, в моём предыдущем ответе.

БОКОВАЯ КОЛОНКА: На всякий случай: вы не «удаляете» эти элементы из DOM таким способом (как вы упоминали выше), вы лишь «скрываете» их, но это тема для другого раза :slight_smile:

Пожалуйста, используйте селектор, который автоматически не назначается Ember.

Надеюсь, это поможет.


Примечание:

Если вы пытаетесь скрыть (в вашем примере) кнопку «Закладка» в нижней части темы, пробовали ли вы:

#topic-footer-button-bookmark
{
  display:none;
}

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

1 лайк

Чтобы скрыть один из этих разделов, просто выполните:

.user-secondary-navigation li:nth-child(3) {
  display: none;
}

Замените число на номер того раздела, который вы хотите скрыть.

Очевидно, это сработает только в том случае, если список предсказуем; в противном случае CSS не станет решением.

2 лайка

Мне потребовалось некоторое время, но я наконец-то разобрался в этом.

Спасибо @neounix, это было чрезвычайно полезно и станет большим подспорьем для моего форума.

2 лайка

Кто-нибудь знает, как удалить только опцию «Цитировать весь пост», не удаляя при этом ту, что слева? У них одинаковый CSS и один родительский div, поэтому я не нашёл способа избавиться от одной, не удалив другую.

Привет, @b481!

Вы можете использовать селектор [атрибут=значение]:

Справка:

https://www.w3schools.com/cssref/sel_attribute_value.asp

с атрибутом title и значением Blockquote (⌘⇧9)

Например (не проверено):

button[title="Blockquote (⌘⇧9)"]
{
  display:none;
}

Или, возможно:

button[title*="Blockquote"]
{
  display:none;
}

Я не тестировала это, так что, возможно, вам придётся немного подправить код.

Кроме того, ещё один «грубый» способ — просто скрыть только элемент svg:

svg.d-icon-quote-right
{
   display:none;
}

Есть и другие возможные CSS-селекторы, которые можно использовать. Уверена, что у других участников есть ещё более подходящие варианты.

Надеюсь, это немного поможет вам в решении задачи.

Также смотрите:

  1. CSS Attribute Selectors

  2. Ниже:

2 лайка