element?ui設(shè)置table自適應(yīng)表格寬,不自動換行問題
element ui設(shè)置table自適應(yīng)表格寬,不自動換行
在我們平常開發(fā)使用element ui中的table時,會出現(xiàn)數(shù)據(jù)過長自動換行的結(jié)果,
如果把寬給死的情況下也不太適合,接下來提供二種方式去動態(tài)計算每個盒子的寬度。
第一種方式
- 表格加** table-layout='auto’ **屬性
- 表格加tableAuto類名
- el-table-column標(biāo)簽不設(shè)置寬度
<el-table :data="tableData" table-layout='auto' class="tableAuto"> <el-table-column prop="name" label="名稱" /> </el-table> // 設(shè)置超出不折行 <style> .tableAuto.el-table .cell { white-space: nowrap; } </style>
但這種方式純在二個問題
1.el-table-column左側(cè)多個列加fixed屬性,左右滑動,列寬得提前計算
2.el-table設(shè)置table-layout='auto’ 與 固定表頭 的功能沖突,表頭無法再固定
第二種方式 (推薦使用第二種方式)
第二種方式就是通過canvas動態(tài)計算el-table-column寬度,可以完美解決第一種方式的2中弊端。
<template> <el-table> <el-table-column :width="flexWidth(item.en, tableData, item.cn)"></el-table-column> </el-table> </temolate> <script> /** * dynamicCalculationWidth * @param string | number prop 每列的prop 可傳'' * @param array tableData 表格數(shù)據(jù) * @param string | number title 標(biāo)題長內(nèi)容短的,傳標(biāo)題 可不傳 * @param number num 列中有標(biāo)簽等加的富余量 * @returns 每列的寬度 * 注:prop,title有一個必傳 */ dynamicCalculationWidth(prop, tableData, title, num = 0) { if (tableData.length === 0) { // 表格沒數(shù)據(jù)不做處理 return } let flexWidth = 0 // 初始化表格列寬 let columnContent = '' // 占位最寬的內(nèi)容 let canvas = document.createElement('canvas') let context = canvas.getContext('2d') context.font = '14px Microsoft YaHei' if (prop === '' && title) { // 標(biāo)題長內(nèi)容少的,取標(biāo)題的值, columnContent = title } else { // 獲取該列中占位最寬的內(nèi)容 let index = 0 for (let i = 0; i < tableData.length; i++) { const now_temp = tableData[i][prop] + '' const max_temp = tableData[index][prop] + '' const now_temp_w = context.measureText(now_temp).width const max_temp_w = context.measureText(max_temp).width if (now_temp_w > max_temp_w) { index = i } } columnContent = tableData[index][prop] // 比較占位最寬的值跟標(biāo)題、標(biāo)題為空的留出四個位置 const column_w = context.measureText(columnContent).width const title_w = context.measureText(title).width if (column_w < title_w) { columnContent = title || '占位符呀' } } // 計算最寬內(nèi)容的列寬 let width = context.measureText(columnContent) flexWidth = width.width + 40 + num return flexWidth + 'px' }, </script>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue子組件改變父組件傳遞的prop值通過sync實現(xiàn)數(shù)據(jù)雙向綁定(DEMO)
本文通過一個demo給大家介紹了vue子組件改變父組件傳遞的prop值通過sync實現(xiàn)數(shù)據(jù)雙向綁定,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02Vue.js獲取被選擇的option的value和text值方法
今天小編就為大家分享一篇Vue.js獲取被選擇的option的value和text值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Vue結(jié)合Element-Plus封裝遞歸組件實現(xiàn)目錄示例
本文主要介紹了Vue結(jié)合Element-Plus封裝遞歸組件實現(xiàn)目錄示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04