【问题标题】:Can I make a sprite image from these images using asp.net image using <asp:Image's?我可以使用 <asp:Image's 使用 asp.net 图像从这些图像中制作精灵图像吗?
【发布时间】:2012-10-21 15:09:28
【问题描述】:

在我的主页顶部的一个 asp.net (vb) 网站上有一行 12 个标志,以允许用户选择他们的语言。 YSlow 和 Google Speed 等各种速度测试告诉我要拆分这些图像最小化 http 请求。如果它们是 asp:image 的,并且有一个悬停图像,我该怎么做?

目前,我有 12 个链接按钮;它们看起来像这样(注意,当您将鼠标悬停在旗帜上时,会在其上方创建悬停图像):

这是我的图像代码:

  <asp:LinkButton ID="btnSelectEnglish" runat="server"
  CommandArgument="en" OnClick="RequestLanguageChange_Click"
  class="flagbutton">      
  <asp:Image ID="Image8" runat="server" ImageUrl="~/images/flagen.png" height="15" 
  width="26"
  tooltip="View this website in English" title="View this website in English"/>
  <img class="map" src="images/flaghoveren.png" height="40" width="120" alt="View this 
  website in English"/>
  </asp:LinkButton>

  <asp:LinkButton ID="btnSelectGerman" runat="server"
  CommandArgument="de" OnClick="RequestLanguageChange_Click"
  class="flagbutton">      
  <asp:Image ID="Image7" runat="server" ImageUrl="~/images/flagde.png" height="15" 
  width="26"
  tooltip="View this website in Deutsch" title="View this website in Deutsch"/>
  <img class="map" src="images/flaghoverde.png" height="40" width="120" alt="View this
  website in Deutsch"/>
  </asp:LinkButton>

等等... 12 个链接按钮。这就像在 asp:Image 标记中放置一个 CssClass 一样简单吗?如果是这样,我该怎么做?或者这是更复杂的事情?

每个标志为 26 x 15,共有 12 个。是否可以创建这些精灵图像并保留悬停效果?我在想精灵图像必须是 334 像素(24 x 12 + 11 x 2 用于中间的填充)宽 x(我不知道高度是多少)。还是我应该忘记将其拆分并保持原样?感谢任何人都可以提供的任何指导;我知道这可能很难!

【问题讨论】:

    标签: asp.net css sprite css-sprites


    【解决方案1】:

    为了通过 css sprite sheet 显示它们,您需要去掉链接按钮中的实际图像标签,因为 css sprite sheet 是通过 background-image 属性应用的。

    因为看起来每个元素都有一个“flagbutton”类,你可以指定每个带有类标志按钮的元素都有一个背景图像(你的精灵表)。看起来像这样:

    .flagbutton {
        background-image:url(images/myspritesheet.png);
        width:26px;
        height:15px;
        margin-right:2px;
        display:block;
        float:left;
    }
    

    然后,由于每个都有一个唯一的 ID,您可以在您的 css 文件中为每个链接按钮指定一个唯一的背景位置,这将允许您基本上在每个标志的窗口内滑动精灵表以定位它以显示正确的旗帜。应该是这样的:

    #btnSelectEnglish {
        background-position: 0 0;
    }
    
    #btnSelectGerman {
        background-position: 0 -26px;
    }
    

    这将在英文框中显示精灵表的第一个 26px x 15px 部分,在德语框中显示精灵表的第二个 26px x 15px 部分。

    您不需要在 sprite 表中的标志之间添加间距——因为这将被上面 .flagbutton 定义中的 margin-right 覆盖。如果没有翻转,我认为您的最终精灵表的高度将是 312 像素(26 x 12)乘 15 像素。

    如果您想在混合中添加翻转,只需将每个图像的翻转版本放在精灵表中对应的下方。这将使您的精灵表的高度加倍。然后,为每个 ID 添加一个悬停类以覆盖悬停,如下所示:

    #btnSelectEnglish:hover {
        background-position: -15px 0;
    }
    
    #btnSelectGerman:hover {
        background-position: -15px -26px;
    }
    

    这将使您的精灵向上移动以显示悬停图像。

    【讨论】:

    • 非常感谢 Kleezy,您抽出宝贵时间阅读这个复杂的问题并给出错综复杂的答案。我几乎完成了尝试实施您的解决方案。我有一个简短的问题。我的最终精灵图像 sprite-flags.png 如何知道在悬停时要显示什么图像?例如,如果我将鼠标悬停在英文按钮上,它怎么知道在哪里显示 flaghoveren?再次,我真的很感谢在帮助我解决这个问题上所付出的时间和精力!
    • 没问题。如果您将单个精灵表设置为具有两行标志,原始标志在顶部,标志的翻转版本在底部,那么通过将背景位置设置为相同的 x 值但负 y 值悬停时,悬停时会显示翻转版本。那有意义吗?您基本上只是在悬停的 div 内向上滑动精灵表。这是一个具有 4 种不同按钮状态的示例。你的只有 2 行。 media.smashingmagazine.com/images/css-sprites/sprites2.gif
    • 明白了。如果您实现上述内容 - 悬停样式将不再影响任何内容。您将删除当前在每个链接按钮内的悬停图像,只留下链接按钮本身。它应该简化代码的整体结构(假设您可以这样做)。
    • 好的,祝你好运。请记住,您可以通过更改每个标志的背景位置来更改标志。 background-position 的第一个值是背景图像向左/向右移动多少像素,第二个是背景图像向上/向下移动多少。
    • 您是否添加了我在回答中提到的悬停元素(最后一个代码块)?如果是这样,也许您可​​以编辑您的问题以显示您当前的代码,我可以看看我是否可以发现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2015-01-13
    • 2011-05-30
    • 2011-08-09
    • 2012-02-16
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多