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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

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

CSS

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

Q&A

解決済

1回答

376閲覧

htmlのグリッドで文字列を90度回転させたい

takanaweb5

総合スコア359

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

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

CSS

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

0グッド

0クリップ

投稿2023/11/25 04:07

編集2023/11/25 04:46

実現したいこと

htmlで「お絵かきロジック」を表示したいと考えています

以下のような表示をしようと考えています
イメージ説明

全体をgridスタイルを使って実現しようと考えています。
1行目のcssのスタイルの設定がどうすれば良いかわかりません
1行目のヒントがサンプルのように所定の位置に収まるようにかつ下寄せになって欲しいです。
別にgridスタイル以外でも実現できれば良いです。
ただし、個々のマスをクリックした時に、クリックイベントが発生するような仕組みは実現出来るような方法でお願いします。(マスをクリックすると■→□となるようなイベントを実装するので)

試したこと

css に
transform: rotate(90deg)
を設定したところ、文字列が90度回転することを確認しましたが、位置や寄せが思い通りになりません

実行結果
イメージ説明

該当のソースコード

html

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Dynamic Random Grid</title> 7 <h1>お絵かきロジック</h1> 8 <div class="grid-container"></div> 9 <style> 10 .grid-container { 11 display: grid; 12 gap: 1px; 13 grid-template-columns: auto repeat(var(--numCols), var(--cellSize)); 14 grid-template-rows: auto repeat(var(--numRows), var(--cellSize)); 15 width: fit-content; 16 height: fit-content; 17 } 18 19 .v-hint { 20 color: blue; 21 transform: rotate(90deg); /* テキストを左90度回転 */ 22 transform-origin: top; /* 回転の基準点を指定 */ 23 white-space: nowrap; /* テキストが折り返されないようにする */ 24 border: 1px solid #000; 25 text-align: right; /* 文字列を下寄せする */ 26 vertical-align: bottom; /* 文字列を左寄せする */ 27 height: fit-content; 28 } 29 30 .h-hint { 31 height: var(--cellSize); 32 color: red; 33 align-items: center; 34 justify-content: center; 35 border: 1px solid #000; 36 } 37 38 .cell { 39 width: var(--cellSize); 40 height: var(--cellSize); 41 display: flex; 42 align-items: center; 43 justify-content: center; 44 border: 1px solid #000; 45 } 46 </style> 47 </head> 48 <body> 49 <script> 50 function generateRandomGrid() { 51 // 行数と列数を動的に変更 52 const numRows = 6; 53 const numCols = 5; 54 const cellSize = '20px'; 55 document.documentElement.style.setProperty('--cellSize', cellSize); 56 document.documentElement.style.setProperty('--numCols', numCols - 1); 57 document.documentElement.style.setProperty('--numRows', numRows - 1); 58 59 const gridContainer = document.querySelector('.grid-container'); 60 gridContainer.innerHTML = ''; // グリッドをクリア 61 62 for (let row = 0; row < numRows; row++) { 63 for (let col = 0; col < numCols; col++) { 64 const cell = document.createElement('div'); 65 if (row === 0 && col === 0) { 66 cell.innerText = col.toString().repeat(col); 67 } else if (row === 0 && col !== 0) { 68 //縦ヒントクラスを適用 69 cell.classList.add('v-hint'); 70 cell.innerText = col.toString().repeat(col); 71 } else if (row !== 0 && col === 0) { 72 //横ヒントクラスを適用 73 cell.classList.add('h-hint'); 74 cell.innerText = row.toString().repeat(row); 75 } else { 76 cell.classList.add('cell'); 77 cell.innerText = '■'; 78 } 79 gridContainer.appendChild(cell); 80 } 81 } 82 } 83 84 // 初回のグリッド生成 85 generateRandomGrid(); 86 </script> 87 </body> 88</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

transform はフローからはみ出してしまうので、writing-mode を使いましょう。

css

1.v-hint { 2 color: blue; 3 writing-mode: vertical-rl; 4 white-space: nowrap; /* テキストが折り返されないようにする */ 5 border: 1px solid #000; 6 text-align: right; /* 文字列を下寄せする */ 7 line-height: 1; 8}

投稿2023/11/25 05:06

int32_t

総合スコア21929

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

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

takanaweb5

2023/11/25 06:26

ありがとうございました。 思った内容が実現出来ました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問