Kviewer(新バージョン)で下記を実装したいと考えております。
・テーブルの項目ごとに幅を調整したい
・テーブルのヘッダーを固定したい
CSSでのこちらの書き方をご教授いただけますでしょうか。。。
自分は以下のCSSを2つ適用し実装しています
テーブルのヘッダーを固定:tableView.css
テーブルの項目ごとに幅を調整:tableColumn.css
まだ試行錯誤しているところもありますので、最後の注意点もお読みください。
tableView.css
/*
新リストビューでテーブルのヘッダーを固定し、背景色を白と薄いグレーの交互にする
1. テーブルのカラムをディスプレイに収まるようにする
2. テーブルのヘッダーを固定する
3. テーブルの背景色を交互にする
4. セル内のテキストを折り返す
ヘッダーの設定によるtopの値
1. ヘッダー/ロゴあり、ヘッダーコンテンツ(リッチテキスト)のテキスト書式がH1
2. ヘッダー/ロゴなし、ヘッダーコンテンツ(リッチテキスト)のテキスト書式がH1
|Num|header|kv-record-menu|kv-list-head th|kv-user-content-side|
| 1 | 0px | 110px | 188px | 188px |
| 2 | 0px | 62px | 140px | 140px |
*/
/*
変数定義
*/
:root {
/*
タイトルの高さに応じて変更する
デフォルトはヘッダー/ロゴなし、ヘッダーコンテンツ(リッチテキスト)のテキスト書式がH1
*/
--tableView-kv-record-menu-top-value: 62px;
/* kv-record-menuのtop値+78pxに設定するとちょうど良い */
--tableView-kv-list-head-th-top-value: calc(var(--tableView-kv-record-menu-top-value) + 78px);
/* 背景色 */
--tableView-backgroundColor-LIGHT_BLUE: rgb(239, 242, 248);
--tableView-backgroundColor-LIGHT_GRAY: rgb(249, 250, 250);
/* ボーダー色 */
--tableView-borderColor-LIGHT_GRAY: rgb(238, 238, 238);
}
/* --- 1. テーブルのカラムをディスプレイに収まるようにする --- */
/*
テーブル全体のスタイル
*/
table {
/* 列幅を固定し全ての列をディスプレイに収める */
table-layout: fixed;
}
/* --- 2. テーブルのヘッダーを固定 --- */
/*
ヘッダー(タイトル)領域
*/
header {
position: sticky;
z-index: 1;
top: 0px;
background-color: var(--tableView-backgroundColor-LIGHT_BLUE);
}
/*
検索フォーム・並び替え・パンくず等を囲う領域の要素
z-indexを設定すると、検索ボタンを押したとき、ポップアップがヘッダーの奥に表示される
*/
.kv-record-menu {
position: sticky;
background-color: var(--tableView-backgroundColor-LIGHT_BLUE);
top: var(--tableView-kv-record-menu-top-value);
}
/*
テーブルヘッダー領域
*/
.kv-list-head th {
position: sticky;
z-index: 2;
background-color: var(--tableView-backgroundColor-LIGHT_GRAY);
top: var(--tableView-kv-list-head-th-top-value);
/* 上下のボーダーは疑似要素で描画。ズーム倍率を拡大したときヘッダーが少し動くことを防止 */
border-top: none;
border-bottom: none;
}
「いいね!」 1
続きです
/*
テーブルヘッダーのボーダーを疑似要素で描画
*/
.kv-list-head th::before,
.kv-list-head th::after {
content: "";
position: absolute;
left: 0px;
width: 100%;
background-color: var(--tableView-borderColor-LIGHT_GRAY);
/* ボーダーの厚み */
height: 1px;
/* クリックや操作に影響を与えないようにする */
pointer-events: none;
}
/*
疑似要素で描画する上のボーダー
*/
.kv-list-head th::before {
top: -1px;
}
/*
疑似要素で描画する下のボーダー
*/
.kv-list-head th::after {
bottom: -1px;
}
/*
テーブルヘッダーの固定
overlofw: visible; に設定する
*/
.overflow-x-auto {
overflow: visible;
}
/*
サイドコンテンツ
*/
.kv-user-content-side {
/* kv-list-head thと同じ値に設定する */
top: var(--tableView-kv-list-head-th-top-value);
}
/* --- 3. テーブルの背景色を交互にする --- */
/*
テーブルの背景色を交互にする
*/
tr:nth-child(even) {
background: var(--tableView-backgroundColor-LIGHT_GRAY);
}
/* --- 4. セル内のテキストを折り返す --- */
/*
テキストの折り返し設定
*/
td[data-field-type='SINGLE_LINE_TEXT'],
td[data-field-type='MULTI_LINE_TEXT'],
td[data-field-type='RICH_TEXT'],
td[data-field-type='NUMBER'],
td[data-field-type='RADIO_BUTTON'],
td[data-field-type='MULTI_SELECT'],
td[data-field-type='DATE'],
td[data-field-type='DATETIME'],
td[data-field-type='LINK'],
td[data-field-type='CHECK_BOX'],
td[data-field-type='DROP_DOWN'],
td[data-field-type='TIME'],
td[data-field-type='FILE'] {
/* デフォルトでテキストを折り返す */
white-space: normal;
/* 長い単語を折り返す */
word-wrap: break-word;
/* はみ出し部分を隠す */
overflow: hidden;
}
「いいね!」 1
続きです
tableColumn.css
/*
新リストビューのカラム設定
1. リストビューのカラムによってwidthの値を変える
2. ヘッダーを中央寄せにする
*/
/*
フィールドコードが文字列__1行_のカラム幅を設定
*/
th[data-field-code='文字列__1行_'],
td[data-field-code='文字列__1行_'] {
width: 50px;
}
/*
1列目~3列目までの見出しを中央寄せにする
*/
table th:nth-child(1)[data-field-code='文字列__1行_'] .flex,
table th:nth-child(2)[data-field-code='日付'] .flex,
table th:nth-child(3)[data-field-code='日時'] .flex {
/* `flex`クラスの中央寄せ */
justify-content: center;
display: flex;
align-items: center;
}
注意点
CSS内のコメントで概ね理解していただけるかと思いますが、いくつか注意点がございます。
- 長いコードとなっているため、スマートな方法がありましたら自分もお教えいただきたいです。
- ヘッダーを固定するにあたり、ヘッダーコンテンツのコンテンツタイプをリッチテキスト、H1に設定しています。それ以外の場合は変数定義にある–tableView-kv-record-menu-top-value: 62px;の値を変更して調整してください。
- セル内のテキスト折り返し設定は全てのフィールドを設定していないため、適宜追加してください。
- 他のCSSで:rootを設定している場合、変数名が衝突していないか確認してください。
- 背景色を交互に設定していますので不要でしたら、以下のCSSを削除してください。
tr:nth-child(even) {
background: var(--tableView-backgroundColor-LIGHT_GRAY);
}
「いいね!」 2
ありがとうございます!実現できました!大変助かりました!
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。