自定义具有多个条件的纯CSS响应菜单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义具有多个条件的纯CSS响应菜单相关的知识,希望对你有一定的参考价值。

我正在使用此处的代码处理此响应式菜单:

http://www.sanwebcorner.com/2017/03/multi-level-responsive-dropdown-menu.html

我试图修改代码,以满足以下所有条件:

  1. 它不会在任何顶部按钮上显示背景颜色。
  2. 它在子菜单中始终具有黑色文本。
  3. 所有子菜单在响应式设计中的行为完全相同。

但是,我遇到了几个问题。其中之一:主菜单中的两个项目在响应子菜单中出现两次,我不知道为什么。

我尝试了多种解决方案,包括:

  1. 使用其他CSS类选择器。
  2. 我能想到的现有CSS中每种颜色的变化。
  3. 我能想到的其他CSS类选择器的每个变体。

我非常期待看到这个项目完全完成并离开我的盘子。如果你能看一下并确定我在这个代码上出错的地方,我将永远感激不尽。非常感谢你。

body {
	background-color: #908888;
}
.toggle, [id^=drop] {
	display: none;
}
menu {
	margin: 0;
	padding: 0;
	background-color: #5E4C4C;
}
menu:after {
	content: "";
	display: table;
	clear: both;
}
menu ul {
	float: left;
	padding: 0;
	margin: 0;
	list-style: none;
	position: relative;
}
menu ul li {
	margin: 0px;
	display: inline-block;
	float: left;
}
menu a {
	display: block;
	padding: 14px 20px;
	color: #fff;
	font-size: 17px;
	text-decoration: none;
}
menu a.new {
	display: block;
	padding: 14px 20px;
	color: #000;
	font-size: 17px;
	text-decoration: none;
	background-color: #ffffff;
}
menu a.new2 {
	display: block;
	padding: 14px 20px;
	color: #ffffff;
	font-size: 17px;
	text-decoration: none;
	background-color: #5E4C4C;
}
menu ul li ul li:hover {
	background-color: #f6f4fd;
	color: #000000;
}
menu a:hover {
	background-color: none;
	color: #fff;
}
menu a.new:hover {
	background-color: #f6f4fd;
	color: #000000;
}
menu a.new2:hover {
	background-color: #5E4C4C;
	color: #ffffff;
}
menu ul ul {
	display: none;
	position: absolute;
	top: 48px;
}
menu ul li:hover > ul {
	color: #000000;
	display: inherit;
}
menu ul ul li {
	width: 170px;
	float: none;
	display: list-item;
	position: relative;
	border-bottom: 0px;
	background-color: #ffffff;
	color: #000000;
}
menu ul ul ul li {
	position: relative;
	top: -60px;
	left: 170px;
	background-color: #ffffff;
	color: #000000;
}
li > a:after {
	content: ' ▼';
	font-size: 11px;
}
li > a:only-child:after {
	content: '';
}

@media all and (max-width : 768px) {
	menu {
		margin: 0;
	}
	.toggle + a,  .menu {
		display: none;
	}
	.toggle {
		display: block;
		background-color: #5E4C4C;
		padding: 14px 20px;
		color: #FFF;
		font-size: 17px;
		text-decoration: none;
		border: none;
	}
	.toggle:hover {
		background-color: #DC4E5B;
	}
	[id^=drop]:checked + ul {
		display: block;
	}
	menu ul li {
		display: block;
		width: 100%;
	}
	menu ul ul .toggle,  menu ul ul a {
		padding: 0 40px;
	}
	menu ul ul ul a {
		padding: 0 80px;
	}
	menu a:hover,  menu ul ul ul a {
		background-color: #f6f4fd;
	}
	menu a.new:hover {
		background-color: #f6f4fd;
		color: #000000;
	}
	menu a.new2:hover {
		background-color: #5E4C4C;
		color: #ffffff;
	}
	menu ul li ul li .toggle,  menu ul ul a,  menu ul ul ul a {
		padding: 14px 20px;
		color: #FFF;
		font-size: 17px;
	}
	menu ul li ul li .toggle,  menu ul ul a {
		background-color: #BF3441;
	}
	menu ul ul {
		float: none;
		position: static;
		color: #ffffff;
	}
	menu ul ul li:hover > ul,  menu ul li:hover > ul {
		display: none;
	}
	menu ul ul li {
		display: block;
		width: 100%;
	}
	menu ul ul ul li {
		position: static;
	}
}

@media all and (max-width : 330px) {
	menu ul li {
		display: block;
		width: 94%;
	}
}
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Multilevel Responsive Menu using css</title>
    <link rel="stylesheet" href="css/style.css">
</head>

<body>
<menu>
    <label for="drop" class="toggle" style="background-color: #BC7A1E;">Menu</label>
    <input type="checkbox" id="drop" />
    <ul class="menu">
        <li><a class="new2" href="#">My Bid</a></li>
        <li>
            <label for="drop-1" class="toggle">Dashboard &#9660;</label>
            <a class="new2" href="#">Dashboard</a>
            <input type="checkbox" id="drop-1"/>
            <ul>
                <li><a class="new" href="#">Dashboard1</a></li>
                <li><a class="new" href="#">Dashboard2</a></li>
                <li><a class="new" href="#">Dashboard3</a></li>
            </ul>
        </li>
        <li>
            <label for="drop-2" class="toggle">Identity &#9660;</label>
            <a class="new2" href="#">Identity</a>
            <input type="checkbox" id="drop-2"/>
            <ul>
                <li><a class="new" href="#">Identity1</a></li>
                <li><a class="new" href="#">Identity2</a></li>
                <li>
                    <label for="drop-3" class="toggle">Identity3 &#9660;</label>
                    <a class="new" href="#">Identity3</a>
                    <input type="checkbox" id="drop-3"/>
                    <ul>
                        <li><a class="new" href="#">Identity3.1</a></li>
                        <li><a class="new" href="#">Identity3.2</a></li>
                        <li><a class="new" href="#">Identity3.3</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="#">Change Password</a></li>
        <li><a href="#">Invalid Bid Report</a></li>
        <li><a href="#">Rft Upload</a></li>
        <li><a href="#">Logout</a></li>
    </ul>
</menu>
</body>
</html>
答案

两次菜单问题是因为您有媒体查询它更改此<label for="drop-1" class="toggle">Dashboard ▼</label>标记的显示属性。

enter image description here

另一答案

只需删除menu a.new2 { display : block; }。我认为它在第58行。仅删除display: block声明,而不是整个规则。

这应该解决重复的链接问题。

以上是关于自定义具有多个条件的纯CSS响应菜单的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段10—— 数组的响应式方法

VSCode自定义代码片段——CSS动画

VSCode自定义代码片段7——CSS动画

VSCode自定义代码片段7——CSS动画