0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Vue.js】imgタグのwidth,heightにパーセント(%)を指定してはいけない

Last updated at Posted at 2022-09-03

結論

Vue.jsで<img :width="hoge" :height:"foo">のようにwidht,heightをバインドする時、hoge,fooに100%などのようにパーセンテージは渡せない。必ず数字だけを渡すこと。
HTML5においてimgタグのwidth,heightに単位は指定できず単位なし数値しか指定できない。もしパーセンテージで指定したいならcssで指定する。
VueはこのHTML5の仕様に(おそらく)厳密に従っているのでこのような仕様になっている。

背景

v-bindでimgタグのwidthとheightをVueから指定しようとして以下のコードを書いたがうまくいかなかった

hoge.html
<div id="app">
    <img v-bind:src="path" alt="ロゴ画像"
    :width="width" :height="height" />
</div>
hoge.js
Vue.createApp({
    data() {
        return {
            path: '',
            width: '30%',
            height: '30%',
        }
    },
    methods: {
        onclick() {
            this.message = new Date().toLocaleString();
        }
    }
}).mount('#app');

widthやheightに30%が入ると思ったが、0だった
スクリーンショット 2022-09-03 11.36.24.png

調べてみた

以下でHTML4.1を使用してない限りはパーセンテージは使えないというコメントがあった。

MDNを見ると確かに単位無しで指定しろと書いてある

まとめ

そもそもHTML5ではimgタグのwidth,heightに単位をつけて指定できないため、Vueでも渡せない

各ブラウザは基本的にうまいこと後方互換性みたいなの出来るようになってるから、直接HTML書いてる時とかは特に意識せずに済んでた。
今まで当たり前のようにimgタグにパーセンテージ使ってたので、今後は気をつけようと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?