- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好我是网页设计的新手,我目前正在设计一个网站,我试图在其中使用使用 CSS 和 Javascript 制作的下拉菜单。我几乎已经设法让一切正常工作,但唯一需要解决的问题是下拉菜单内容出现在容器的左侧,而不是相关父菜单选项的下方。
function myFunction1() {
document.getElementById("myDropdown1").classList.toggle("show");
}
function myFunction2() {
document.getElementById("myDropdown2").classList.toggle("show");
}
function myFunction3() {
document.getElementById("myDropdown3").classList.toggle("show");
}
function myFunction4() {
document.getElementById("myDropdown4").classList.toggle("show");
}
window.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content1");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
window.onclick = function(event) {
if (!event.target.matches('.dropbtn2')) {
var dropdowns = document.getElementsByClassName("dropdown-content2");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
window.onclick = function(event) {
if (!event.target.matches('.dropbtn3')) {
var dropdowns = document.getElementsByClassName("dropdown-content3");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
window.onclick = function(event) {
if (!event.target.matches('.dropbtn4')) {
var dropdowns = document.getElementsByClassName("dropdown-content4");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
.navbar {
float: left;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
height: auto;
width: 100%;
display: inline-block;
margin: 0;
padding: 0;
position: relative;
}
.navbar a {
font-size: 2em;
font-weight: 100;
color: white;
text-align: center;
}
.dropdown {
width: 100%;
}
.dropdown-content1 {
display: none;
position: absolute;
background-color: #f9f9f9;
width: 16.667%;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
padding: 0px;
height: auto;
}
.dropdown-content1 a {
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #000000;
border: 1px solid white;
text-align: center;
height: auto;
}
.dropdown-content1 a:hover {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #FFFFFF;
border: 1px solid black;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
transition-duration: 0.5s;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2)
}
.dropdown-content2 {
display: none;
position: absolute;
background-color: #f9f9f9;
width: 16.667%;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
padding: 0px;
}
.dropdown-content2 a {
color: white;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #000000;
border: 1px solid white;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
font-size: 2em;
}
.dropdown-content2 a:hover {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #FFFFFF;
border: 1px solid black;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
transition-duration: 0.5s;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2)
}
.dropdown-content3 {
display: none;
position: absolute;
background-color: #f9f9f9;
width: 16.667%;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
padding: 0px;
}
.dropdown-content3 a {
color: white;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #000000;
border: 1px solid white;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
font-size: 2em;
}
.dropdown-content3 a:hover {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #FFFFFF;
border: 1px solid black;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
transition-duration: 0.5s;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2)
}
.dropdown-content4 {
display: none;
position: absolute;
background-color: #f9f9f9;
width: 16.667%;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
padding: 0px;
}
.dropdown-content4 a {
color: white;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #000000;
border: 1px solid white;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
font-size: 2em;
}
.dropdown-content4 a:hover {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
width: 100%;
padding: 0px;
background-color: #FFFFFF;
border: 1px solid black;
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, " sans-serif";
text-align: center;
height: auto;
transition-duration: 0.5s;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2)
}
.show {
display: block;
}
.btn1 {
background-color: #71aace;
color: white;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: Impact;
border: 1px solid white;
cursor: pointer;
width: 16.667%;
float: left;
}
.btn1:hover,
.btn1:focus {
background-color: #FFFFFF;
color: black;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: Impact;
border: 1px solid black;
cursor: pointer;
width: 16.667%;
float: left;
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
transition-duration: 0.5s;
}
.dropbtn1 {
background-color: #6c73b1;
color: white;
padding: 0px;
margin: 0px;
font-size: 2em;
border: 1px solid white;
cursor: pointer;
width: 16.667%;
float: left;
}
.dropbtn1:hover,
.dropbtn1:focus {
background-color: #FFFFFF;
color: black;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: "Impact";
border: 1px solid black;
cursor: pointer;
width: 16.667%;
float: left;
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
transition-duration: 0.5s;
}
.dropbtn2 {
background-color: #d3c530;
color: white;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: Impact;
border: 1px solid white;
cursor: pointer;
width: 16.667%;
float: left;
}
.dropbtn2:hover,
.dropbtn2:focus {
background-color: #FFFFFF;
color: black;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: "Impact";
border: 1px solid black;
cursor: pointer;
width: 16.667%;
float: left;
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
transition-duration: 0.5s;
}
.dropbtn3 {
background-color: #82c845;
color: white;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: Impact;
border: 1px solid white;
cursor: pointer;
width: 16.667%;
float: left;
}
.dropbtn3:hover,
.dropbtn3:focus {
background-color: #FFFFFF;
color: black;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: "Impact";
border: 1px solid black;
cursor: pointer;
width: 16.667%;
float: left;
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
transition-duration: 0.5s;
}
.dropbtn4 {
background-color: #8f65a1;
color: white;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: Impact;
border: 1px solid white;
cursor: pointer;
width: 16.667%;
float: left;
}
.dropbtn4:hover,
.dropbtn4:focus {
background-color: #FFFFFF;
color: black;
padding: 0px;
margin: 0px;
font-size: 2em;
font-family: "Impact";
border: 1px solid black;
cursor: pointer;
width: 16.667%;
float: left;
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
transition-duration: 0.5s;
}
<div class="navbar">
<button class="btn1" value="About Us" onclick="window.location.href=" https://uklivesound.000webhostapp.com/aboutus.html>About Us</button>
<div class="dropdown">
<button class="dropbtn1" onclick="myFunction1()">Rehearsals</button>
<div class="dropdown-content1" id="myDropdown1">
<a href="https://uklivesound.000webhostapp.com/liveroom.html">Live Room</a>
<a href="https://uklivesound.000webhostapp.com/isolationroom.html">Isolation Room</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn2" onclick="myFunction2()">Recording</button>
<div class="dropdown-content2" id="myDropdown2">
<a href="https://uklivesound.000webhostapp.com/audiorecording.html">Audio</a>
<a href="https://uklivesound.000webhostapp.com/videorecording.html">Video</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn3" onclick="myFunction3()">For Hire</button>
<div class="dropdown-content3" id="myDropdown3">
<a href="https://uklivesound.000webhostapp.com/hirepackages.html">Event Packages</a>
<a href="https://uklivesound.000webhostapp.com/largeevents.html">Large Events</a>
<a href="https://uklivesound.000webhostapp.com/equipmenthire.html">Equipment</a>
<a href="https://uklivesound.000webhostapp.com/bandhire.html">Bands</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn4" onclick="myFunction4()">Other Services</button>
<div class="dropdown-content4" id="myDropdown4">
<a href="https://uklivesound.000webhostapp.com/buyandsell.html">Buy & Sell</a>
<a href="https://uklivesound.000webhostapp.com/repairs.html">Repairs</a>
</div>
</div>
<button class="btn2" value="Contact Us" onclick="window.location.href=" https://uklivesound.000webhostapp.com/contact.html>Contact Us</button>
最佳答案
您的帖子中有很多不必要的代码和代码重复。大部分都可以删除。您也没有正确设置 HTML 结构、类名和 ID 来避免过多的代码或提供良好的语义。
菜单实际上只是一个美化的选项列表。因此,用于创建一个的最佳语义元素是 <ul>
。带有 <li>
的元素它里面的元素。通过一点 CSS 样式,您可以删除元素符号并将垂直布局更改为水平布局。这通常是菜单的制作方式。
接下来,谈到类和 ID。给出需要独特处理的元素 id
属性并将类分配给需要作为组的一部分设置样式的元素。这使得样式变得非常简单,并且消除了冗余的需要。
当谈到 JavaScript 时,不要使用内联 HTML 事件属性( onclick
、 onmouseover
等)。 <强> Here is another post of mine 这解释了不使用那种设置事件处理程序的古老方法的众多原因。
所以,这是您的菜单的修改版本。您会发现代码少了多少,理解起来也简单多了。
// Get references to all elements you'll be working with:
// All the drop downs
var dd = document.querySelectorAll(".db");
// Set up each of the drop downs to invoke the toggleElement function when clicked
// and to hide the menu when the mouse moves off an open menu
for(var i = 0; i < dd.length; i++){
dd[i].addEventListener("click", function(evt){ toggleElement(evt.target); });
dd[i].addEventListener("mouseout", function(evt){ hideElement(evt.target); });
}
// This one function does the job of the myFunction1 - myFunction4 functions
function toggleElement(element) {
element.querySelector("ul").classList.toggle("hide");
}
function hideElement(element) {
// If the element is not one of the two link buttons, hide its menu
var el = element.querySelector("ul");
if(el){
el.classList.add("hide");
}
}
/* Master styles for menu. The font will inherit down to children.
When specifying font names, use quotes around font names that contain spaces.
You had " sans-serif", which would never work because you included a leading
space in the string. Plus sans-serif doesn't have a space in it, so it doesn't
need quotes anyway. */
.navbar {
font-family: Impact, Haettenschweiler, Franklin Gothic Bold, Arial Black, "sans-serif";
margin: 0;
padding: 0;
list-style:none;
}
/* These are the actual menu items*/
li {
text-align:center;
color: white;
margin:0;
padding:0;
}
a { text-decoration: none; }
/* This simple class is applied to the drop down content from the start
and then simply removed or added via JavaScript to show/hide them. */
.hide { display: none; }
/* All drop buttons have many property values in common. Specify those once. */
.db { cursor: pointer; display:inline-block; width:calc(16.667% - 4px); }
/* Then just worry about what's different between them */
#dropbtn1, #dropbtn6 { background-color: #71aace; }
#dropbtn2 { background-color: #6c73b1; }
#dropbtn3 { background-color: #d3c530; }
#dropbtn4 { background-color: #82c845; }
#dropbtn5 { background-color: #8f65a1; }
.dropdown-content {
background-color: #f9f9f9;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
list-style:none;
position:absolute; /* This keeps the drop down from throwing off the layout when shown */
padding:0;
width:calc(16.667% - 4px); /* You have to account for the width of the borders. */
}
.dropdown-content li { text-align:left; }
.dropdown-content:hover {
color: black;
background-color: #FFFFFF;
border: 1px solid black;
transition-duration: 0.5s;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index:-1;
display:block;
}
/* All drop button and regular button hover and focus styles are the same, just specify once */
.db:hover, .db:focus, .btn:hover, .btn:focus {
background-color: #FFFFFF;
color: black;
cursor: pointer;
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
transition-duration: 0.5s;
}
<ul class="navbar">
<li id="dropbtn1" class="db"><a href="https://uklivesound.000webhostapp.com/aboutus.html">About Us</a></li>
<!-- Use id for unique identifiers, Use classes for common traits
This button is specifically dropbtn1, but it is styled like
all other drop buttons. -->
<li id="dropbtn1" class="db">Rehearsals
<ul class="dropdown-content hide" id="myDropdown1">
<li><a href="https://uklivesound.000webhostapp.com/liveroom.html">Live Room</a></li>
<li><a href="https://uklivesound.000webhostapp.com/isolationroom.html">Isolation Room</a></li>
</ul>
</li>
<li id="dropbtn2" class="db">Recording
<ul class="dropdown-content hide" id="myDropdown2">
<li><a href="https://uklivesound.000webhostapp.com/audiorecording.html">Audio</a></li>
<li><a href="https://uklivesound.000webhostapp.com/videorecording.html">Video</a></li>
</ul>
</li>
<li id="dropbtn3" class="db">For Hire
<ul class="dropdown-content hide" id="myDropdown3">
<li><a href="https://uklivesound.000webhostapp.com/hirepackages.html">Event Packages</a></li>
<li><a href="https://uklivesound.000webhostapp.com/largeevents.html">Large Events</a></li>
<li><a href="https://uklivesound.000webhostapp.com/equipmenthire.html">Equipment</a></li>
<li><a href="https://uklivesound.000webhostapp.com/bandhire.html">Bands</a></li>
</ul>
</li>
<li id="dropbtn4" class="db">Other Services
<ul class="dropdown-content hide" id="myDropdown4">
<li><a href="https://uklivesound.000webhostapp.com/buyandsell.html">Buy & Sell</a></li>
<li><a href="https://uklivesound.000webhostapp.com/repairs.html">Repairs</a></li>
</ul>
</li>
<li id="dropbtn6" class="db"><a href="https://uklivesound.000webhostapp.com/contact.html">Contact Us</a></li>
</ul>
关于javascript - CSS/Javascript 下拉菜单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44137052/
我有一个名为 main.css 的 css 文件和另一个名为 style.css 的文件。我怎样才能在 main.css 中做到这一点? .someClass { //apply rules to
在更新我的 css 之前,我在 Login.css 中有以下内容: body { background-image: url('./pictures/fond.png'); bac
我的 share point 2013 核心 css 和我的 css 之间存在 css 冲突。所以我想把我所有的类都放在 div #s4-workspace 下但是我搜索了一种方法来将所有类分组到这个
我知道您可以覆盖 jsp 页面从 jsp 包含 CSS 文件(即全局 CSS 文件)继承的 CSS 属性。 但是,如果元素中的某个属性弄乱了特定页面,而我不想只使用内联 CSS 在该页面中使用它怎么办
我刚刚发现了 initial-scale 元属性。 以前,我一直在使用 default.css 来定义我所有的样式和大小(用于字体和元素),以便它们在桌面计算机的屏幕上显示得很好。然后,如果您使用的是
我正在尝试使用 LESS CSS 来编写我的 CSS。我已经按顺序导入了 style.less 和 less.js 文件。 现在我想提取 LESS 生成的 CSS。有什么办法可以做到吗?我不想使用脚本
我想知道是否有任何一种软件可以读取大量内联样式中的 HTML 文档并将所有这些样式转换为外部 css 文件。如果只有一页,我可以手动完成。但是有100页。有人有想法吗? 最佳答案 就像有人说的那样,“
当我想从 Styled Components 迁移到 CSS Modules 时,出现了以下问题。 假设我有以下样式组件,它接受动态参数 offset和一个动态 CSS 字符串 theme : con
有没有办法将 CSS 类定义为与另一个类相等?例如,如果我有一个类: .myClass{ background-color: blue; } 有没有一种方法可以将第二个类定义为与 myClas
我正在尝试制作一组按钮,这些按钮贴在页面底部并且由固定的空间隔开。我正在使用 angularJS 的 ng-repeat 指令通过 ajax 请求获取数据,然后我用它来显示按钮。 我的问题在于让按
浏览器是否在加载 CSS 文件时解析 CSS?还是在整个 CSS 文件被浏览器下载后才进行解析?不同浏览器的做法有区别吗?我在哪里可以找到这种底层信息? 这个问题不是 Load and executi
这个问题在这里已经有了答案: Can a CSS class inherit one or more other classes? (29 个答案) 关闭 3 年前。 标题有点乱,我给大家看一下。假
我遇到了最奇怪的问题...... 在最简单的形式中,我有一个包含以下内容的 index.html 文件: (在尝试确定根本原因的过程中,我已经大大减少了它) 当我查看页面的源代码时,我得到以下信息:
我正在使用 Mindscape Workbench 来最小化我的 scss 文件。我的页面设置为使用 *.min.css 文件。在随机时间,min 文件不会与系统的其余部分一起发布。 我有很多 css
请告诉我 CSS 框架和 CSS 网格之间的区别。 最佳答案 CSS 框架也可以是 CSS 网格框架。 CSS 网格框架用于构建 CSS 布局。有一些框架除了构建布局还有其他用途,例如 Hartija
我有无法从页面中删除或更改的 original.css 文件。原始.css table { border-collapse: collapse; border-spacing: 0;
我以前使用 bootstrap css import 很好。 但是我正在尝试使用 CSS 模块,所以我添加了几行。 { test: /\.css$/, use:
有没有办法在 css 选择器中创建一个 css 组。 例如: .SectionHeader { include: .foo; include: .bar; include: .
今天我学习了 CSS 中的两个概念,一个是 CSS 定位(静态、相对、绝对、固定),另一个是 CSS Margin,它定义了元素之间的空间。 假设我想移动一个元素,这是最好的方法吗?因为这两个概念似乎
var paths = { css: './public/apps/user/**/*.css' } var dest = { css: './public/apps/user/css/' } /
我是一名优秀的程序员,十分优秀!