有关CSS中排版常见问题(清除默认样式问题 + 元素居中问题 + 元素之间的空白问题 + 行内块的幽灵空白问题)

news2024/12/25 9:32:39

        前言:在练习CSS排版的时候,我们经常会遇到一些排版上的问题,那么我们如何去解决这些问题呢?本篇文章给出了一些新手在练习排版时候可能会遇到的问题的解决方案。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

先让我们看一下本篇文章的大致内容:

目录

1.清除默认样式问题

        (1)方案一:使用通配选择器

        (2)方案二:链接reset.css

        (3)方案三:Normalize.css

2.元素居中问题

        (1)水平居中

        (2)垂直居中

3.元素之间的空白问题

4.行内块的幽灵空白问题


1.清除默认样式问题

        我们知道,元素一般都些默认的样式,例如:

1. p 元素有默认的上下margin 。
2. h1~h6 标题也有上下margin ,且字体加粗。
3. body 元素有默认的8px 外边距。
4. 超链接有默认的文字颜色和下划线。
5. ul 元素有默认的左pading 。

但是这些默认样式对于我们对网页的排版真的友好吗?

在早期,元素默认样式,能够让我们快速的绘制网页,但如今网页的设计越来越复杂,内容越来越
多,而且很精细,这些默认样式会给我们绘制页面带来麻烦;而且这些默认样式,在不同的浏览器
上呈现出来的效果也不一样,所以我们需要重置这些默认样式。

那么我们如何去清除这些默认的属性呢?—— 其方案有三种:

        (1)方案一:使用通配选择器

* {
    margin: 0;
    padding: 0;
    ......
}

但是这种方案也有着其不足:

此种方法,在简单案例中可以用一下,但实际开发中不会使用,因为 * 选择的是所有元素,而并不是所有的元素都有默认样式;而且我们重置时,有时候是需要做特定处理的,比如:想让a 元素的文字是灰色,其他元素文字是蓝色。

        (2)方案二:链接reset.css

首先让我们了解一下什么是reset.css:

reset.css,又叫做 CSS 重写或者 CSS 重置,在写具体的样式之前,我们要适应兼容目前各个浏览器的版本差异,会对其进行样式的统一处理,而reset.css就是用于改写HTML标签的默认样式的。

经过reset 后的网页,好似“一张白纸”,这样我们开发人员就可以根据设计稿,精细的去添加具体的样式。

当然reset.css有很多,我们可以去网上下载自己需要的reset.css即可。

        (3)方案三:Normalize.css

首先让我们了解一下什么是Normalize.css:

对于Normalize.css,其是一种最新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式。

这里我们附上官网地址:http://necolas.github.io/normalize.css/

而对于Normalize.css来说,其相对于 reset.css , 有如下优点:

1. 保护了有价值的默认样式,而不是完全去掉它们。
2. 为大部分HTML元素提供一般化的样式。
3. 新增对 HTML5 元素的设置。
4. 对并集选择器的使用比较谨慎,有效避免调试工具杂乱。

注:

       Normalize.css 的重置,和reset.css 相比,更加的温和,开发时可根据实际情况进行
选择。

这样我们就呆滞的了解了为什么要清除默认样式以及如何去清除默认样式。

2.元素居中问题

        在学习CSS排版的时候,必不可少的就是让元素处于居中位置,那么对于不同类型的元素,我们应该如何让其居中呢?

对于居中,我们知道可以分为:水平居中垂直居中

        (1)水平居中

        【1】子元素为块元素

        这时我们只需要给父元素加上: margin: 0 auto; 即可 。

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./2024.4.28.css">
</head>
<body>
    <div>这是想要居中的元素</div>
</body>
</html>

CSS代码:

div {
    width: 300px;
    height: 200px;
    background-color: orange;
    margin: 0 auto;
}



这样我们就完成了块级元素的水平居中对齐。

        【2】子元素为行内元素、行内块元素

        这时我们只需要给给父元素加上: text-align:center;即可

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./2024.4.28.css">
</head>
<body>
    <div>
        <span>这是想要居中的元素</span>
    </div>
