iT邦幫忙

0

如何讓垂直產生的div,做到類似合併儲存格的長相

延伸此問題,目前嘗試調整百分比,想透過制定一個<div>為兩個<div>的寬度百分比,但會一直跑版,想詢問此程式碼可以怎麼調整,使其達到期望長相呢?

[目前長相]發現最右邊的那一格會隨瀏覽器大小而改變
https://ithelp.ithome.com.tw/upload/images/20200424/20115336oBVwrDT23E.png

[期望長相]
https://ithelp.ithome.com.tw/upload/images/20200424/20115336tvafjIvg4a.png

看更多先前的討論...收起先前的討論...
咖咖拉 iT邦研究生 2 級 ‧ 2020-04-24 18:01:02 檢舉
自刪
ch_lute iT邦新手 5 級 ‧ 2020-04-24 18:01:42 檢舉
試了一下,是因為padding跟margin的關係,不然你原意應該寬度要設200%吧?
我CSS不熟,應該是要改成用200%去跟 content_TestTable 的左右padding 和margin加減的計算試代入。 你試試style= 'width: calc(200% - 7px); 7px是因為padding跟margin
Luis-Chen iT邦新手 4 級 ‧ 2020-04-25 15:10:25 檢舉
不過你做成表格跑得次數應該也一樣吧?
如果要操作table的colSpan也可以用算法去累加 難道還會有nested table e 的結構?
淺水員 iT邦高手 3 級 ‧ 2020-04-26 01:42:18 檢舉
我想問一下 html 的產生是後端直接處理還是前端用 javascript 產生的呢?
淺水員 iT邦高手 3 級 ‧ 2020-04-26 02:32:59 檢舉
硬要寫的話是這樣:https://www.w3schools.com/code/tryit.asp?filename=GE7KT8LQJSXE
不過如果有跨欄的狀況還是建議翻轉一下比較好
這真的是硬修的...
假如你的 A B C 三欄用的是百分比欄寬
那麼你第三列第二欄要跟上面兩欄一樣寬
你要先看你欄的留白是多少
你要讓第三列第二聯的欄寬多增加 一個欄所需要的留白
例如假如 一個欄左右留白是 10PX
那麼第三列第二欄的欄寬就要多 20PX 才行
CSS 可以用 CALC去計算,當然,如果你要改固定值欄寬
用這個邏輯去給欄寬就可以了
還有一種方法就是前面兩列的第二跟三欄用一個DIV包起來
留白邊界全部設成0,這樣跟第三列一定會齊
anniecat iT邦新手 3 級 ‧ 2020-04-27 10:50:26 檢舉
謝謝大家的回覆!
Luis-Chen,是的,資料來源為巢狀迴圈,因此必須先整理在做翻轉...
淺水員,是前端直接跑迴圈產生html的~
窮嘶發發發,謝謝你的說明,我有更理解這個計算的方式了!
4
Re:
iT邦新手 5 級 ‧ 2020-04-26 08:52:31
最佳解答

box-sizing:border-box; 方便我們在設定width、height上更直觀...
以你目前需要的排版方式可以去試試看

///

 <div class='content_TestTable' style='width: calc(200% + 1px)  ;'>400</div>

以上這部分很重要
鬼王很慘說的200%是對的!
透過box-sizing幫忙加加減減border/padding這些東西
但是因為你要用%來設寬度!所以中間他們有1px的border的寬度要記得加上去喔~

ps
如果不清楚為何要加上1px,可以先把flex-col設一個px的寬度去做測試
再用F12去檢查一下寬度,就會知道為什麼要加上1px了

可以試試看以下的方法~

<style>

    .flex-container{
        display: flex;
        
    }
    .flex-col{
        display: flex;
        flex-direction: column;
        
    }
    .content_TestTable {
        box-sizing:border-box;
        padding: 3px 3px 3px 3px;
        font-size: 10px;
        font-family: Arial;
        text-align:left;
        vertical-align: top;
        border: 1px solid ;    
        margin:-1px 0 0 -1px;
    }
</style>
<!-- 外層容器要設定為 display: flex 或 inline-flex -->
<div class='flex-container'>
    <div class='flex-col' style='width:40%;'>
        <div class='content_TestTable'>voltage(V)</div>
        <div class='content_TestTable'>Tmin(°C)</div>
        <div class='content_TestTable'>Tmax(°C)</div>
        <div class='content_TestTable'>Tma(°C) </div>
    </div>
    <div class='flex-col' style='width:30%;'>
        <div class='content_TestTable'>100</div>
        <div class='content_TestTable'>200</div>
        <div class='content_TestTable'>300</div>
        <div class='content_TestTable' style='width: calc(200% + 1px)  ;'>400</div>
    </div>
    <div class='flex-col' style='width:30%;'>
        <div class='content_TestTable'>100</div>
        <div class='content_TestTable'>200</div>
        <div class='content_TestTable'>300</div>
    </div>    
</div>
小魚 iT邦大師 1 級 ‧ 2020-04-26 10:16:50 檢舉

這個可以

anniecat iT邦新手 3 級 ‧ 2020-04-27 10:50:59 檢舉

謝謝你的方法,自己有嘗試過各位給的方式,並實做成功~感謝!

0
william113088
iT邦新手 5 級 ‧ 2020-04-24 18:51:08

試試grid layout

手機按錯= = 我的天

手機按錯= = 我的天

0
咖咖拉
iT邦研究生 2 級 ‧ 2020-04-24 21:13:08

自刪

2

懶的再說明了。

這是我自已預前存下來的東東
https://tech.ihstar.com/threads/%E7%94%A8css%E5%B0%87div%E5%8C%96%E6%88%90%E8%A1%A8%E6%A0%BC%E5%8C%96%E8%99%95%E7%90%86.15/#post-30

