包含 Vue.js 后,图像宽度和高度始终为 0 [关闭]

Posted

技术标签:

【中文标题】包含 Vue.js 后,图像宽度和高度始终为 0 [关闭]【英文标题】:Image width and height are always 0 once Vue.js is included [closed] 【发布时间】:2022-01-23 19:40:59 【问题描述】:

我遇到过一个不合逻辑的现象,无论采取什么措施确保不会出现这种情况,任何图像在页面加载时的宽度和高度都为 0。

一旦我将 Vue.js 包含在我的项目中(导入 CDN 并对其进行初始化),就会立即发生这种情况。没有其他任何类型的 javascriptphp 代码可以将此值设置为 0。

我只是在页面上放了一个 html 图像标签:

<img class="border-radius" :src="'data:image/'+gallery.Fileformat+';base64,'+gallery.File" :>

图像是从数据库中检索到的作为 base64 字符串输出到 Vue.js 的 BLOB。我使用 Vue.js 将相关属性插入到属性中,因为它正在循环使用 v-for 的项目列表。我已经检查了代码,所有这些都定义得很好。我只是想设置70%widthautoheight,所以我将它包含在标签中:

<img class="border-radius" :src="'data:image/'+gallery.Fileformat+';base64,'+gallery.File" : id="galleryImage"  >

但是,一旦我在浏览器中实际加载页面,图像就不会出现。在页面 HTML 代码中,我看到 widthheight 出于某种原因设置为 0。

起初我并没有想太多,并认为 Vue.js 可能只是这样工作,所以我尝试通过将它们绑定到 Vue.js 变量来设置这些属性,以确保 Vue 以某种方式知道它们,所以我添加了HTML 代码的绑定属性:

<img class="border-radius" :src="'data:image/'+gallery.Fileformat+';base64,'+gallery.File" : id="galleryImage" : :>

在 Vue 中,我已经将它初始化为一个变量,其中包含我想要设置的值:

let app = Vue.createApp(
    data: function()
        return
            imageWidthGallery: '70%',
            imageHeight: 'auto'
        
    
)
app.mount('#app')

同样简单地用 Vue 绑定字符串而不是使用变量也不起作用:

<img class="border-radius" :src="'data:image/'+gallery.Fileformat+';base64,'+gallery.File" : id="galleryImage" : :>

这不起作用,属性再次为 0!如果您想知道是的,HTML 代码位于 Vue 挂载内。在这部分代码中使用 Vue 完成的任何其他操作都有效。

我在网上搜索并找到this SO 帖子,其中提到了 jQuery 中的类似行为。

所以我考虑过在 Vue 挂载页面后设置图像宽度的 :width 绑定属性的值,所以我添加了一个新的挂载处理程序(注意我是如何完全放弃高度的绝望地指出):

let app = Vue.createApp(
        data: function()
            return
                imageWidthGallery: ''
            
        ,
        mounted: function()
            imageWidthGallery: '70%'
        
    )
    app.mount('#app')

这又导致了同样的问题并且没有解决任何问题。所以我想到了设置。那么

我尝试检测图像是否已加载@load,然后更改它:

<img class="border-radius" :src="'data:image/'+gallery.Fileformat+';base64,'+gallery.File" : id="galleryImage" @load="imageLoaded" :>
let app = Vue.createApp(
        data: function()
            return
                imageWidthGallery: '',
            
        ,
        methods:
           imageLoaded: function()
               imageWidthGallery: '70%'
           
        
    )
    app.mount('#app')

这也不起作用。我尝试强制更改 CSS 代码,在添加 Vue.js 之前不会导致任何这种情况(我仍然相信 CSS 与此无关)。这也没有帮助。

我觉得完全没有选择,完全不知道这是什么原因,也没有办法尝试解决这个问题。我还没有发现任何其他人对 Vue.js 有这个问题,即使有东西覆盖了 CSS 甚至 JS 中的值(它不是)我希望 Vue.js 简单地覆盖它,因为它是最后一个JS 代码在页面最底部的 &lt;script&gt; 标记内执行,甚至位于所有 CDN 下方。据我了解,无论 CSS 代码如何,如果属性是在 HTML 中设置的,它将始终采用 HTML 值。这到底是什么鬼?

【问题讨论】:

HTML 隐藏在 SO 上的帖子中,除非标记为代码。不过,没有必要用标记说话。 【参考方案1】:

当我解决方法时,我发现通过 HTML style="'width: 70%; height: auto;'" 设置宽度或高度是可行的。如果您将属性与 Vue.js 绑定,请记住在双引号内传递 '',因为您将字符串传递给 Vue 绑定。虽然我仍然想知道是什么导致这个问题首先发生......

使用 Vue.js 的解决方法(如果使用了 Vue 变量):

<img src="MyImage.jpg"  :style="'width: 70%; height: auto;'">

使用纯 HTML 的解决方法:

<img src="MyImage.jpg"  style="width: 70%; height: auto;">

【讨论】:

您不需要绑定文字字符串(即&lt;img :style="'foo'"&gt;&lt;img style="foo"&gt; 相同)。您发布的两种解决方法实际上是相同的(前者不必要地冗长)。

以上是关于包含 Vue.js 后,图像宽度和高度始终为 0 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

css 使容器的高度和宽度始终相同。适合方形容器上的背景图像!

css 使容器的高度和宽度始终相同。适合方形容器上的背景图像!

如何在保持宽高比的同时将图像调整为固定的宽度和高度?

Internet Explorer 自动为新添加的图像添加高度和宽度属性

读取QR码 - base64图像高度和宽度

Vue.js 图像纵横比