项目实地:也可以在 【微信小程序】搜索体验:xny.handbook
另一个体验项目:官网
一、效果展示
二、代码展示
(1)html 部分
<view class="table">
<view class="tr">
<view class="th">股票代码 </view>
<view class="th">建议投金额 </view>
<view class="th">实际投金额 </view>
<view class="th">建议股数 </view>
<view class="th">实际股数 </view>
<view class="th">◎原单价 </view>
<view class="th">涨出-单价 ↑ </view>
<view class="th">跌出+单价 ↓ </view>
<view class="th">+○预赚 </view>
<view class="th">+●实赚 </view>
<view class="th">-○预赔 </view>
<view class="th">-●实赔 </view>
<view class="th">操作 </view>
</view>
<block v-for="(item, index) in tableUpData" :key="index">
<view class="tr">
<view class="td">{{item.stockCode}}</view>
<view class="td">{{ item.calculAdvsIvsMoney }}</view>
<view class="td">{{ item.calculRealIvsMoney }}</view>
<view class="td">{{ item.tradeCount }}</view>
<view class="td">{{ item.tradeRealCount }}</view>
<view class="td">{{ item.unitPriceNow }}</view>
<view class="td"> <span :style="fontColor.up" > {{ item.upOutUnitPrice }} </span> </view>
<view class="td"> <span :style="fontColor.down" > {{ item.downOutUnitPrice }} </span> </view>
<view class="td"> <span :style="fontColor.up" > {{ item.expectIncomeMoney }} </span> </view>
<view class="td"> <span :style="fontColor.up" > {{ item.expectIncomeMoneyReal }} </span> </view>
<view class="td"> <span :style="fontColor.down" > {{ item.expectOutcomeMoney }} </span> </view>
<view class="td"> <span :style="fontColor.down" > {{ item.expectOutcomeMoneyReal }} </span> </view>
<view class="td">
<view class="uni-group">
<button @tap="addOrUpdateOne(item, 'addOne')" class="uni-button" style="background-color: #e1f3d8; color: #09bb07;" size="mini" type="primary" v-if="isNewStockCode">新收</button>
<button @tap="addOrUpdateOne(item, 'updateOne')" class="uni-button" style="background-color: #e1f3d8; color: #e6a23c;" size="mini" type="warn" v-if="isNewStockCode==false">更新</button>
</view>
</view>
</view>
</block>
</view>
(2)css 部分
/* ----------------------- */
/* 固定首行首列 */
.table-container{
width: 100%;
height: 70vh;
position: absolute;
}
/* 下面这里必须要有overflow:auto;,结合上面外部的 position: absolute; 才可以实现首行首列固定 */
.table{
width: 100%;
max-height: 70vh;
overflow:auto;
position: relative;
}
.tr {
display: flex;
min-width: max-content; /* 保留内容宽度基准 */
width: 100%; /* 至少充满容器宽度 */
}
.th,.td {
flex: 1; /* 关键:自动分配剩余空间 */
min-width: 100px; /* 对每个单元格设置宽高, 宽同表格一致 */
height: 30px;
/* 每个格背景设置透明, 滑动的时候就好隐藏 */
/* background-color: #fff; */
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
color: #6a6a6a;
border-top: 1px solid #e8e8e8; /* 边框 */
border-right: 1px solid #e8e8e8; /* 右侧边框 */
border-bottom: 1px solid #e8e8e8; /* 底部边框 */
}
.th{
/* 设置背景色, 滑动的时候就不会重叠字样了. */
background-color: #f4f6ff;
text-align: center;
font-weight: bold;
}
/* 表头部分 */
.tr:first-child {
/* 将第一个格设置 sticky, 往上滑则固定住 */
position: sticky;
top: 0;
/* 提升表格的重叠权重, 显示出来, 同时将内容设置为透明, 就实现了固定表头的效果 */
z-index: 2;
background-color: aqua;
}
/* 隔行背景色 */
.tr:nth-child(even) .td {
background-color: #f8f9fa; /* 偶数行 */
}
.tr:nth-child(odd) .td {
background-color: #ffffff; /* 奇数行 */
}
/* 首行第一个单元格进行固定 */
/* 每行第一个单元格进行固定, 宽度和表格一致对齐 */
.th:first-child,
.td:first-child{
position: sticky;
width: 100px; /* 固定宽度不参与flex分配。最好与 .th,.td 中 min-width 值一致,否则会出现 错乱对不齐 */
left: 0;
z-index: 1;
/* flex: 0 0 150rpx; 固定宽度不参与flex分配 */
/* background-color: aquamarine; */
/* background-color: #f4f6ff !important; /* 覆盖隔行颜色 */
}
/* 将滚动条设置隐藏 */
::-webkit-scrollbar {
width: 0;
height: 0;
}
/* 防止列挤压 */
.th:not(:first-child),
.td:not(:first-child) {
flex-shrink: 0;
}
三、参考内容:
1. uni-app下表格纯CSS方案的固定首行首列,最简单的实现方式