Przejdź do treści

Menu rozwijane, otwierane, wysuwane

Wygląd

Jeżeli nie odpowiada nam podstawowy wygląd menu, można go zmienić wykorzystując polecenia CSS. W tym celu w pliku menu.css należy wkleić np.:

#menu0 {
	width: 200px;
	margin: 10px;
	padding: 0;
}

#menu0 dt {
	background-color: #888;
	color: #fff;
	font-weight: bold;
	text-align: center;
	cursor: pointer;
	margin: 10px 0 0 0;
	padding: 2px;
}

#menu0 dd {
	background-color: #eee;
	color: #000;
	border-width: 0 1px 1px 1px;
	border-style: solid;
	border-color: #888;
	margin: 0;
	padding: 1px 5px;
}

#menu0 dd.active {
	font-weight: bold;
}

W wyróżnionych miejscach wpisano zdefiniowany uprzednio identyfikator menu. Teraz w nagłówku dokumentu (X)HTML (<head>...</head>), na którym wstawione jest menu, wystarczy wstawić odwołanie do utworzonego właśnie zewnętrznego arkusza stylów:

<link rel="Stylesheet" type="text/css" href="menu.css" />

Przykład:


Aby uzyskać następujące wielopoziomowe menu otwierane, imitujące tradycyjne menu aplikacji:



należy użyć kodu XHTML:

<dl id="menu0">
<dt>Kurs</dt>
<dd>
	<dl>
	<dt><a href="...">HTML</a></dt>
	<dd>
		<dl>
		<dt><a href="...">Dla zielonych</a></dt>
		<dd><a href="...">...</a></dd>
		<dd><a href="...">...</a></dd>
		</dl>
	</dd>
	<dd>
		<dl>
		<dt><a href="...">BODY i META</a></dt>
		<dd><a href="...">...</a></dd>
		<dd><a href="...">...</a></dd>
		</dl>
	</dd>
	<dd>
		<dl>
		<dt><a href="...">Tekst</a></dt>
		<dd><a href="...">...</a></dd>
		<dd><a href="...">...</a></dd>
		</dl>
	</dd>
	</dl>
</dd>
<dd>
	<dl>
	<dt><a href="...">CSS</a></dt>
	<dd><a href="...">...</a></dd>
	<dd><a href="...">...</a></dd>
	</dl>
</dd>
</dl>
<script type="text/javascript">
// <![CDATA[
new Menu('menu0', 'menu0', true, false, 0, 0, -1, -1, true);
// ]]>
</script>

oraz dołączyć następujący arkusz CSS:

#menu0, #menu0 dl {
	font-size: 12px;
	position: absolute;
	width: 150px;
	margin: 0;
	padding: 0;
	border-width: 1px;
	border-style: solid;
	border-color: #eee #aaa #aaa #eee;
}

#menu0 dt {
	cursor: pointer;
	margin: 0;
	padding: 0;
	background-color: #888;
	color: #fff;
	text-align: center;
	font-weight: bold;
	font-size: 14px;
	border-width: 1px;
	border-style: solid;
	border-color: #aaa #666 #666 #aaa;
	padding: 4px 5px;
}

#menu0 dl dt {
	background-color: #ccc;
	color: #000;
	text-align: left;
	font-weight: normal;
	font-size: 12px;
	border: 0;
	padding: 0;
}

#menu0 dd  {
	background-color: #ccc;
	color: #000;
	margin: 0;
	padding: 0;
	width: 150px;
	height: 22px;
}

#menu0 dd.active {
	font-weight: bold;
}

#menu0 dt a {
	background: url("submenu.gif") no-repeat 140px 8px;
	padding-right: 20px;
}

#menu0 a:link, #menu0 a:visited {
	display: block;
	color: #000;
	text-decoration: none;
	padding: 4px 5px;
}

#menu0 a:hover {
	color: #fff;
	background-color: #008;
}

#menu0 dl {
	position: absolute;
	border: 0;
}

#menu0 dl dd {
	position: relative;
	left: 151px;
	bottom: 22px;
	border-left: 1px solid #eee;
	border-right: 1px solid #aaa;
}

Aby ustawić kolejne menu otwierane obok siebie, należy wstawić kilka osobnych bloków <dl>...</dl>, a następnie wypozycjonować je w odpowiednim miejscu względem siebie:



Kod XHTML:

<div class="menu">
	<dl id="menu1">
	<dt>HTML</dt>
	<dd><a href="...">...</a></dd>
	<dd><a href="...">...</a></dd>
	</dl>
	<script type="text/javascript">
	// <![CDATA[
	new Menu('menu1', 'position: absolute', true, true, -1, -1, -1, -1, true);
	// ]]>
	</script>
	
	<dl id="menu2">
	<dt>CSS</dt>
	<dd><a href="...">...</a></dd>
	<dd><a href="...">...</a></dd>
	</dl>
	<script type="text/javascript">
	// <![CDATA[
	new Menu('menu2', 'position: absolute; left: 150px', true, true, -1, -1, -1, -1, true);
	// ]]>
	</script>
	
	<dl id="menu3">
	<dt>Skrypty</dt>
	<dd><a href="...">...</a></dd>
	<dd><a href="...">...</a></dd>
	</dl>
	<script type="text/javascript">
	// <![CDATA[
	new Menu('menu3', 'position: absolute; left: 300px', true, true, -1, -1, -1, -1, true);
	// ]]>
	</script>
</div>

Arkusz CSS:

.menu {
	position: relative;
}

.menu dl {
	width: 150px;
	margin: 0;
	padding: 0;
	border-width: 1px;
	border-style: solid;
	border-color: #aaa #666 #666 #aaa;
}

.menu dt {
	margin: 0;
	padding: 2px 5px;
	cursor: pointer;
	background-color: #888;
	color: #fff;
	font-weight: bold;
	text-align: center;
}

.menu dd {
	margin: 0;
	padding: 2px 5px;
	background-color: #ccc;
	color: #000;
}

Aby połączyć dwa ostatnie przykłady, wystarczy wstawić wszystkie menu w jednym wspólnym bloku, który musi mieć nadaną pozycję relatywną, a kolejne menu powinny być osadzane następująco:

<div class="menu">
	<dl id="menu0">...</dl>
	<script type="text/javascript">
	// <![CDATA[
	new Menu('menu0', 'menu0', true, false, 0, 0, -1, -1, true);
	// ]]>
	</script>
	
	<dl id="menu1">...</dl>
	<script type="text/javascript">
	// <![CDATA[
	new Menu('menu1', 'menu0', true, false, 0, 0, -1, -1, true);
	// ]]>
	</script>
	
	<dl id="menu2">...</dl>
	<script type="text/javascript">
	// <![CDATA[
	new Menu('menu2', 'menu0', true, false, 0, 0, -1, -1, true);
	// ]]>
	</script>
</div>

Arkusz stylów będzie taki sam, jak w przykładzie wielopoziomowego menu otwieranego (przedostatni powyżej), z niewielkim dodatkiem:

.menu {
	position: relative;
}

#menu1 {
	left: 150px;
}

#menu2 {
	left: 300px;
}

Komentarze

Zobacz więcej komentarzy