自已看看學著用吧。

看更多先前的回應...收起先前的回應...
anniecat iT邦新手 3 級 ‧ 2020-04-27 09:59:17 檢舉

浩瀚星空,謝謝你的教學,這部分有了解,只是像上次說的,其實我的資料結果會長成這樣(如連結中的下方表格),因此會需要將整個資料翻轉以後在使用您提供的方式去保內容,但因為資料來源比較複雜,若翻轉他會造成效能問題,因此後來才會選擇以目前的方式實做~
如果我有誤會你的用意請在和我說 > <

我只給你一個提示。
可視與不可視的對應。

簡單來說,你將表格相關的東西,採用可視處理。
其它的資料佈置就可以自由排放不需要給他線條。

主要要讓你看的是

<div class="table-td">
            <div class="sub-table">
                <div class="sub-table-tr">
                    <div class="sub-table-td" style="width: 40%;">台北</div>
                    <div class="sub-table-td" style="width: 30%;">72812</div>
                    <div class="sub-table-td" style="width: 30%;">8.0%</div>
                </div>
            </div>
        </div>

表內子表的應用。
這招可以應付你的雙重資料及不定向橫向資料處理。
還可以解決你的線條問題

如果用在table上。
就是一種table包table的用法。
只是將這樣的觀念拿來給 display:table??? 相關應用
來達到像表格那樣自動對齊。

如果不想利用 display:table 應用。
你就只剩下自定義位置處理。
你會需要js或是寬度百分比化處理。
認真來說,這樣會更麻煩的。

看你的想法吧。會要你用 display:table
主要的目的就是為了你目前的情況。

如果你還是覺得得要用你的方式。你會需要更多的調整。

ps:我教你的方式,並不需要將資料重新整理的。
不要被標題的排法給騙了。標題換一下就是資料的第一項。
一樣也是可以達到目的。

anniecat iT邦新手 3 級 ‧ 2020-04-27 11:03:33 檢舉

好的,我鑽研一下您提供的方式,來試試看!
謝謝你耐心的看我的問題還回覆我 > <

再給你一個提示好了。
上面的部份

<div class="table-td">
            <div class="sub-table">
                <div class="sub-table-tr">
                    <div class="sub-table-td" style="width: 40%;">台北</div>
                    <div class="sub-table-td" style="width: 30%;">72812</div>
                    <div class="sub-table-td" style="width: 30%;">8.0%</div>
                </div>
            </div>
        </div>

改成

<div class="table-td">
            <div class="sub-table">
                <div class="sub-table-tr">
                    <div class="sub-table-td">DATA1</div>
                </div>
                <div class="sub-table-tr">
                    <div class="sub-table-td">DATA2</div>
                </div>
                <div class="sub-table-tr">
                    <div class="sub-table-td">DATA3</div>
                </div>
                <div class="sub-table-tr">
                    <div class="sub-table-td">DATA4</div>
                </div>
            </div>
        </div>

這樣看看有沒有給你啟發。

anniecat iT邦新手 3 級 ‧ 2020-04-27 13:45:58 檢舉

我了解了!其實就是一個<td>裡面包一個<table>!!
<td>本身就是水平長資料,但<table><tr>本身是垂直往下的,所以利用這兩個特性就可以垂直長資料但又能獨立水平呈現了!
我的實作結果為第三個表,只剩下調整外觀樣式~
非常感謝你的指導~我通了~

anniecat iT邦新手 3 級 ‧ 2020-04-27 13:50:03 檢舉

已將此解法更新到發問中了~感謝 > <

1
鬼王很慘
iT邦新手 3 級 ‧ 2020-04-25 23:11:02

這是你的程式碼

<style>
    .flex-container{
        display: flex;
    }
    .flex-col{
        display: flex;
        flex-direction: column;
    }
    .content_TestTable {
        height: 20px;
        padding: 3px 3px 3px 3px;
        font-size: 10px;
        font-family: Arial;
        text-align:left;
        vertical-align: top;
        border: 1px solid ;    
        margin:-1px 0 0 -1px;
    }
</style>
<!-- 外層容器要設定為 display: flex 或 inline-flex -->
<div class='flex-container'>
    <div class='flex-col' style='width:40%;'>
        <div class='content_TestTable'>voltage(V)</div>
        <div class='content_TestTable'>Tmin(°C)</div>
        <div class='content_TestTable'>Tmax(°C)</div>
        <div class='content_TestTable'>Tma(°C) </div>
    </div>
    <div class='flex-col' style='width:30%;'>
        <div class='content_TestTable'>100</div>
        <div class='content_TestTable'>200</div>
        <div class='content_TestTable'>300</div>
        <div class='content_TestTable' style='width:195%;'>400</div>
    </div>
    <div class='flex-col' style='width:30%;'>
        <div class='content_TestTable'>100</div>
        <div class='content_TestTable'>200</div>
        <div class='content_TestTable'>300</div>
    </div>    
</div>

跑掉的是這個部分

<div class='content_TestTable' style='width:195%;'>400</div>

理論上它的寬度該是200%,但加上content_TestTable樣式的padding、margin、border就超過了。所以你想縮小一點改成195%,但還是對不上。

另外上次和這次已經很多前輩說過了,可以有更好的處理方式...

anniecat iT邦新手 3 級 ‧ 2020-04-27 10:03:29 檢舉

謝謝你的說明,其實我的資料結果若使用浩瀚星空前輩的教學,其實是會長成這樣(如連結中的下方表格),因此需要將整個資料翻轉,但因為資料來源較複雜,會造成效能問題,後來才會選擇以目前的方式實做~

我要發表回答

立即登入回答