目前實做的方式,是會跑兩次迴圈垂直長四個資料,之後再水平呈現。
在純粹使用<div>
,不考慮使用<table>
或<div>
模擬table的方式下,想將如下兩個<div>
做合併,但嘗試很久都無法實現(程式碼),想詢問可以怎麼調整呢?
補充 : 目前這個case因為資料來源是直向的,無法直接使用<div>
模擬table的方式跑迴圈橫向長出表格,故為了避免轉至list,才會使用目前的方式進行。
[目前長相]
[期望長相]
[程式碼]
<style>
.content_TestTable {
height: 20px;
padding: 3px 3px 3px 3px;
font-size: 10px;
font-family: Arial;
text-align:left;
vertical-align: top;
border: solid windowtext 1px;
margin:-1px 0 0 -1px;
table-layout: fixed;
/*font-size:0px;*/
/*padding:0;*/
/*margin:0;*/
}
</style>
<div style='display:inline-block;'>
<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 style='display:inline-block;'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
20200427更新 :
謝謝浩瀚星空的指導,若使用div仿table的方式,也可以達到,請參考範例
那個間隙是空白字元產生的
不介意程式碼的排版的話,可以拿掉兩個 div 區塊間的所有泛空白字元
<div style='display:inline-block;'>
<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 style='display:inline-block;'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
參考:How to remove the space between inline-block elements in CSS
另外有考慮用 flex 去排嗎?
原來是<div>
與<div>
之間的空白字元所造成的啊(恍然大悟!)
我會跑迴圈產生四個為一組的<div>
區塊,因此,比較困難去拿掉兩個<div>
區塊間的所有泛空白字元。
若是使用<div>
的設置padding: 0;
,我擔心會影響到其他有使用到div的部分
另外,flex
的部分是指整個垂直與水平的排版嗎,有稍微看一下範例,但不太清楚此作法會有什麼不一樣呢?
用 flex 的話,外層容器的 display 要稍微改一下。
外層容器如果是 block 要改成 flex
外層容器如果是 inline-block 則要改成 inline-flex
下面是範例
<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'>
<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'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
</div>
另外移除空白的部分,如果不能改,這邊是有個用 js 移除的方式,合不合用再自己衡量了。
PS. 只是有這想法弄看看,不確定所有瀏覽器正常。(只試過 Firefox、Chrome、Edge)
<div class='flex-col'>
<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'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
<script>
//這段 javascript 會移除同層的所有泛空白字元
(()=>{
let p=document.currentScript.parentElement;
Array.from(p.childNodes).forEach((ele)=>{
if(
ele.nodeType===Node.TEXT_NODE &&
ele.textContent.search(/^\s*$/)>=0
) {
p.removeChild(ele);
}
});
})();
</script>
<div style="display:inline-block;">
<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 style="display:inline-block;position: absolute;" style:"position:="" absolute;"="">
<div class="content_TestTable">100</div>
<div class="content_TestTable">200</div>
<div class="content_TestTable">300</div>
<div class="content_TestTable">400</div>
</div>
frankychen,謝謝!
不過再嘗試使用這個方法實,若要新增第三個div的話,第三個會與第二個重疊,請問若是這樣的話,還可以怎麼調整呢?
https://www.w3schools.com/code/tryit.asp?filename=GE4HY567S31Q
推薦一個好用的線上工具 http://www.cssdesk.com/ 方便這種簡單測試
你的問題出在外層div,所以應該由它下手
將 display:inline-block 改為 float:left 即可
不過float雖然可以解決你這個部分的問題,但可能造成其他地方跑掉
所以還要再測試
<style>
.content_TestTable {
height: 20px;
padding: 3px 3px 3px 3px;
font-size: 10px;
font-family: Arial;
text-align:left;
vertical-align: top;
border: solid windowtext 1px;
margin:-1px 0 0 -1px;
table-layout: fixed;
/*font-size:0px;*/
/*padding:0;*/
/*margin:0;*/
}
.parent_div {
/*display:inline-block;*/
float:left
}
</style>
<div class='parent_div'>
<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='parent_div'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
littleit,此方式確實可行,跑版的部分可能會存在,因此這部分我再看看有沒有比較全面的作法可以達到,謝謝你!
一般需要密合式的做法,利用css的話就是如下大法
1.position定位法:frankychen 有提到。我就不說明。
2.表格式定義法:不過你說不想用,我就跳過。
3.萬用的float大法:這可能是最簡單的處理,只是得面臨跑版及瀏覽器版本的問題。
4.背景色劃線應用法:這招也可以,只是我想你不會用。因為有點麻煩。要搭配padding應用跟背景色處理。這招是我在特殊表現時常會使用這招。
基本上來說,這四種方法都有其各自配合的情況。沒有哪一種比較好還是比較不好。
只有適合不適合。
基本上依你目前看來,比較適合用的是表格式定義法最適合。可是偏偏說不想用表格式定義的方式。
如果想用簡單處理的。那就float大法吧。
謝謝浩瀚星空,我其他的部分是使用表格式定義法,只是目前這個case因為資料來源是直向的,無法直接使用表格式定義法跑迴圈橫向長出表格,故為了避免轉至list,才會使用目前的方式進行~
其實還是可以的。我簡單處理個給你思考
<div class="table">
<div class="tr"> <!--在這邊可能可以省略這一TR自已試試-->
<div class="td">
<div class="sub_table">
<div class="sub_td">a</div>
<div class="sub_td">b</div>
<div class="sub_td">n</div>
<div class="sub_td">d</div>
</div>
</div>
<div class="td">
<div class="sub_table">
<div class="sub_td">1</div>
<div class="sub_td">2</div>
<div class="sub_td">3</div>
<div class="sub_td">4</div>
</div>
</div>
</div>
</div>
這樣提點一下也是可以做到。這也有點是table包table的觀念在。
當然,兩個div並行的做法也是可以的。只是還是會碰到跑位的可能性,造成不對應。
一般我還是會建議這種。看你吧。
恩恩,謝謝你,不過這種方式的話,我一次就需要長出
<div class="sub_td">a</div>
<div class="sub_td">b</div>
<div class="sub_td">n</div>
<div class="sub_td">d</div>
但我在跑迴圈時得到的資料可能會是先長出a再長出1,因此無法使用水平的方式長資料,必須翻轉我得到的資料來源,那因為效能的考量,因此決定從長相去著手~
等等等
你的資料不是先
<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 class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
還是我誤會了??
如果資料是
voltage 100
Tmin 200
根本不需要做這個處理啊??
直接就可以用td來表現啊?
我一直以為你是為了分段式連結資料再苦腦。
才會告訴你上面這招的。
不好意思 > < 我怕我太笨沒有抓到你要告訴我的事情,請容我再詳細敘述一下...
我目前得到的資料會是一群list,
list.data[0]->
Voltage : 100
Tmin : 200
Tmax : 300
Tma : 4000
list.data[1]->
Voltage : 500
Tmin : 600
Tmax : 700
Tma : 800
list.data[2]->
Voltage : 900
Tmin : 1000
Tmax : 1100
Tma : 1200
因此,我如果使用一般table或是div模擬table,那我跑第一次迴圈的時候,會先撈取list.data[0].Voltage
放在第一格(100),接著跑第二次迴圈撈取list.data[1].Voltage
放在第二格(500),接著在撈取list.data[2].Voltage
放在第三格(900),到這邊第一列完成。
接著我要長出第二列的話,我就要再跑上面的迴圈一次,抓取Tmin的資料。
這樣的話,看起來應該要翻轉我的資料來源。
恩對啊 你應該要把資料邏輯跟頁面邏輯拆開,而不是要頁面邏輯照你的資料邏輯output 所以你應該先把list 轉成頁面好render的array 格式,看起來格式應該要長這樣(類似)
let data = [
{
title:"Voltage",
values:['100','500','900']
},
{
title:"Tmin",
values:['200','600','1000']
}
]
Voltage | 100 | 500 | 900 |
Tmin | 200 | 600 | 1000 |
<table>
{data.map(d =>{
return
<tr>
<td>
{d.title}
</td>
{
d.values(v =>{
return
<td>
{v}
</td>
})
}
</tr>
})}
</table>
那我將我上面的排法讓你了解一下。我的排法就是要給你確定用的
<div class="table">
<div class="tr"> <!--在這邊可能可以省略這一TR自已試試-->
<div class="td">
<div class="sub_table">
<div class="sub_tr">a</div>
<div class="sub_tr">b</div>
<div class="sub_tr">n</div>
<div class="sub_tr">d</div>
<!-- 這邊先標題 -->
</div>
</div>
<div class="td">
<div class="sub_table">
<!-- 第一個資料-->
<div class="sub_tr">1</div>
<div class="sub_tr">2</div>
<div class="sub_tr">3</div>
<div class="sub_tr">4</div>
</div>
</div>
<div class="td">
<div class="sub_table">
<!-- 第二個資料-->
<div class="sub_tr">1</div>
<div class="sub_tr">2</div>
<div class="sub_tr">3</div>
<div class="sub_tr">4</div>
</div>
</div>
<div class="td">
<div class="sub_table">
<!-- 第三個資料-->
<div class="sub_tr">1</div>
<div class="sub_tr">2</div>
<div class="sub_tr">3</div>
<div class="sub_tr">4</div>
</div>
</div>
</div>
</div>
可能我用sub_td讓你搞混了。其實那是直列排省略了tr@@"
我沒寫的很完整給你誤會了
只要去生成 這組資料,要幾個就幾個。
對的!是你所表達的意思沒錯~很感謝你的協助!你前面提集的四個方式讓我學到很多~感謝!
css的部分可以試試這樣的~
查查 box-sizing 的用法或許有幫助喔!
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-size: 0px;
}
.content_TestTable{
border: 1px solid gray;
padding:3px 5px;
font-size: 20px;
margin: -1px;
}
Re:,謝謝!
不過再嘗試使用這個方法,若新增第三個div的話,第三個會與第二個重疊,請問若是這樣的話,還可以怎麼調整呢?
你的意思是~html部分變成這樣嗎?
<div style='display:inline-block;'>
<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 style='display:inline-block;'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
<div style='display:inline-block;'>
<div class='content_TestTable'>1</div>
<div class='content_TestTable'>2</div>
<div class='content_TestTable'>3</div>
<div class='content_TestTable'>4</div>
</div>
噢對的!不好意思,剛剛嘗試了以後發顯沒有此問題~感謝你的協助!
https://www.w3schools.com/code/tryit.asp?filename=GE4O2AU2KV51
不會~~
不好意思,另外想詢問
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-size: 0px;
}
是指所有的樣式都套用這個css嗎?
但我若調整所有css裡面都放這段,好像就不會作用了呢?
https://www.w3schools.com/code/tryit.asp?filename=GE4O6VO5H7PM
我是比較建議一開始就將所有標籤的預設值都歸零
以你目前的狀況可以直接多寫一個
body{
font-size: 0px;
}
簡化一下是這樣
body{
font-size: 0px;
}
.col_TestTable {
display:inline-block;
}
.content_TestTable{
border: 1px solid gray;
box-sizing: border-box;
padding:3px 5px;
font-size: 20px;
margin: -1px;
}
好的!目前看潛水員跟yuwen的方式好像可以直接針對div內做調整,因為html有其他人共用,怕會影響到,所以目前會先獨立調整,非常謝謝你的幫忙~
以你最原始的寫法,只要再最外曾加上font-size: 0px;
就可以了,原因就如淺水員大大所說的。
<div style='font-size: 0px;'>
<div style='display:inline-block;'>
<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 style='display:inline-block;'>
<div class='content_TestTable'>100</div>
<div class='content_TestTable'>200</div>
<div class='content_TestTable'>300</div>
<div class='content_TestTable'>400</div>
</div>
</div>
另外也建議從CSS的基礎來學起,站上有Amos老師的金魚教學系列,你所遇到的問題在教學影片裡有提到,建議花點時間學習