</body>
</html>

CSS代码:

div {
    text-align: center;
}

小总结:

行内元素、行内块元素,可以被父元素当做文本处理。即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐。例如使用: text-align 、line-height 、text-indent 等属性。

这样我们就完成了行内元素、行内块元素的水平居中对齐。

那么说完了水平对齐,接下来说垂直居中对齐。

        (2)垂直居中

        【1】子元素为块元素

        这时我们只需要给子元素加上: margin-top 属性即可 ,值为:(父元素content -子元素盒子总高) / 2。

例:我们想让绿色方块在橙色方块的垂直居中位置:

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./2024.4.28.css">
</head>
<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>
</html>

CSS代码:

.outer {
    width: 500px;
    height: 400px;
    /* 防止margin溢出 */
    overflow: hidden;
    background-color: orange;
}
.inner {
    width: 200px;
    height: 100px;
    margin-top: 150px;
    background-color: green;
}

     

           

        【2】子元素为行内元素、行内块元素

        这时我们只需要设置父元素的 height = line-height 即可。

例:我们想让文字处于橙色方块的垂直居中位置:

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./2024.4.28.css">
</head>
<body>
    <div>
        <span>这是一段文字</span>
    </div>
</body>
</html>

CSS代码:

div {
    width: 500px;
    height: 300px;
    background-color: orange;
    line-height: 300px;
}

这样我们就大致了解完了如何使元素水平或者垂直居中了。

3.元素之间的空白问题

        首先让我们了解一下什么是元素之间的空白问题:(如图)

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./2024.4.28.css">
</head>
<body>
    <span>这是第一段文字</span>
    <span>这是第二段文字</span>
</body>
</html>


我们会发现在两段文字之间出现了一个空格,但是我们在代码中并没有编写空格,这就是——元素之间的空白问题。

那么元素之间的空白问题产生的原因是什么呢?

产生的原因:

行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。

了解了元素之间的空白产生的原因了,那么我们如何去解决这个问题呢?

解决方案:

1. 方案一: 去掉换行和空格(不推荐)。
2. 方案二: 给父元素设置 font-size:0 ,再给需要显示文字的元素,单独设置字体大小(推
荐)。

CSS代码:

/* 父元素 */
div {
    font-size: 0px;
}
/* div中包含的子元素 */
span {
    font-size: 20px;
}

这样我们就可以解决元素之间的空白问题了。

4.行内块的幽灵空白问题

        首先让我们了解一下什么是行内块的幽灵空白问题:(如图)

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./2024.4.28.css">
</head>
<body>
    <div>
        <img src="./fish.jpg" alt="fish">
    </div>
</body>
</html>

CSS代码:

div {
    background-color: orange;
}
img {
    width: 200px;
}

我们会发现在图片的下方出现了一些橙色的背景,但是按理来说我们没有设置父类的高度,其高度应该由其内容撑开,但是结果中又溢出了一点背景,这种现象就是好——行内块的幽灵空白问题。

了解了什么是行内块的幽灵空白问题,那么它的产生原因是什么呢?

产生原因:

行内块元素与文本的基线对齐,而文本的基线与文本最底端之间是有一定距离的。

了解了什么是行内块的幽灵空白问题的产生原因之后,那么我们该如何解决呢?

解决方案:

方案一: 给行行内块设置vertical ,值不为 baseline 即可,设置为 middel 、bottom 、
top 均可。
方案二: 若父元素中只有一张图片,设置图片为 display:block 。
方案三: 给父元素设置 font-size: 0 。如果该行内块内部还有文本,则需单独设置fontsize。

这里只演示方案一,方案二和方案三读者可以自行验证:

我们将上面的CSS代码改写一下:

CSS代码:

div {
    background-color: orange;
}
img {
    vertical-align: bottom;
    width: 200px;
}

我们可以看到内块的幽灵空白的问题就解决了!!!

