質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

601閲覧

【CSS】テーブルの幅固定について

Pickerchu

総合スコア13

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/04/23 08:55

編集2019/04/24 08:43

テーブルの幅を固定する方法について。

現在、各データを入れ込むテーブルを作成しております。

スクロール対応の為、display:brock;を使用しています。

データの文字数ごとに数pxのズレが起きてしまいます。
データの値が指定幅を超えると、収まるように自動で幅が広がってしまうので
max-width、min-widthで同じ数値を指定したところ
幅が動くことなく、問題は今のところ無いです。

この方法が適切なものか、他の記述方法などがございましたら、ご教授お願いいたします。

現在実装中の再現コードになります。

HTML

1<table> 2 <thead> 3     <tr> 4 <th width="30">ID</th> 5 <th width="100">名前</th> 6     </tr> 7 </thead> 8 9 <tbody> 10 <tr> 11 <td>12345678</td> 12 <td>手良 帝流</td> 13 </tr> 14 <tr> 15 <td>9999</td> 16 <td>目賀 帝流子</td> 17 </tr> 18 </tbody> 19</table>

css

1 2table { 3 width:130px; 4} 5thead { 6 display: block; 7 width: 130px; 8} 9tbody { 10 display: block; 11 width: 147px; 12 overflow-y: scroll; 13} 14tbody td:nth-child(1){ 15 min-width: 30px; 16 max-width: 30px; 17 // ↓ 文字数がオーバーしたとき"…"ではみ出した文字を省略 18 overflow: hidden; 19 text-overflow: ellipsis; 20 white-space: nowrap; 21} 22tbody td:nth-child(2){ 23 min-width: 100px; 24 max-width: 100px; 25 // ↓ 文字数がオーバーしたとき"…"ではみ出した文字を省略 26 overflow: hidden; 27 text-overflow: ellipsis; 28 white-space: nowrap; 29}
ID   名前    
1234...手良 帝流
9999目賀 帝流子

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshinavi

2019/04/23 11:43

「width」の指定で、ズレが発生する「table全体のコード」を提示されると良いかと思います。
Pickerchu

2019/04/24 07:45

ご指摘ありがとうございます。 修正いたします。
guest

回答2

0

親要素によりますがdisplay:block;でblock化してはどうですか?

table td:nth-child(1){ display:block; min-width: 30px; max-width: 30px; // ↓ 文字数がオーバーしたとき"…"ではみ出した文字を省略 overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } table td:nth-child(2){ display:block; min-width: 60px; max-width: 60px; // ↓ 文字数がオーバーしたとき"…"ではみ出した文字を省略 overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

投稿2019/04/23 13:00

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Pickerchu

2019/04/24 07:44

回答ありがとうございます。 コメントで指摘されたのですが、tableのコードを表記せず説明不足でした。、 tableの方でtheadとtbodyでdisplay:brockを行っています。 理由はtbodyのスクロールの為です。 説明が足らず、申し訳ございません。
guest

0

データの文字数ごとに数pxのズレが起きてしまいます。

文字列を特定の長さに切れば?Javascript少し触るけど、これならカット出来る。

JS

1/** 2 * 文字列のバイト数を取得する 3 * @return {int} 4 */ 5String.prototype.bytes = function () { 6//https://zukucode.com/2017/04/javascript-string-length.html 7 var length = 0; 8 for (var i = 0; i < this.length; i++) { 9 var c = this.charCodeAt(i); 10 if ((c >= 0x0 && c < 0x81) || (c === 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) { 11 length += 1; 12 } else { 13 length += 2; 14 } 15 } 16 return length; 17}; 18 19/** 20 * 特定の位置で文字列を削除する。 21 * @param {string} str 22 * @param {string} num - 左から数えた値 23 * @return {string} 24 */ 25function cutString(str,num){ 26 var length = str.bytes(); 27 if (length <= num) return str; 28 var sub = length - num; 29 30 if (length == str.length){ 31 return str.slice(0,-sub); 32 }else{ 33 sub = parseInt(sub / 2); 34 return str.slice(0,-sub); 35 } 36 return str; 37}

投稿2019/04/23 09:04

編集2019/04/23 09:05
stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Pickerchu

2019/04/23 09:13

迅速なご回答ありがとうございます。 実際のテーブルは10項目程ございまして、 幅の指定数値もバラバラなのでcssで実装したいと考えています... なのでもうしばらく他のご回答を待ちたいと思います。 cssでの実装が難しそうでしたら stdioさんのご回答を参考に修正しようと思います。
stdio

2019/04/24 01:01 編集

あとすみません。よく分からなかったのが、「データの文字数ごとに数pxのズレが起きてしまいます。」っておっしゃってましたけど、半角英数字と日本語混じりの文言がずれてしまうのですか? あと改行を行っていいのかで答え変わりますね。
Pickerchu

2019/04/24 07:38

返信ありがとうございます。 「データの文字数ごとに数pxのズレが起きてしまいます。」 上記の文は自分でもわかりにくい説明でした。すみません。 widthを指定し、そのセルの中に入るデータが指定幅を超えると、 データが収まるように幅が自動で広がってしまうということです。 そのためmax-widthで最大幅を指定しました。
Pickerchu

2019/04/24 07:39

改行はしないため、はみ出したデータは「...」で省略という形にしております。
stdio

2019/04/24 08:42

改行もなしなら、せめて表示だけは省略した方が良いですね。幅が取れない環境では特に重要な役目を果たします。ただマウスカーソルをあてるとフルで表示されるなどの機能も必要になるので、難しい範囲だと思います。
Pickerchu

2019/04/24 09:03

おっしゃる通りでございます。 今回は省略が可能なので助かっていますが、 省略をしてはいけない場合は他の方法で行わないといけませんね...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問