b481
1
我对 CSS 等知识还非常新手,如果下面的内容过于基础或啰嗦,请见谅。
我的问题是:如何通过 CSS 识别并移除“Ember”元素?我猜应该使用 display: none 来实现。
举个随机例子,比如我想移除话题底部的书签按钮。在 Chrome 控制台中查看该元素时,我只能看到所有话题页脚按钮的通用 CSS 样式,而无法单独定位到书签按钮。因此,如果我直接应用 display: none,它会隐藏所有按钮,而不仅仅是目标按钮。
在 CSS 的按钮标签上应用 display: none 后的效果:
之前:
应用 display: none 后:
之后:
我相当确信只移除其中一个按钮是可行的,并且这种方法也适用于其他 Ember 元素,因为它们大多也是类似分组的。此前,我曾在其他用户的帮助下成功移除了其他 Ember 元素(例如文本编辑工具栏中的“对齐”按钮)。
不过,该如何找到可以应用 display: none 的具体 CSS 标签呢?
再次为内容过于基础或啰嗦表示歉意。
b481
3
如果我的例子不好,请见谅,因为我不知道除了 CSS 之外还有其他选项。我只是随机选了一个 Ember 元素。
我想一个更好的例子是在用户页面。问题是,我在寻找如何识别哪些内容可以放入 CSS(类似于我上面引用的“MD Composer Extras”帖子中从引文开始的部分),这样您就可以理论上阻止某个 Ember 元素显示。
一个更好的例子是个人资料中“活动”部分的侧边栏。据我所知,设置中没有针对此的特定选项,但需要使用 CSS 来实现。
neounix
(Dark Matter)
4
你好 @b481
你所寻找的被称为“CSS 选择器”(简称“选择器”)。CSS 选择器用于“查找”(或者说选择)你想要设置样式的 DOM 元素。
例如,就在我现在输入的位置,我将尝试查找作曲器中你的用户名(b481)的选择器(仅作示例)。
我们的做法是将鼠标悬停在元素上(作曲器中的你的用户名 b481),然后右键单击,会弹出一个菜单,其中包含“检查”(Inspect)选项。
点击“检查”,开发者控制台就会打开(我现在使用的是 macOS 上的 Chrome 浏览器);如果运气好,我们想要的元素会被高亮显示。
如果你在控制台中高亮的元素上右键单击,你会看到一个“复制”→“复制选择器”的菜单项。
如果你选择该项并复制选择器,在这个例子中你会得到:
#ember433 > span > a
这实际上并不是一个很好的选择器,因为 #ember433 是由 Ember 分配的,但你可以将鼠标悬停在控制台的元素上,它会在目标页面和控制台中同时高亮显示相应的元素。好消息是,我们可以快速且轻松地找到大致范围。
接下来,你可以找到想要隐藏的元素。在这个例子中,你可以再次右键单击该元素,从鼠标下方的菜单中选择“添加属性”来测试我们的选择器。
我刚刚以这个截图为例进行了演示:
现在,具有 ID 为 ‘b481’ 的元素在该部分的 DOM 中被隐藏了。
因此,在这种情况下,我们知道如果使用以下 CSS:
span.action-title{
display:none;
}
我们可以将其添加到我们的主题中,从而隐藏该元素。
在这种情况下,你应该检查页面上是否有多个元素具有相同的选择器,并且还要确保你选择的选择器不会过于宽泛,从而选中其他页面中你不希望隐藏的元素。
选择器越具体越好。
例如,在这种情况下,我们可以通过指定选择器是某个父元素的子元素来使其更具体(此例未经测试):
div.compose-action-title > span.action-title{
display:none;
}
你可以看到我们正变得越来越具体;到这一步,你应该已经对如何查找想要修改的元素有了相当清晰的了解。
祝你探索愉快!
最后补充一点:
你可以使用 JavaScript 和 jQuery 来选择元素,但我发现,在像 Discourse/Ember 这样的单页应用(SPA)中,CSS 选择器效果很好,至少对我而言是这样。我通常只在需要以某种“棘手”的方式遍历 DOM 时才使用 JavaScript 选择器(这也可能非常有趣)。
希望这能帮到你。
另请参阅:
4 个赞
b481
7
我遇到了一个小问题。在尝试删除我上面发布的“书签”示例时,我无法做到这一点,因为附加的 Ember 编号一直在变化。
以下是当编号为 52 时我使用的代码。我也尝试过不使用 !important。
span.ember52.ember-view{
display:none !important;
}
neounix
(Dark Matter)
8
起步不错,但还需要改进 @b481
是的,我已经提到过了 @b481,你不应该根据 Ember 分配的类和 ID 来选择选择器。
你应该使用一个不是由 Ember 分配的类的选择器。我在之前的回复中已经为你描述了如何做到这一点。
侧边栏:顺便提一下,你并不是以这种方式(如你上面提到的)从 DOM 中“删除”这些项目,你只是在“隐藏”它们,但那是另一天的话题了 
请使用一个不是由 Ember 自动分配的选择器。
希望这能有所帮助。
注意:
如果你是想隐藏(在你的示例中)主题底部的书签按钮,你试过这个吗:
#topic-footer-button-bookmark
{
display:none;
}
抱歉,但从你的帖子中,我确实不知道你到底想隐藏 DOM 中的哪个元素(示例中的还是实际的)。
1 个赞
要隐藏其中某个部分,只需执行以下操作:
.user-secondary-navigation li:nth-child(3) {
display: none;
}
将数字替换为您希望隐藏的部分序号。
显然,这仅在列表可预测时才有效,否则 CSS 将无法作为解决方案。
2 个赞
b481
10
花了我一些时间,但我终于掌握了窍门。
谢谢 @neounix,这非常有帮助,也将对我的论坛大有裨益。
2 个赞
b481
11
有人知道如何只删除“引用整篇帖子”的选项,而不删除左侧的那个吗?它们都共享相同的 CSS 和同一个父 div,所以我还没找到一种方法能在保留其中一个的同时去掉另一个。
neounix
(Dark Matter)
12
你好 @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 选择器可以探索。我相信大家肯定能提出更好的选择器建议。
希望这能对你的探索之路有所帮助。
另请参阅:
-
CSS Attribute Selectors
-
如下
2 个赞