哪些GTK+元素支持哪些CSS属性?

6

在对我的GTK+应用程序应用自己的CSS时,我注意到一些元素会忽略某些CSS属性,而其他元素则会忽略其他属性,这导致我寻求哪些元素支持哪些CSS属性的概述。

到目前为止,我还没有找到这样的概述。

例如,Gtk.Label根本不支持border,我不得不在它周围放置一个Gtk.Frame并在CSS文件中定义其样式。另一个问题是,即使是一个Gtk.Frame也不支持margin,而我想使用它。

有人能告诉我在哪里找到这个信息吗? (或者如果我对所有这些都弄错了,如何使元素支持CSS属性?)

1个回答

4

这里是GTK 3.8支持的CSS属性概述。同样的信息在GtkCssProvider文档中也有,但不是以表格形式呈现。

哪些小部件支持哪些属性有点难确定。它可以分为两种小部件:一种是简单的,只支持基本样式(没有边框或背景),例如GtkLabel;另一种是支持所有属性的小部件,例如GtkFrame。像你发现的那样,在GtkFrameGtkEventBox中包装一个简单的小部件是将其转换为另一种小部件的常规方法。

margin属性根本不被支持,我被告知这是GTK开发人员的选择。据我所知,他们的想法是,GTK不是HTML,屏幕上的小部件布局应该由您的代码而不是CSS控制。

GTK 3.20更新:大多数或所有小部件现在都支持marginCSS属性。


很奇怪,我清楚地记得在一些GTK+页面上找到了margin属性(在你提供的链接页面上,我之前已经看过)。也许他们在更新的版本中将其删除了?另一方面,padding似乎没问题...所以如果我要做一个解决方法,我可以将所有内容包装在一个框架中,然后在该框架中使用padding。仅禁用margin而不是padding并不能强制执行您所描述的内容。也许这值得一个新问题:如何使Gtk.Grid内部的小部件保持与包含容器的Grid之间的边距?(没有肮脏的解决方法) - Zelphir Kaltstahl
1
margin 在 GTK 中作为小部件属性确实存在,您需要在代码中设置它。然而,它从未被支持为 CSS 属性(至少目前还没有)。我认为这样做的原因是填充(例如,在 GtkButton 中,按钮边框和内容之间的填充)是小部件的样式属性,应该在 CSS 中指定,而小部件之间的边距是布局的一部分,应该在代码中完成。 - ptomato
关于必须在代码中设置它的问题,你是正确的。我仍然不太理解这个设计决策,因为现在我必须管理CSS和代码布局信息,而不仅仅是CSS,但我想我只能应对它。也许在以后的版本中会有所改变。 - Zelphir Kaltstahl
2
那不正确。在我发布上述内容一年后发布的GTK 3.20之前,margin被解析(“支持”是指在CSS中包含它不会出现语法错误,这也是为什么它出现在我从源代码中提取的要点中),但对任何常规GTK小部件都没有影响。您可以编写尊重它的自定义小部件。 - ptomato
2
然而,他们在此期间改变了想法,并在稳定了GTK 3.20中的CSS API时使大多数或所有小部件都尊重margin。我会更新答案。 - ptomato
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接