LoginSignup
0
0

More than 1 year has passed since last update.

ページレイアウトのサイドバーにfiletreeを入れる

Last updated at Posted at 2023-03-23

chatGPTにページレイアウト構成を正確に指定して、サイドバーにfiletreeを入れる。

以前chatGPTに作ってもらったページレイアウト構成のプログラムと、ファイルツリーのプログラムを組み合わせたかった。

しかし、前と同じ質問をしても同じプログラムを返してくれないので思い通りにはならなかった。
chatGPTに作ってもらった2つ以上のプログラムを結合したいときは、手動の方が早い。

具体的に2つのプログラムを指定して、結合したプログラムを要求すれば上手くいくような気がするが、プログラムの入力方法が分からない。

何回か質問し直したり、手直ししたりして完成した。
スクリーンショット 2023-03-23 17.04.09.png
下にプログラムを書く。

htmlファイル

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Grid Layout with FileTree Example</title>
    <link rel="stylesheet" href="gridLayout.css" />
    <link rel="stylesheet" href="fileTree.css" />
</head>
<body>
    <header>Header</header>
    <aside>
        <div class="file-tree">
            <ul>
                <li>
                    <span class="folder">Root</span>
                    <ul>
                        <li>
                            <span class="folder">Folder 1</span>
                            <ul>
                                <li><span class="file">file1.txt</span></li>
                                <li><span class="file">file2.txt</span></li>
                            </ul>
                        </li>
                        <li>
                            <span class="folder">Folder 2</span>
                            <ul>
                                <li><span class="file">file3.txt</span></li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </aside>
    <main>Main Content</main>
    <footer>Footer</footer>
    <script src="fileTree.js"></script>
</body>
</html>

gridLayout.css

ページレイアウトのスタイルを指定するcssファイル

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    display: grid;
    grid-template-columns: 200px 1fr;
    grid-template-rows: auto 1fr auto;
    grid-template-areas:
        "header header"
        "sidebar main"
        "footer footer";
    height: 100vh;
    width: 100vw;
}

header {
    grid-area: header;
    background-color: #c09af3;
    display: flex;
    justify-content: center;
    align-items: center;
}

aside {
    grid-area: sidebar;
    background-color: #f8ccf5;
    display: flex;
    justify-content: flex-start;
    align-items: flex-start;
    padding: 5px;
}

main {
    grid-area: main;
    background-color: #fdfdfd;
    display: flex;
    justify-content: center;
    align-items: center;
}

footer {
    grid-area: footer;
    background-color: #c09af3;
    display: flex;
    justify-content: center;
    align-items: center;
}

fileTree.js

filetreeのフォルダの開閉機能のJavascriptファイル

document.addEventListener('DOMContentLoaded', function () {
    const folders = document.querySelectorAll('.folder');

    for (let i = 0; i < folders.length; i++) {
        folders[i].addEventListener('click', function () {
            this.classList.toggle('open');
            let ul = this.nextElementSibling;

            if (ul) {
                ul.style.display = ul.style.display === 'none' ? 'block' : 'none';
            }
        });

        let ul = folders[i].nextElementSibling;

        if (ul) {
            ul.style.display = 'none';
        }
    }
});

fileTree.css

fileTreeのスタイルを指定するcssファイル

.file-tree ul {
    list-style-type: none;
    padding-left: 20px;
}

.folder,
.file {
    cursor: pointer;
}

.folder:before {
    content: "▶";
    display: inline-block;
    margin-right: 6px;
}

.folder.open:before {
    content: "▼";
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0