为什么我的自定义样式表在Safari中不能正常工作?

今天发现 Safari 偏好设置里可以设置自定义样式表
image.png
于是我自己写了个 css 代码进行测试

body {
    background-image: url("/Users/luxury/Desktop/wallhaven-o5762l.png") !important;
}

测试结果如下(有对应的网页检查器结果):

  1. 自己写的网页,可以生效
    image.png
  2. baidu 页面,无法生效
    image.png
    我是一个前端新手,请问下这是什么原因?
阅读 1.7k
avatarAI BotBETA

你好,这个问题可能是由于多种原因导致的。让我们一步步来排查:

  1. 首先,你需要确保你的自定义样式表是正确地链接到你的网页。在Safari中,你可以通过"Safari偏好设置"->"高级"->"在菜单栏中显示“开发”菜单"来打开开发者菜单,然后选择"Show Page Inspector"。在打开的窗口中,你可以看到"Elements"选项卡,在那里你可以检查你的HTML元素的样式和链接的样式表。
  2. 其次,检查你的CSS选择器是否正确。在你的例子中,你使用的是body选择器,它可能会影响到页面的全局样式。如果你想要改变某个特定元素的样式,你应该使用更具体的选择器。
  3. 另外,注意CSS中的!important规则。你使用了!important来覆盖其他可能存在的样式,但是如果其他样式也使用了!important,那么你的样式可能不会被覆盖。
  4. 此外,还要检查你的样式表是否被缓存。有时,浏览器会缓存网页的资源,包括CSS文件。这可能会导致你的更改没有立即生效。你可以通过清空浏览器的缓存或者在网页上右键点击然后选择"Empty Cache and Reload"来清除缓存并重新加载页面。
  5. 最后,不同的网站可能有自己的CSS样式表和脚本,这可能会影响到你的自定义样式表。例如,百度网站可能有一个内部的样式表来控制其页面的外观和布局,这可能会影响到你的自定义样式表。

希望这些信息能帮助你解决问题。如果你还有其他问题或者需要进一步的帮助,欢迎随时提问。

2 个回答

第一个你访问的自己项目,用的是file协议,所以可以应用到你的本地目录中的图片文件。
第二个你访问的百度,用的是http协议,但是你期望使用本地目录中的图片作为背景图片,这样是无法应用上的。

算是一个网页开发的基础就是尽量不要使用file协议来访问项目(临时应急除外),还有就是就是不要使用本地文件目录地址来作为引用地址。
因为很多时候我们会把网页部署到服务器中,这个时候你设置的 background-image: url("/Users/luxury/Desktop/wallhaven-o5762l.png") 其实会被浏览器解析为 background-image: url("http://www.baidu.com/Users/luxury/Desktop/wallhaven-o5762l.png")
很明显服务器上不会有这样的一个文件,也不会有这样的文件目录。自然没办法正确载入需要的背景图。但是样式还是会被正确应用的,只不过图片资源再加载的时候会返回404。这点可以在devTools 的 network 面板中看到。


Edit

补充一下,因为你使用的是 user style sheet 所以我不是很确定safari单独做了处理来确保可以引入本地文件。
你可以尝试一下把 background-image: url("/Users/luxury/Desktop/wallhaven-o5762l.png") !important; 修改为 background: #ffbebe url("/Users/luxury/Desktop/wallhaven-o5762l.png") !important;,看看是否能够应用上。


可以看出是被覆盖了,说明safari的用户样式表的优先级是最低的,css的任何一种优先级的选择器都可以用样式覆盖

你自己的没问题,是因为你没有在body上添加同一种样式,如果添加了样式表也就不会,因为会被覆盖

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