导航部分第一个li错位的问题

本文探讨了在不同浏览器中出现的导航栏错位问题,并详细分析了解决方案,包括调整CSS样式来修正错位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习慕课网企业实战项目的时候发现了 导航部分第一个li错位的问题,如图



源码:

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
    <link rel="stylesheet" href="./css/main.css" type="text/css">
    <script src="./js/setHomeSetFav.js" charset="GB2312"></script>
</head>
<body>
<div class="top">
    <div class="top_content">
        <ul>
            <li><a href="#">联系我们</a></li>
            <li><a href="#" onclick="AddFavorite(window.location,document.title)">加入收藏</a></li>
            <li><a href="#" onclick="SetHome(window.location)">设为首页</a></li>
        </ul>
    </div>
</div><!--top结束-->

<div class="wrap">
    <div class="logo">
        <div class="logo_left">
            <img src="./images/logo.jpg" alt="慕课网">
        </div>
        <div class="logo_right">
            <img src="./images/tel.jpg" alt="服务热线">24小时服务热线:<span class="tel">123-456-7890 </span>
        </div>
    </div>  <!--logo部分结束-->

    <div class="nav">
        <div class="nav_left"></div>
        <div class="nav_mid">
            <div class="nav_mid_left">
                <ul>
                    <li><a href="#">首页</a></li>
                    <li><a href="list.html">关于慕课</a></li>
                    <li><a href="list.html">新闻动态</a></li>
                    <li><a href="list.html">课程中心</a></li>
                    <li><a href="list.html">在线课程</a></li>
                    <li><a href="list.html">人才招聘</a></li>
                </ul>
            </div>
            <div class="nav_mid_right">
                <form action="" method="post">
                    <input type="text">
                </form>
            </div>
        </div> <!--nav_mid结束-->
        <div class="nav_right"></div>
    </div>  <!--nav结束-->
</div>      <!--wrap结束-->

</body>
</html>


CSS:

*{
    margin:0;
    padding:0;
    font-size:12px;
}

body{
    background-color:#F5F5F5;
}

.top{
    width:100%;
    height:27px;
    background:url("../images/top_bg.jpg") repeat-x;
}

.top_content{
    width:1000px;
    margin:0 auto;
}

.top_content li{
    list-style-image:url(../images/li_bg.gif);
    float:right;
    width:70px;
    line-height:27px;
}

.top_content a:link,.top_content a:visited{
    color:#8E8E8E;
    text-decoration:none;
}

.top_content a:hover,.top_content a:active{
    color:#900;
    text-decoration:none;
}

.wrap{
    width:1000px;
    margin:0 auto;
}

.logo{
    height:80px;
    background-color:#fff;
}

.logo_left{
    width:200px;
    float:left;
}

.logo_right{
    width:300px;
    float:right;
    height:28px;
    margin-top:30px;
    color:#8E8E8E;
}

.logo_right img{
    vertical-align:middle;
    margin-right:10px;
}

.tel{
    font-family: '微软雅黑';
    font-size:16px;
    color:#C00;
}


在IE7里面测试没有问题,估计老师讲的时候测试用的就是IE7,但是最新版的IE和chrome和firefox都显示第一行错位了,在网上查了很多,还没有彻底明白,先记录下来


知乎上的回答:

<img>元素底部为何有空白?修改

现代浏览器中,<img>元素默认情况下底部会有空白,那么这个空白到底是从哪里来的?
有什么比较好的方法可以去掉这个空白?
  1. img { display:block; }
  2. img { vertical-align:top/bottom/middle; }
Demo: jsbin.com/oDapIBi/1/edi
修改
按投票排序 按时间排序

11 个回答



评论区的回答:


nav部分占两行的问题 原因:img作为内联元素,会和文字一样具有行高和字号属性,默认对齐baseline.通过截图可以看到,nav部分实际高是83px>80px,溢出了。 解决方案有
转:
以下四种(根据情况任选其一): 1、.logo加上overflow:hidden; 2、.logo_left img 设置display:block; 3、.logo_left img 设置vertical-align:middle/bottom/top 都可以。 4、.logo_left 设置 font-size:0; 参考答案:https://www.zhihu.com/question/21558138


目前我的水平的理解:

第一种的理解是因为logo图片作为内联元素默认的baseline和bottom是存在距离的,所以原本高是80px,现在变成了83px,产生了溢出,用overflow:hidden隐藏溢出部分;

第二种的理解是将logo图片这个内敛元素转为块级元素,这样他就不能超出它的容器.logo_left这个容器的高度80px了,所以它的高变成了80px;

第三种的理解是图片默认情况下baseline和bottom不是同一个位置,所以设置对齐baseline,vertical-align:top就是logo_left的顶部和baseline对齐,

vertical-align:middle就是logo_left的中间和baseline对齐,vertical-align:bottom就是logo_left的底部和baseline对齐,理解的还是比较含糊;

第四种理解是top 和 bottom 之间的值即为 line-height。假如把 line-height 设置为0,那么 baseline 与 bottom 之间的距离也变为0,那道空白也就不见了。如果没有设置 line-height,line-height 的默认值是基于 font-size 的,视渲染引擎有所不同,但一般是乘以一个系数(比如1.2)。因此,在没有设置 line-height 的情况下把 font-size 设为0也可以达到同样的效果。


可以先跳过去,随着经验越来越丰富,理解也会更深入。


