【问题标题】:SVG images not showing up in Webkit browsersSVG 图像未显示在 Webkit 浏览器中
【发布时间】:2013-01-25 01:56:46
【问题描述】:

我一直在编写一个主要用于 iPhone 的移动网站。我正在为图像使用 SVG,但由于某种原因,只有少数图像显示出来。

如果你看下面的截图,你可以看到缺少图标:

如果您查看https://mobile.hollatme.com/,您可以看到正在运行的错误。您会注意到徽标没有出现在顶部。但是,如果您直接导航到位于 https://mobile.hollatme.com/css/svg/logo.svg 的徽标文件,然后返回到将显示的页面。

HTML:

<div class="profileItems">
    <a class="notificationsProfileItem" href="javascript:{}" data-loc="notifications">Notifications <span></span></a>
    <a class="neighborhoodsProfileItem" href="javascript:{}" data-loc="strolling">Strolling <span></span></a>
    <a class="streamProfileItem" href="javascript:{}" data-loc="stream">Stream <span></span></a>
    <a class="interestsProfileItem" href="javascript:{}" data-loc="interest-trends">Interest Trends <span></span></a>
    <a class="photosProfileItem" href="javascript:{}" data-loc="photos">Photos <span></span></a>
    <a class="shuffleProfileItem" href="javascript:{}" data-loc="shuffle">Shuffle Feeds <span></span></a>
    <a class="messagesProfileItem" href="javascript:{}" data-loc="messages">Messages <span></span></a>
    <a class="neighborsProfileItem" href="javascript:{}" data-loc="neighbors">Neighbors <span></span></a>
    <a class="friendsProfileItem" href="javascript:{}" data-loc="friends">Friends <span></span></a>
    <a class="settingsProfileItem" href="javascript:{}" data-loc="settings">Settings <span></span></a>
</div><!-- End profile items -->

CSS:

.profileItems {}

.profileItems a {
    display:block;
    background-color:#F2F2F2;
    margin:0 0 0.1em 0;
    padding:1.5em 1em 1.5em 2.8em;
    color:#595959;
    font-weight:bold;
    font-size:0.8em;
    opacity:0;
}

    .profileItems a span {
        display:block;
        background:url(svg/goArrow.svg) no-repeat;
        background-size:1em;
        float:right;
        height:1.5em;
        width:1em;
        margin:-0.1em 0 0 0;
    }

.shuffleProfileItem {
    background-image:url(svg/feeds.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.notificationsProfileItem {
    background-image:url(svg/holla.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.neighborhoodsProfileItem {
    background-image:url(svg/neighborhoods.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.interestsProfileItem {
    background-image:url(svg/interests.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.messagesProfileItem {
    background-image:url(svg/message.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.photosProfileItem {
    background-image:url(svg/photo.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.neighborsProfileItem {
    background-image:url(svg/neighbors.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

.friendsProfileItem {
    background-image:url(svg/friends.svg);
    background-repeat:no-repeat!important;
    background-size:1.8em;
    background-position:0.5em;
}

.settingsProfileItem {
    background-image:url(svg/settings.svg);
    background-repeat:no-repeat;
    background-size:1.8em;
    background-position:0.5em;
}

【问题讨论】:

  • 显而易见的问题:您已经检查并确保所有的 SVG 文件都已上传?您是否尝试过直接查看“丢失”的图标?
  • 它们都在那里,奇怪的是,如果我访问 svg 的 url,它们会突然出现在它们应该出现的位置。
  • 他们有尺码吗?不是在 HTML 中,而是在 SVG 中?
  • 有一个尺寸,但这与尺寸或我提到的任何事情无关,如果你直接加载下垂,它就会起作用,这意味着它是某种加载问题

标签: html css mobile svg mobile-safari


【解决方案1】:

啊,您遇到了 Webkit 中的错误。如果您尝试使用 CSS,即使您对它们进行编码,嵌入位图图像的元素也不会显示。要解决此问题,您需要将实际的 SVG 文件插入到一个不可见的容器中(呃),然后将显示 CSS 中引用的图像。你可以做一些事情,比如......

<div class="icons">
  ... put all your svg code here
</div>

在你的样式表中:

.icons {
  width: 1px;
  height: 1px;
  pointer-events: none;
  opacity: 0;
  overflow: hidden;
}

您也可以只插入纯 PNG。您现在拥有的是嵌入在 HTML 中的 SVG 中的位图,为什么不将这些位图矢量化,或者插入纯 PNG?

【讨论】:

  • 我明白了,我会在我周一回去工作时试试这个,它们需要是向量,因为它必须是一个大小。所以想要避免使用位图,这意味着必须有一堆不同的大小。感谢您的帮助
  • 但是,如果您在 SVG 中嵌入了 PNG,您仍然显示的是位图,而不是矢量,因此它们与分辨率无关。将这些图标矢量化(使用 inkscape 或 Ilustrator),您的问题将得到解决。
  • 它们不是 png,它们是矢量化的。
  • 如果您在mobile.hollatme.com/css/svg/logo.svg 上查看源代码(您可以在 Chrome 中执行此操作,不确定 FF),您将在 base64 嵌入之前看到 PNG 文件类型。
猜你喜欢
  • 2010-09-07
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2022-06-15
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多