vue-echarts高度縮小時autoresize失效的原因和解決辦法
背景
項目中采用動態(tài)給x-vue-echarts style賦值width,height的方式實現(xiàn)echarts圖表尺寸的改變

<v-chart
...
autoresize
></v-chart>
給v-chart添加autoresize后,在圖表寬度變化,高度增加時無異常,高度減小時圖表并未縮小,反而被截斷了
先說結(jié)論
添加全局樣式進行覆蓋
div.vue-echarts-inner {
height: 100% !important;
}
原理
查看vue-echarts源碼


這里的inner以及useAutoresize中的root值為該dom節(jié)點

所以實際上是在監(jiān)聽div.vue-echarts-inner這個dom節(jié)點的尺寸變化,從而去給inner的子盒子設(shè)置width和height

下面是父盒子的css屬性

下面是inner的css屬性

問題就在于flex和height auto
- 父盒子為flex盒且flex-direction為column,子盒子設(shè)置flex-grow:1,那么子盒子會填滿父盒子的高度
- 父盒子設(shè)置高度為height:auto,那么高度會以其子盒子內(nèi)容高度為準(zhǔn),也就是子盒子是300px,就會把該盒子高度撐到300px
但兩者在一塊就有沖突
這里分為父,子,孫三個盒子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father {
display: flex;
flex-direction: column;
background-color: red;
width: 500px;
height: 500px;
}
.me {
flex: 1;
width: 300px;
background-color: green;
height: auto;
}
.son {
width: 100px;
background-color: blue;
height: 500px;
}
</style>
</head>
<body>
<div class="father">
<div class="me">
<div class="son"></div>
</div>
</div>
</body>
</html>
結(jié)論:
父盒子高度大于孫盒子時,子盒子高度跟隨父盒子

父盒子高度小于孫盒子時,子盒子高度跟隨孫盒子

回到vue-echarts場景,所以在高度減少時,inner的父盒子高度減少,但inner子盒子高度不變,所以inner盒子高度不會變,不會觸發(fā)resize
解決辦法:inner設(shè)置height: 100%,這樣inner的高度會跟隨其父盒子高度而變化,而不會受其子盒子影響
以上就是vue-echarts高度縮小時autoresize失效的原因和解決辦法的詳細內(nèi)容,更多關(guān)于vue-echarts縮小時autoresize失效的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue?Router修改query參數(shù)url參數(shù)沒有變化問題及解決
這篇文章主要介紹了Vue?Router修改query參數(shù)url參數(shù)沒有變化問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
vue3+ts+Vuex中使用websocket協(xié)議方式
這篇文章主要介紹了vue3+ts+Vuex中使用websocket協(xié)議方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
vue el-table實現(xiàn)多選框回填的示例代碼
摘要:Vue多選框回填是實現(xiàn)表單數(shù)據(jù)高效處理的常見需求,本文主要介紹了vue el-table實現(xiàn)多選框回填的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-01-01