**期末考试要求分析及完成思路(基于文档知识点限定版)** --- #### **一、考核核心要点** 1. **主题选择**:从10个主题中任选其一(如“个人博客”),确保内容合法、主题明确。 2. **技术规范**(严格基于文档知识点): - **布局**:仅使用 **DIV+CSS浮动布局**或**定位布局**(static/relative/absolute/fixed),禁用Flexbox/Grid(文档未明确要求)。 - **页面元素**:必须包含文字、图片、列表、音视频、超链接。 - **结构要求**: - 主页(`index.html`)需包含LOGO(`<img>`标签)和导航菜单(`<ul>`列表)。 - 至少3个子页面(含主页共4页),风格统一(通过外部CSS文件控制)。 - 子页面中必须有一个**表单页面**(使用`<form>`、`<input>`、`<textarea>`等标签)。 - 单独**个人主页页面**(`profile.html`),展示真实学号、姓名、班级(使用`<p>`标签)。 3. **文件管理**: - 文件夹命名:学号+姓名(如`20230101zhangsan`),**禁用中文**。 - 子目录命名:`css`(存放样式表)、`images`(图片)、`media`(音视频)。 - 文件名全英文,如`index.html`、`contact.html`。 --- #### **二、完成思路与框架(仅限文档内容)** ##### **1. 主题选择与内容规划** - **推荐主题**:**个人博客**(符合文档中“个人博客”主题要求,且易于实现)。 - **页面规划**(必须包含以下内容): - **主页(index.html)**: - LOGO(`< img src="images/logo.png">`)。 - 导航菜单(`<ul>`列表,使用浮动布局实现横向排列)。 - 文章列表(`<ul>`或`<ol>`列表,含缩略图`<img>`和简介文字)。 - **子页面**: - **个人主页(profile.html)**:真实学号、姓名、班级(`<p>`标签)。 - **文章详情页(article.html)**:图文混排(`<p>`、`<img>`、`<h2>`)。 - **联系表单页(contact.html)**:包含姓名、邮箱、留言的表单(`<input type="text">`、`<input type="email">`、`<textarea>`)。 - **关于我(about.html)**:嵌入个人介绍视频(`<video controls>`标签)。 ##### **2. 技术实现框架(仅限文档知识点)** - **布局设计**: - **导航栏**:使用`float: left`实现横向排列,清除浮动用`clear: both`。 - **内容区**:DIV分区(`<div class="header">`、`<div class="main">`、`<div class="footer">`)。 - **定位**:LOGO使用`position: absolute`固定在左上角,导航栏用`position: fixed`固定在顶部。 - **CSS样式**: - **外部样式表**:`styles.css`中统一管理颜色、字体、边距(禁用Sass/LESS)。 - **选择器**:仅使用文档中的基础选择器(标签、类、ID)及后代选择器。 - **盒模型**:通过`padding`、`margin`、`border`控制间距,禁用Flexbox/Grid。 - **交互元素**: - **表单验证**:仅用HTML5原生属性(`required`、`type="email"`)。 - **超链接**:所有页面与主页双向跳转(`Home`)。 - **音视频**:使用`<audio>`和`<video>`标签,添加`controls`属性。 ##### **3. 文件结构示例(严格符合文档要求)** ``` 20230101zhangsan/ ├── index.html ├── profile.html ├── article.html ├── contact.html ├── about.html ├── css/ │ └── styles.css # 仅用文档中的CSS语法(如浮动、定位) ├── images/ │ ├── logo.png # 网站LOGO │ ├── article1.jpg # 文章配图 │ └── avatar.jpg # 个人头像 └── media/ ├── intro.mp4 # 个人介绍视频 └── background.mp3 # 背景音乐 ``` ##### **4. 关键代码片段(基于文档示例)** - **导航菜单(HTML + CSS浮动布局)**: ```html <!-- HTML --> <nav> <ul> <li>Home</li> <li>Profile</li> <li>Contact</li> </ul> </nav> ``` ```css /* CSS */ nav ul { list-style: none; margin: 0; padding: 0; } nav li { float: left; margin-right: 20px; } nav a { text-decoration: none; color: #333; } ``` - **表单页面(HTML5原生验证)**: ```html <form> <label>Name: <input type="text" name="name" required></label> <label>Email: <input type="email" name="email" required></label> <label>Message: <textarea name="message" required></textarea></label> <input type="submit" value="Send"> </form> ``` ##### **5. 注意事项** - **兼容性**:使用`<!DOCTYPE html>`声明,避免IE兼容问题(文档未提及高级兼容方案)。 - **测试**:在Chrome/Firefox中检查布局是否错位(禁用Flexbox/Grid)。 - **内容原创**:所有文字、图片需原创或注明来源(如引用图片需声明出处)。 --- #### **三、评分冲刺点(基于文档标准)** - **90+分关键**: - **页面丰富性**:轮播图(通过CSS `overflow`和`float`模拟)、表格(`<table>`标签)。 - **技术深度**:使用定位布局实现复杂排版(如侧边栏固定)。 - **报告内容**:详细描述浮动布局的`clearfix`解决方案(`.clearfix::after { content: ""; display: block; clear: both; }`)。 - **避免扣分**: - **文件命名**:严格使用英文,如`profile.html`而非`gerenzhuye.html`。 - **代码规范**:禁用文档未提到的属性(如`display: flex`)。 --- **总结**:严格遵循文档中的HTML/CSS知识点,优先使用浮动与定位布局,禁用未提及的Flexbox/Grid等高级特性。通过清晰的目录结构、原生HTML5表单验证及基础CSS样式,确保作品符合考核要求并冲刺高分。根据这个框架给我一份完整的个人博客网页代码
05-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值