odecember1205
@odecember1205

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

HTMLとCSSでテキストの固定方法が分からないです

解決したいこと

下の画像は左側にアコーディオンメニューがあり、中央から右側はテキストスペースとなっております。
今、タイトルとテキストを記述しましたが、アコーディオンメニューのラベルをクリックする度に2枚目のように下に下がってきます。
実現したいことは3枚目の画像のように、アコーディオンメニューのラベルをクリックしてもタイトルとテキストは一定の位置に固定できることです。
 CSSの部分で何か追加すれば実現できますが何を書いたら良いか分からず困っております。
何か解決方法があれば教えてください。
できれば私が書いたプログラミングをそのまま使い(スタイルは変更せずに)、上記が実現出来るか押していただきたいです。

スクリーンショット 2022-09-29 20.50.06.png

スクリーンショット 2022-09-29 20.50.22.png

IMG_0806.jpg

該当するソースコード

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="style.css">
  <title>demo</title>
</head>
<body>
  <div>
    <div class="menu">
      <input id="menu01" type="checkbox" name="tabs">
      <label for="menu01">メニュー1</label>
        <div class="link">
          <a href="page1.1.html">リンク1</a><br>
          <div class="menu1">
            <input id="menu01_1" type="checkbox" name="tabs">
              <label for="menu01_1">リンク2</label>
              <div class="link">
                <a href="page1.2.1.html">リンク3</a><br>
                <a href="page1.2.2.html">リンク4</a><br>
                <a href="page1.2.3.html">リンク5</a><br>
              </div>
          </div>
        </div>
    </div>
  </div>
    <div class="contents">
        <h1>タイトル</h1>
        <p>hello world</p>
    </div>
</body>
</html>
/*-----------------
メニューバーのデザイン
-------------------*/
.menu {
	position: relative; left:1px;
	overflow: hidden;
	width: 24%;
	color: #000000;
}
.menu input {
	position: absolute;
	z-index: -1;
	opacity: 0;
}
.menu label {
	font-weight: bold;
	line-height: 3;
	position: relative;
	display: block;
	padding: 0 0 0 1em;
	cursor: pointer;
	margin: 0 0 1px 0;
	background: #87cefa;
	font-size: 13px;
}
/* .menu1 label {
	font-weight: 30px;
	line-height: 3;
	position: relative;
	display: block;
	padding: 0 0 0 1em;
	cursor: pointer;
	margin: 0 0 1px 0;
	background: #add8e6;
	font-size: 13px; */

.menu .link {
	overflow: hidden;
	max-height: 0;
	-webkit-transition: max-height 0.35s;
	transition: max-height 0.35s;
	color: #333333;
	background: #afeeee;
  	height: auto;
}
.menu .link a {
  margin: 1em;
  width: 450px; /* ボックスの横幅を指定する */
  font-size: 13px; /* フォントのサイズを指定する */
  line-height: 45px; /* 行の高さを実数値+単位(px)で指定する */ 
  color: #000000;
}
/* :checked */
.menu input:checked ~ .link {
	max-height: 60em; 
}
.menu1 input:checked ~ .link {
	max-height: 60em; 
}
/* Icon */
.menu label::after {
	line-height: 3;
	position: absolute;
	top: 0;
	right: 0;
	display: block;
	width: 3em;
	height: 3em;
	-webkit-transition: all 0.35s;
	transition: all 0.35s;
	text-align: center;
}
.menu input[type=checkbox] + label::after {
	content: '+';
}
.menu input[type=checkbox]:checked + label::after {
	transform: rotate(315deg);
}

/*-----------------
本文のデザイン
-------------------*/
.contents{
    text-align:  center;        /* 中央寄せ */ 
}
0

4Answer

.menu {
 :
 :
}

内のpositionrelativeではなくfixedにすればよいかと思います。

0Like

ご回答ありがとうございます。
確かに「fixed」に変更すると、テキストが中央の上に固定されましたが、実際の画面は下のようにいくつものラベルとリンクがございます。

スクリーンショット 2022-09-29 22.24.56.png

しかし、「fixed」に変更すると、ラベルとリンクが一つとなってしまいます。
「relative」はラベルとリンクの数は変更されません。
スクリーンショット 2022-09-29 22.27.22.png

私が実現したいことは、ラベルやリンクメニュの数はそのままで、テキスト部分を固定できるようにしたいです。
解決方法がありましたら教えてください

0Like

ご回答ありがとうございます。
確かにおっしゃる通りfixedに変更することにより、タイトルとテキストは固定されますが、
上記の通り、左側のラベルが一つしか表示されません。
実際作りたいプログラムはラベルとリンクは複数存在します。