这样我们就了解并知道了如何解决行内块的幽灵空白问题了。

想了解其他CSS知识,浏览------------------------------------>CSS_秋刀鱼不做梦的博客-CSDN博客


以上就是本篇文章的所有内容了~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1天搞定uniApp+Vue3+vite+Element UI或者Element Plus开发学习,使用vite构建管理项目,HBuilderX做为开发者工具

我们通常给小程序或者app开发后台时&#xff0c;不可避免的要用到可视化的数据管理后台&#xff0c;而vue和Element是我们目前比较主流的开发管理后台的主流搭配。所以今天石头哥就带大家来一起学习下vue3和Element plus的开发。 准备工作 1&#xff0c;下载HBuilderX 开发者…

Python 可以对数据进行哪些可视化?

Python 可视化 一、条形图&#xff08;或柱状图&#xff09; 1.代码如下&#xff1a; import matplotlib.pyplot as plt import pandas as pddf pd.DataFrame({County:[America,Canada,Australia,Germany,French,China],GDP:[80,30,70,80,60,75] })plt.bar(df[County],df[G…

Linux 虚拟主机切换php版本及参数

我使用的Hostease的Linux虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机&#xff0c;但是没有找到切换PHP以及查看PHP有哪些版本的位置&#xff0c;因此咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以实现在cPanel面板上找到此切换PHP版本的按钮&…

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x新特性)

ElasticSearch教程入门到精通——第二部分&#xff08;基于ELK技术栈elasticsearch 7.x新特性&#xff09; 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2 文…

Docker部署RabbitMQ与简单使用

官网地址&#xff1a; Messaging that just works — RabbitMQ 我的Docker博客:Docker-CSDN博客 1.结构 其中包含几个概念&#xff1a; **publisher**&#xff1a;生产者&#xff0c;也就是发送消息的一方 **consumer**&#xff1a;消费者&#xff0c;也就是消费消息的一方 …

Java image-processing 包依赖错误

错误的信息为&#xff1a; [ERROR] Failed to execute goal on project image-processing: Could not resolve dependencies for project com.ossez:image-processing:jar:0.0.2-SNAPSHOT: Failed to collect dependencies at org.openimaj:core-image:jar:1.3.10 -> org.op…

Java Maven 编译资源文件拷贝错误 dirCompressed.zip failed with MalformedInputException:

完整的错误信息为&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1:resources (default-resources) on project core-java-io: filtering C:\WorkDir\Repository\iSharkfly-Docs\java-tutorials\core-java-modules\core-ja…

简单数据加解密,JS和JAVA同时实现

前端Vue调用Java后端接口中的数据进行加密&#xff0c;以避免敏感数据泄露。 现在实现一个高性能加密方法&#xff0c;用来对数据进行加密后传输。算法包括JS的加密和解密方法&#xff0c;也包括Java的加密解密方法。 可以在前端加密&#xff0c;后端解密。也可以在后端加密&…

JAVAEE—servlet的概念及使用,使用servlet接口实现一个表白墙

文章目录 servlet的概念静态页面和动态页面servlet的作用 写出一个servlet程序目录的创建设置smart tomcat编写helloworld servlet的概念 首先我们要搞明白什么是servlet&#xff0c;servlet是一种实现动态页面的技术&#xff0c;他是由tomcat提供给程序员的一组API可以帮助程…

VScode 无法连接云服务器

试了很多方法&#xff0c;比如更换VScode版本&#xff0c;卸载重装&#xff0c;删除配置文件 重启电脑&#xff0c;都无法成功。最后重置电脑后才连接上&#xff0c;但是重启服务器后又出现该问题。 方法一&#xff1a;修改环境 方法二&#xff1a;把vscode卸载干净重下

nacos-redis-springboot

新项目 准备工作 nacos 版本 2.0.3 redis 最终版本说明 springcloud-alibaba&#xff1a;2.2.7RELEASE springcloud&#xff1a;Hoxton.SR12 springboot&#xff1a;2.3.12.RELEASE Nacos&#xff1a;2.0.3 步骤 启动nacos和redis 准备nacos配置文件 server: port…

