[CSS]多階層のリスト要素をツリー状にデザインするスタイルシートのテクニック

画像を使用せずに、多階層のリストをツリー状にデザインするスタイルシートのテクニックを紹介します。

ピュアCSSなので、リストのアイテムは増やしても減らしても、ツリー状のスタイルを適用できます。

デモのキャプチャ

実際の動作は、下記ページでご確認ください。

サイトのキャプチャ

Parent child vertical list menu

コードはこんな感じです。

HTML

リストは階層ごとに入れ子を使用します。
コードは、CodeのjQueryまで。

<nav class="nav">
	<ul class=list>
		<li>
			<a href="#">Home</a>
			<ul>
				<li>
					<a href="#">Lab</a>
					<ul>
						<li>
							<a href="#">Code</a>
							<ul>
								<li>
									<a href="#">Html</a>
								</li>
								<li>
									<a href="#">Css</a>
								</li>
								<li>
									<a href="#">Jquery</a>
								</li>
							</ul>
						</li>
以下略

CSS

階層ごとのインデントやツリーに使用しているラインは、全てスタイルシートで実装されています。日本語で使用する場合は、font-size, line-heightを調整した方がよいと思います。

@import url(http://fonts.googleapis.com/css?family=Fjalla+One);
*,
*:before,
*:after {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
* {
    margin: 0;
    padding: 0;
    border: 0 none;
    position: relative;
    -webkit-transition: all .4s;
    -moz-transition: all .4s;
    transition: all .4s;
}
html,
body {
    width: 100%;
    height: 100%;
    background: RGBA(0, 58, 97, 1);
    font-family: 'Fjalla One', sans-serif;
    font-size: 18px;
}
h1 {
    color: #ccc;
    text-align: center;
    font-size: 1.5rem;
    padding-top: 40px;
    text-shadow: rgba(0,0,0,0.6) 1px 0, rgba(0,0,0,0.6) 1px 0, rgba(0,0,0,0.6) 0 1px, rgba(0,0,0,0.6) 0 1px;
}
.nav {
    margin: 20px auto;
    left: 60px;
    width: 455px;
    min-height: auto;
}
ul.list,
ul.list ul {
    list-style-type: none;
    margin:0;
    padding:0;
}
ul.list ul {
    margin-left:10px; 
    position:relative;
}
ul.list ul:before {
    content:"";
    display:block;
    width:0;
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    border-left:1px solid #ccc;
}
ul.list li  {
    margin:0;
    padding:3px 12px;
    text-decoration: none;
    text-transform: uppercase;
    font-size:13px;
    line-height:20px;
    color:#ccc;
    font-weight:normal;
    position:relative;
}
ul.list li a { 
    text-decoration: none;
    text-transform: uppercase;
    font-size:14px;
    line-height:20px;
    color:#ccc;
    font-weight:bold;
    position:relative;
}
ul.list li a:hover,
ul.list li a:hover+ul li a {
    color: RGBA(213, 235, 227, 1);
}
ul.list ul li:before {
    content:"";
    display:block;
    width:8px;
    height:0;
    border-top:1px solid #ccc;
    position:absolute;
    top:10px;
    left: 0;
}
ul.list ul li:last-child:before {
    background: RGBA(0, 58, 97, 1); 
    height: auto;
    top: 10px; 
    bottom: 0;
}

実装にあたり、下記のツリーメニューを参考にしたそうです。

サイトのキャプチャ

Pure CSS Tree Menu Framework

top of page

©2017 coliss