私が実現したいことは、ラベルとリンクはそのままにしたいです。
positionをrelativeのままですと、メニューバーはすべて表示されます。
fixedに変更すると、一番最後(ここではメニュー2)のみが表示され、メニュー1が表示されないです。

該当するソースコード

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="style.css">
  <title>demo</title>
</head>
<body>
  <div>
    <div class="menu">
      <input id="menu01" type="checkbox" name="tabs">
      <label for="menu01">メニュー1</label>
        <div class="link">
          <a href="page1.1.html">リンク1</a><br>
          <div class="menu1">
            <input id="menu01_1" type="checkbox" name="tabs">
              <label for="menu01_1">リンク2</label>
              <div class="link">
                <a href="page1.2.1.html">リンク3</a><br>
                <a href="page1.2.2.html">リンク4</a><br>
                <a href="page1.2.3.html">リンク5</a><br>
              </div>
          </div>
        </div>
    </div>
    <div class="menu">
      <input id="menu02" type="checkbox" name="tabs">
      <label for="menu02">メニュー2</label>
        <div class="link">
          <a href="page1.2.html">リンク1</a><br>
          <div class="menu1">
            <input id="menu01_2" type="checkbox" name="tabs">
              <label for="menu01_2">リンク2</label>
              <div class="link">
                <a href="page1.2.1.html">リンク3</a><br>
              </div>
          </div>
        </div>
    </div>
  </div>
  <div class="contents">
    <h1>タイトル</h1>
    <p>hello world</p>
  </div>
</body>
</html>

該当するソースコード

/*参考資料
https://copypet.jp/codedescription/623/ 
*/

/*-----------------
メニューバーのデザイン
-------------------*/
.menu {
	position: fixed; left:1px;
	overflow: hidden;
	width: 24%;
	color: #000000;
}
.menu input {
	position: absolute;
	z-index: -1;
	opacity: 0;
}
.menu label {
	font-weight: bold;
	line-height: 3;
	position: relative;
	display: block;
	padding: 0 0 0 1em;
	cursor: pointer;
	margin: 0 0 1px 0;
	background: #87cefa;
	font-size: 13px;
}
/* .menu1 label {
	font-weight: 30px;
	line-height: 3;
	position: relative;
	display: block;
	padding: 0 0 0 1em;
	cursor: pointer;
	margin: 0 0 1px 0;
	background: #add8e6;
	font-size: 13px; */

.menu .link {
	overflow: hidden;
	max-height: 0;
	-webkit-transition: max-height 0.35s;
	transition: max-height 0.35s;
	color: #333333;
	background: #afeeee;
  	height: auto;
}
.menu .link a {
  margin: 1em;
  width: 450px; /* ボックスの横幅を指定する */
  font-size: 13px; /* フォントのサイズを指定する */
  line-height: 45px; /* 行の高さを実数値+単位(px)で指定する */ 
  color: #000000;
}
/* :checked */
.menu input:checked ~ .link {
	max-height: 60em; 
}
.menu1 input:checked ~ .link {
	max-height: 60em; 
}
/* Icon */
.menu label::after {
	line-height: 3;
	position: absolute;
	top: 0;
	right: 0;
	display: block;
	width: 3em;
	height: 3em;
	-webkit-transition: all 0.35s;
	transition: all 0.35s;
	text-align: center;
}
.menu input[type=checkbox] + label::after {
	content: '+';
}
.menu input[type=checkbox]:checked + label::after {
	transform: rotate(315deg);
}

/*-----------------
本文のデザイン
-------------------*/
.contents{
    text-align:  center;        /* 中央寄せ */ 
}

スクリーンショット 2022-09-30 10.16.24.png

0Like

実際の画面は下のようにいくつものラベルとリンクがございます。

最初の質問のコードにはメニュー1しか無いので、そういうことは最初に言ってもらわなければ分かりようがありません。

メニュー全体を囲む要素にクラス名を付けて、その要素のpositionfixedにしてみてください。

index.html
 <body>
-   <div>
+   <div class="menu_container">
     <div class="menu">
       <input id="menu01" type="checkbox" name="tabs">
       <label for="menu01">メニュー1</label>
style.css
+ .menu_container {
+   position: fixed;
+   width: 100%;
+ }
0Like

Comments

  1. @odecember1205

    Questioner

    ご回答ありがとうございます。
    私の説明不足で回答者様を困らせてしまい誠に申し訳ございませんでした。

    私の思い通りに実現出来ました。
    数日間葛藤していたことなので、成功して大変嬉しいです。
    また、分からないことがございましたら、質問させていただきます。
    ありがとうございました

Your answer might help someone💌