3款超好用的PDF在线处理神器,学会了职场工作效率翻倍!

&#x1f60a; 作为一名职场小白,我深知处理文档的痛苦。尤其是面对PDF这个"大魔王",经常感到头大! 合同要合并、简历要压缩、论文要转Word改格式…一个个来手动操作,简直要累死。&#x1f62b; 直到我发现了这些PDF在线处理神器!瞬间感觉自己的工作效率嗖嗖提升,整…

Nginx配置Https缺少SSL模块

1、Linux下Nginx配置https nginx下载和安装此处就忽略&#xff0c;可自行百度 1.1、配置https 打开nginx配置文件 vim /opt/app/nginx/conf/nginx.conf相关https配置 server {listen 443 ssl; #开放端口server_name echarts.net;#域名#redirect to https#ssl on; #旧版#ssl证…

SQL Sever无法连接服务器

SQL Sever无法连接服务器&#xff0c;报错证书链是由不受信任的颁发机构颁发的 解决方法&#xff1a;不用ssl方式连接 1、点击弹框中按钮“选项” 2、连接安全加密选择可选 3、不勾选“信任服务器证书” 4、点击“连接”&#xff0c;可连接成功

[附源码]SpringBoot+Vue网盘项目_仿某度盘

视频演示 [附源码]SpringBootVue网盘项目_仿某度盘 功能介绍 支持秒传支持视频音频播放、拖拽进度条、倍速播放等支持图片预览&#xff0c;旋转&#xff0c;放大支持多人一起上传&#xff0c;共享上传进度&#xff08;例如a上传苍老师学习资料到50%&#xff0c;突然b也上传苍老…

Flask教程2:flask高级视图

文章目录 add_url_rule类视图的引入装饰器的自定义与使用蓝图的使用url_prefix设置蓝图前缀 add_url_rule 欲实现url与视图函数的绑定&#xff0c;除了使用路由装饰器app.route&#xff0c;我们还可以通过add_url_rule(rule,endpointNone,view_funcNone)方法&#xff0c;其中&…

【webrtc】MessageHandler 8: 基于线程的消息处理:处理音频输入输出断开

m98代码,看起来m114 去掉了MessageHandler :音频的录制和播放 都使用了on message,但只是用来通知并处理流的断开的。AAudioRecorder AAudioRecorder 处理流断开 OnErrorCallback :有可能 错误回调是别处来的,是其他线程, 但是这个错误的处理要再自己的线程执行: 音频播…

【人工智能AI书籍】TensorFlow机器学习实战指南(推荐)

今天又来给大家推荐一本人工智能方面的书籍<TensorFlow机器学习实战指南>。TensorFlow是一个开源机器学习库。本书从TensorFlow的基础开始介绍&#xff0c;涉及变量、矩阵和各种数据源。之后&#xff0c;针对使用TensorFlow线性回归技术的实践经验进行详细讲解。后续章节…

【记录】Python3| 将 PDF 转换成 HTML/XML(✅⭐⭐⭐⭐pdf2htmlEX)

本文将会被汇总至 【记录】Python3&#xff5c;2024年 PDF 转 XML 或 HTML 的第三方库的使用方式、测评过程以及对比结果&#xff08;汇总&#xff09;&#xff0c;更多其他工具请访问该文章查看。 文章目录 pdf2htmlEX 使用体验与评估1 安装指南2 测试代码3 测试结果3.1 转 HT…

Mybatis.net + Mysql

项目文件结构 NuGet下载Mybatis.net相关包&#xff1a;IBatisNet 安装完成后&#xff0c;会显示在&#xff0c;在已安装页面。同时&#xff0c;在管理器中的引用列表中&#xff0c;会多出来两个引用文件 IBatisNet.CommonIBatisNet.DataMapper 安装 Mysql.data。 注意&#xff…