【问题标题】:How does this website render images?这个网站如何渲染图像?
【发布时间】:2012-03-02 18:13:23
【问题描述】:

我正在为 youtube.com 编写用户脚本,并希望插入一个与 YouTube 页面上的其他按钮具有相同外观和感觉的按钮。过去工作正常,但突然停止工作。 在任何 youtube 视频顶部查看此图像中的按钮:

所以我只注意到 Firebug 中的一件事,这些按钮包括文本和图像子节点,但并不像为它们提供源图像 url 那样简单地呈现图像。这些图像(“加号”图像或“向下箭头”图像)或所有其他此类图像的“src”属性具有完全相同的 URL(1 x 1 图像)://s。 ytimg.com/yt/img/pixel-vfl3z5WfW.gif。但最终它们被渲染为所有这些不同的图像。结果,当我在按钮中执行相同操作时,所有其他 CSS 属性都可以正常工作,但图像只是空白。

我只是想从 html/javascript/css 专家那里知道 -

  1. 他们是怎么做到的?
  2. 如何通过 CSS/javascript 获取这些最终渲染的图像?

谢谢!

附: :
- 如果版主想要结束这个问题,说它不是编程问题,它是。要知道如何实现这种“无法检测”的 html 图像,或者用户脚本如何仍然通过 javascript/html/css 获取该图像。
- 如果版主想要结束这个问题,说它太具体(关于 youtube.com),它不是。这是一个关于 HTML 的一般问题,但到目前为止我只看到过 YouTube 实现了这一点。我是新手。

谢谢,
皮尤什

【问题讨论】:

  • 这里有很多答案,但基本上你需要做的就是给你的按钮一个yt-uix-button的CSS类。请参阅下面的答案。
  • GGG,我已经在做完美的工作,最近停止工作。因此提出了这个问题。
  • 你说得对,对不起,你需要将yt-uix-buttonyt-uix-button-default都添加为CSS类名。我会更新我的答案。

标签: javascript html css image


【解决方案1】:

这种技术称为 CSS sprites。它用于减少 HTTP 请求的数量。

基本上,您只有一张带有所有图标的图像(因此您只需要从服务器加载一张图像)。您可以将此图像用作元素上的背景图像,其宽度/高度定义为要显示的图标的大小,并使用 css 属性background-position 将背景放置在要显示的图标的顶部/左侧在背景图像中。

所以重要的部分是:

  • 将图片设置为背景
  • 为您的元素设置大小。由于图像用作背景,它不会隐含地具有图像的大小!
  • 设置背景位置规则

YouTube 使用以下图片:http://s.ytimg.com/yt/imgbin/www-refresh-vflmpZ5kj.png

图像大小为 16px/16px,“加号”图标的顶部/左侧位于 97px/66px 位置,因此它们使用以下背景位置值:

background-image: url(//s.ytimg.com/yt/imgbin/www-refresh-vflmpZ5kj.png);
background-position-x: -97px;
background-position-y: -66px;
width: 16px;
height: 16px;

进一步阅读:

发电机:

【讨论】:

  • 您可以使用命令行工具glue轻松制作自己的精灵
  • 三角形是使用边框的纯 CSS。 css-tricks.com/snippets/css/css-triangle
  • 嗨 Didier,非常感谢您的详细回答。现在我明白了!! :)
  • blackpla9ue,是的!你说的对!也感谢您的链接!现在我可以继续你的两个建议了! :)
  • @PiyushSoni。很高兴它有帮助!
【解决方案2】:

这种技术被称为“CSS sprites”:

他们使用one image with all the backgrounds,并使用 CSS 来设置元素的高度和宽度,并以只显示一部分的方式定位背景。

在 YouTube 的案例中,他们似乎使用 1x1 空白 <img> 并在 img 标记本身上设置背景图像。

【讨论】:

  • 啊。这是另一组有用的信息 Madmartigan。非常感谢。学习很棒:)
【解决方案3】:

我为 youtube.com 编写了一个用户脚本,并希望插入一个与 YouTube 页面上的其他按钮具有相同外观和感觉的按钮。

只要给你的按钮一个yt-uix-button yt-uix-button-default 类,它就会和其他按钮有相同的外观和感觉。我在自己的 YouTube 用户脚本中做同样的事情。

过去工作正常,但突然停止工作。

是的,他们在上次大更新期间更改了一些类名。

正如您在评论中指出的那样,以前该课程只是yt-uix-button,现在您还必须添加yt-uix-button-default


这是我的自定义按钮,只是为了显示它有效;)

【讨论】:

  • 您好 GGG,谢谢。我还注意到 CSS 类名称已更改,但即使更改它们也不起作用。我会再尝试。我已经在使用 yt-uix-button。
  • @PiyushSoni class="yt-uix-button yt-uix-button-default" 对我有用,我刚刚测试过。但是,如果没有yt-uix-button-default,它就无法工作。
  • 你太棒了! :) 是的,只要我添加了“默认”的东西,它就开始像以前一样工作了!精彩的。非常感谢:)
  • 您好 GGG,我会将您的回复标记为答案,因为正是您才能解决我的实际问题。但我回去看到了我自己的问题,看起来我把它当作一个一般性问题,迪迪埃的回答可能最适合公众的目的。我希望你不会介意。再次感谢。
  • @PiyushSoni 无论你认为什么是最好的。我认为人们选择给出一般性答案是因为他们没有给你一个具体的答案,他们有机会制作漂亮的照片并吸引投票;)
【解决方案4】:

查看该标签的 CSS 声明。例如,like 按钮有这个 html:

<button onclick=";return false;" title="I like this" type="button" class="start yt-uix-tooltip-reverse  yt-uix-button yt-uix-button-default yt-uix-tooltip" id="watch-like" data-button-toggle="true" data-button-action="yt.www.watch.actions.like" role="button" data-tooltip-text="I like this">
    <img class="yt-uix-button-icon yt-uix-button-icon-watch-like" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="I like this"><span class="yt-uix-button-content">Like </span>
</button>

并且在 CSS 中有一个声明:

#watch-actions .yt-uix-button-icon-watch-like {
    background: no-repeat url(//s.ytimg.com/yt/imgbin/www-refresh-vflmpZ5kj.png) -75px -102px;
    width: 13px;
    height: 15px;
}

www-refresh-vflmpZ5kj.png 是一个精灵,背景声明将其定位在 -75px 和 -102px 位置,即竖起大拇指图标的位置。

【讨论】:

  • 感谢 treeface,我实际上正在研究它并使用他们自己的 CSS,但现在我知道除了 yt-uix-button 类之外,我还必须使用 yt-uix-按钮默认类也是如此! - 他们最近改变了一些东西。
猜你喜欢
  • 1970-01-01
  • 2017-08-17
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
相关资源
最近更新 更多