私はウェブページを開発するのが初めてです。stackoverflow.com のものと同様のメニューを作成しようとしています (上記の質問、タグ、ユーザーなど)。選択したメニューの色を変更するにはどうすればよいですか (たとえば、「クリック」すると質問の背景色がオレンジ色に変わります)。
ホバリング中に(CSSを使用して)簡単に色を変更できましたが、これに問題があります。
CSS のみを使用して、クリックされた項目の色を変更するこの効果を実現できますか?
私はウェブページを開発するのが初めてです。stackoverflow.com のものと同様のメニューを作成しようとしています (上記の質問、タグ、ユーザーなど)。選択したメニューの色を変更するにはどうすればよいですか (たとえば、「クリック」すると質問の背景色がオレンジ色に変わります)。
ホバリング中に(CSSを使用して)簡単に色を変更できましたが、これに問題があります。
CSS のみを使用して、クリックされた項目の色を変更するこの効果を実現できますか?
クラスのアクティブとホバーのスタイルを設定します。
サーバー側でliをアクティブにする必要があります。したがって、メニューを描画するときは、どのページがロードされているかを把握し、次のように設定する必要があります。
<li class="active">Question</li>
<li>Tags</li>
<li>Users</li>
ただし、リロードせずにコンテンツを変更する場合は、サーバー上のアクティブな li 要素の設定を変更することはできません。javascript を使用する必要があります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<style>
.menu{width: 300px; height: 25; font-size: 18px;}
.menu li{list-style: none; float: left; margin-right: 4px; padding: 5px;}
.menu li:hover, .menu li.active {
background-color: #f90;
}
</style>
</head>
<body>
<ul class="menu">
<li>Item 1</li>
<li class="active">Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul>
<script type="text/javascript">
var make_button_active = function()
{
//Get item siblings
var siblings =($(this).siblings());
//Remove active class on all buttons
siblings.each(function (index)
{
$(this).removeClass('active');
}
)
//Add the clicked button class
$(this).addClass('active');
}
//Attach events to menu
$(document).ready(
function()
{
$(".menu li").click(make_button_active);
}
)
</script>
</body>
</html>
JavaScript を使用してこれを実装するのがおそらく最も簡単でしょう...これはデモ用の JQuery スクリプトです...他の人が述べたように...「アクティブ」という名前のクラスがあり、アクティブなタブを示します-疑似クラスではありません ':アクティブ。' 選択済み、現在など、何でも簡単に名前を付けることができました。
/* CSS */
#nav { width:480px;margin:1em auto;}
#nav ul {margin:1em auto; padding:0; font:1em "Arial Black",sans-serif; }
#nav ul li{display:inline;}
#nav ul li a{text-decoration:none; margin:0; padding:.25em 25px; background:#666; color:#ffffff;}
#nav ul li a:hover{background:#ff9900; color:#ffffff;}
#nav ul li a.active {background:#ff9900; color:#ffffff;}
/* JQuery Example */
<script type="text/javascript">
$(function (){
$('#nav ul li a').each(function(){
var path = window.location.href;
var current = path.substring(path.lastIndexOf('/')+1);
var url = $(this).attr('href');
if(url == current){
$(this).addClass('active');
};
});
});
</script>
/* HTML */
<div id="nav" >
<ul>
<li><a href='index.php?1'>One</a></li>
<li><a href='index.php?2'>Two</a></li>
<li><a href='index.php?3'>Three</a></li>
<li><a href='index.php?4'>Four</a></li>
</ul>
</div>
私はこの質問に遅れましたが、それは本当に超簡単です. css ファイルで複数のタブ クラスを定義し、LI タグの作成中に必要なタブをクラスとして php ファイルにロードするだけです。
サーバー上で完全に実行する例を次に示します。
html ul.tabs li.activeTab1, html ul.tabs li.activeTab1 a:hover, html ul.tabs li.activeTab1 a {
background: #0076B5;
color: white;
border-bottom: 1px solid #0076B5;
}
html ul.tabs li.activeTab2, html ul.tabs li.activeTab2 a:hover, html ul.tabs li.activeTab2 a {
background: #008C5D;
color: white;
border-bottom: 1px solid #008C5D;
}
<ul class="tabs">
<li <?php print 'class="activeTab1"' ?>>
<a href="<?php print 'Tab1.php';?>">Tab 1</a>
</li>
<li <?php print 'class="activeTab2"' ?>>
<a href="<?php print 'Tab2.php';?>">Tab 2</a>
</li>
</ul>
これを試して。別のアイテムがクリックされるまで色を保持します。
<style type="text/css">
.activeElem{
background-color:lightblue
}
.desactiveElem{
background-color:none
}
}
</style>
<script type="text/javascript">
var activeElemId;
function activateItem(elemId) {
document.getElementById(elemId).className="activeElem";
if(null!=activeElemId) {
document.getElementById(activeElemId).className="desactiveElem";
}
activeElemId=elemId;
}
</script>
<li id="aaa"><a href="#" onclick="javascript:activateItem('aaa');">AAA</a>
<li id="bbb"><a href="#" onClick="javascript:activateItem('bbb');">BBB</a>
<li id="ccc"><a href="#" onClick="javascript:activateItem('ccc');">CCC</a>
私が現在使用している純粋な CSS ソリューションがあります。
ページとメニュー項目を識別するボディ ID (またはクラス) を追加し、次のようなものを使用します。
HTML:
<html>
<body id="body_questions">
<ul class="menu">
<li id="questions">Question</li>
<li id="tags">Tags</li>
<li id="users">Users</li>
</ul>
...
</body>
</html>
CSS:
.menu li:hover,
#body_questions #questions,
#body_tags #tags,
#body_users #users {
background-color: #f90;
}
現在選択されているリンク/タブの色を変更したい場合は、現在選択されているリンク/タブにクラス (たとえばactive
) を適用し、これを別の方法でスタイルすることをお勧めします。
スタイルの例は次のとおりです。
li.active, a.active {
background-color: #f90;
}
PHP を使用して URL を検索し、ページ名を一致させます (.php の拡張子なしで、contact、contactform などの共通の単語をすべて含む複数のページを追加することもできます。すべてにそのクラスが追加されます)。色などを変更するための PHP を含むクラス。そのためには、ページをファイル拡張子 で保存する必要があります.php
。
これがデモです。必要に応じてリンクとページを変更します。すべてのリンクの CSS クラスは で.tab
あり、アクティブなリンクには.currentpage
(PHP 関数と同様に) の別のクラスもあるため、そこに CSS ルールを上書きします。好きな名前を付けることができます。
<?php # Using REQUEST_URI
$currentpage = $_SERVER['REQUEST_URI'];?>
<div class="nav">
<div class="tab
<?php
if(preg_match("/index/i", $currentpage)||($currentpage=="/"))
echo " currentpage";
?>"><a href="index.php">Home</a>
</div>
<div class="tab
<?php
if(preg_match("/services/i", $currentpage))
echo " currentpage";
?>"><a href="services.php">Services</a>
</div>
<div class="tab
<?php
if(preg_match("/about/i", $currentpage))
echo " currentpage";
?>"><a href="about.php">About</a>
</div>
<div class="tab
<?php
if(preg_match("/contact/i", $currentpage))
echo " currentpage";
?>"><a href="contact.php">Contact</a>
</div>
</div> <!--nav-->
ついに私は、あなたのすべての助けとポストChange a link style onclick のおかげで、意図したことを達成することができました。これがそのコードです。これを行うために JavaScript を使用しました。
<html>
<head>
<style type="text/css">
.item {
width:900px;
padding:0;
margin:0;
list-style-type:none;
}
a {
display:block;
width:60;
line-height:25px; /*24px*/
border-bottom:1px none #808080;
font-family:'arial narrow',sans-serif;
color:#00F;
text-align:center;
text-decoration:none;
background:#CCC;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
margin-bottom:0em;
padding: 0px;
}
a.item {
float:left; /* For horizontal left to right display. */
width:145px; /* For maintaining equal */
margin-right: 5px; /* space between two boxes. */
}
a.selected{
background:orange;
color:white;
}
</style>
</head>
<body>
<a class="item" href="#" >item 1</a>
<a class="item" href="#" >item 2</a>
<a class="item" href="#" >item 3</a>
<a class="item" href="#" >item 4</a>
<a class="item" href="#" >item 5</a>
<a class="item" href="#" >item 6</a>
<script>
var anchorArr=document.getElementsByTagName("a");
var prevA="";
for(var i=0;i<anchorArr.length;i++)
{
anchorArr[i].onclick = function(){
if(prevA!="" && prevA!=this)
{
prevA.className="item";
}
this.className="item selected";
prevA=this;
}
}
</script>
</body>
</html>