質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

SPA(Single-page Application)

SPA(Single-page Application)は、単一のWebページのみでコンテンツの切り替えができるWebアプリケーションもしくはWebサイトです。ブラウザでのページ遷移がないため、デスクトップアプリケーションのようなUXを提供します。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3488閲覧

Vuejsでレンダリングされたあとに高さを合わせる方法

ShikaTech

総合スコア468

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

SPA(Single-page Application)

SPA(Single-page Application)は、単一のWebページのみでコンテンツの切り替えができるWebアプリケーションもしくはWebサイトです。ブラウザでのページ遷移がないため、デスクトップアプリケーションのようなUXを提供します。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/06/07 09:45

やりたいこと

とある画面が描写されるとき、高さが異なるDiv要素DivAおよびDivBの高さを揃えて表示したい。

ベースHTML

vuejs

1<template> 2 <section> 3 <div name="DivA" ref="divA"> 4 <!-- 色んなコンテンツ:高さ150px程度 --> 5 </div> 6 <div name="DivB" ref="divB"> 7 <!-- 色んなコンテンツ:高さ210px程度 --> 8 </div> 9 </section> 10</template>

試したこと

  • :styleバインドを使った動的設定その1:

タグに<div name="DivA" :style="searchSectionHeight">
watchイベントのとある部分にthis.searchSectionHeight = '{ height: ' + Math.max(divAHeight,divBHeight) + 'px; }';
設定されず

  • :styleバインドを使った動的設定その2:

タグに<div name="DivA" :style="{height:searchSectionHeight+'px'}">
data()にsearchSectionHeight:0
watchイベントのとある部分にthis.searchSectionHeight = Math.max(divAHeight,divBHeight)
初期値が0なので高さが取れず、結果的にどちらも表示されなくなる

  • $refで取り出したDOM要素に直接セットとか?その1

this.$refs.divA.clientHeight = this.$refs.divB.clientHeight;
ReadOnlyプロパティと怒られる

  • $refで取り出したDOM要素に直接セットとか?その2

this.$set(this.$refs.divA,'style','{ height: ' + Math.max(divAHeight,divBHeight) + 'px; }');
設定されず

  • 上記以外にも細かく色々試しましたが結局ダメで力尽きました…

ほか

jQueryをなるべく廃して実現するのを目標にやってますが、最悪どうしてもできなければjQueryブチ込むこともやぶさかではありません…

有識者の方、お助けください!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょっと強引かもしれませんがこのような感じで希望されている状態になりますでしょうか。

vue

1<template> 2 <section> 3 <div name="DivA" ref="divA" class="wrap" :style="{height: higherHeightPx}"> 4 <div class="height30"></div> 5 <div class="height30"></div> 6 <div class="height30"></div> 7 <div class="height30"></div> 8 <div class="height30"></div> 9 </div> 10 <div name="DivB" ref="divB" class="wrap" :style="{height: higherHeightPx}"> 11 <div class="height50"></div> 12 <div class="height50"></div> 13 <div class="height50"></div> 14 <div class="height50"></div> 15 <div class="height50"></div> 16 </div> 17 </section> 18</template> 19 20<script> 21 export default { 22 data () { 23 return { 24 heightA: 0, 25 heightB: 0, 26 isMounted: false, 27 } 28 }, 29 computed: { 30 higherHeightPx () { 31 return this.isMounted ? Math.max(this.heightA, this.heightB) + 'px' : null 32 } 33 }, 34 mounted () { 35 this.heightA = this.$refs.divA.clientHeight 36 this.heightB = this.$refs.divB.clientHeight 37 this.isMounted = true 38 } 39 } 40</script> 41<style lang="scss" scoped> 42 .wrap { 43 padding: 10px; 44 background-color: grey; 45 } 46 47 .height30 { 48 height: 30px; 49 background: blue; 50 } 51 52 .height50 { 53 height: 50px; 54 background: red; 55 } 56</style>

投稿2018/06/07 10:16

isoppp

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShikaTech

2018/06/07 10:29

ご教示いただいた方法でサイズの調整はできました!! たかがサイズの調整程度でここまでやらないといけないのか…!?と軽く絶望してますが、取り急ぎ目下課題は潰せたので良しとします、ありがとうございました。
isoppp

2018/06/07 10:33 編集

お役に立てたようでよかったです! 上記だと表示時に一度しか対応していないのでもし中身が動的に変わる、もしくはブラウザのリサイズによってサイズが変わるようでしたらさらに別の処理も必要そうです。 もしAとBが横並びレイアウトの場合はflexbox等cssで解決するのが一番楽だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問