问题描述
初学CSS,打算做一个下拉菜单。目标结果是:
“下拉菜单”那个显示的就是一个下拉菜单。
但是如果在CSS中把下拉菜单周围的border去掉,内容部分就无法占满整行:
问题出现的环境背景及自己尝试过哪些方法
怀疑和.topnav中设置的overflow: hidden;属性有关,但是把这个属性去掉,下拉菜单就被隐藏了
相关代码
<!DOCTYPE html>
<html>
<head>
<title>layout.html</title>
<style>
* {
box-sizing: border-box;
}
body {
font-family: Arial, Helvetica, sans-serif;
padding: 10px;
background: #f1f1f1;
}
/* 头部标题 */
.header {
padding: 30px;
text-align: center;
background: white;
}
.header h1 {
font-size: 50px;
}
/* 导航条 */
.topnav {
/* overflow: hidden; */
background-color: #333;
}
.topnav a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
.topnav a:hover {
background-color: #ddd;
color: black;
}
/* - 下拉菜单 */
.dropbtn {
/* 同.topnav,a有一样的颜色 */
background-color: #333;
color: #f2f2f2;
padding: 13px 16px;
border: none;
font-size: 16px;
}
.dropdown {
position: relative;
display: inline-block;
border: 1px solid; /*必须有这个,否则内容就不会分隔开,为什么?*/
}
.dropdown a {
float: none;
}
.dropdown:hover .dropbtn {
background-color: #ddd;
color: black;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #333;
min-width: 100px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.dropdown:hover .dropdown-content {
display: block;
}
/* 内容区域 */
.leftcolumn {
float: left;
width: 75%;
}
.rightcolumn {
float: left;
width: 25%;
background-color: #f1f1f1;
padding-left: 20px;
}
.fakeimg {
background-color: #aaa;
width: 100%;
padding: 20px;
}
.card {
background-color: white;
padding: 20px;
margin-top: 20px;
}
.row:after {
content: "";
display: table;
clear: both;
}
/* 底部 */
.footer {
padding: 20px;
text-align: center;
background: #ddd;
margin-top: 20px;
}
/* 响应式布局 - 屏幕尺寸小于 800px 时,两列布局改为上下布局 */
/* @media screen and (max-width: 800px) {
.leftcolumn, .rightcolumn {
width: 100%;
padding: 0;
}
} */
/* 响应式布局 -屏幕尺寸小于 400px 时,导航等布局改为上下布局 */
/* @media screen and (max-width: 400px) {
.topnav a {
float: none;
width: 100%;
}
} */
</style>
</head>
<body>
<div class="header">
<h1>我的网页</h1>
<p>重置浏览器大小查看效果。</p>
</div>
<div class="topnav">
<a href="#">链接</a>
<a href="#">链接</a>
<a href="#">链接</a>
<div class="dropdown">
<button class="dropbtn">下拉菜单</button>
<div class="dropdown-content">
<a href="#">菜单1</a>
<a href="#">菜单2</a>
<a href="#">菜单3</a>
</div>
</div>
<a href="#" style="float: right;">链接</a>
</div>
<div class="row">
<div class="leftcolumn">
<div class="card">
<h2>文章标题</h2>
<h5>2019 年 4 月 17日</h5>
<div class="fakeimg" style="height:200px;">图片</div>
<p>一些文本...</p>
<p>菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!</p>
</div>
<div class="card">
<h2>文章标题</h2>
<h5>2019 年 4 月 17日</h5>
<div class="fakeimg" style="height:200px;">图片</div>
<p>一些文本...</p>
<p>菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!</p>
</div>
</div>
<div class="rightcolumn">
<div class="card">
<h2>关于我</h2>
<div class="fakeimg" style="height:100px;">图片</div>
<p>关于我的一些信息..</p>
</div>
<div class="card">
<h3>热门文章</h3>
<div class="fakeimg">
<p>图片</p>
</div>
<div class="fakeimg">
<p>图片</p>
</div>
<div class="fakeimg">
<p>图片</p>
</div>
</div>
<div class="card">
<h3>关注我</h3>
<p>一些文本...</p>
</div>
</div>
</div>
<div class="footer">
<h2>底部区域</h2>
</div>
</body>
</html>
你期待的结果是什么?实际看到的错误信息又是什么?
希望能有一种方法可以去掉.dropdown中的border属性,同时让内容部分能够左右显示,不是上下显示。
你有两个地方用到了浮动
-----topnav 这里
-----row 这里
你现在的代码只清除了row 的,topnav 没清除。所以有这个问题
然后推荐作法是单独声明一个清除浮动的类,然后那里需要往那里加,比如:
最后推荐使用flex布局,现在兼容已经几乎没问题了更灵活
强烈推荐掌握BFC 理解布局的真谛
解决问题的代码: