CSS基础:margin属性4种值类型,4个写法规则详解

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 WEB 前端的程序媛。大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合集

268篇原创内容-gz.h

后台回复“前端工具”可获取开发工具,持续更新中

后台回复“前端基础题”可得到前端基础100题汇总,持续更新中

引入

当我们网页布局过程中,经常会用到 CSS 中的 margin 外边距属性。比如居中布局、间距控制、元素排列等,通过合理使用 margin 属性可以实现各种布局效果。

比如,淘宝的这块,居中布局。

图片

再比如,网易云音乐首页的,这些圈红的地方,控制元素右侧和下边的空白间距。

图片

今天,我们就来详细认识 margin 外边距的作用和用法,学会以后,以上 2 种间间距布局就学会啦~

ok,那一起来看看吧。

Margin 基础

一、Margin 单独边

4 个单独边的属性分别是:

  1. margin-top:用于设置元素的上外边距,即元素顶部与其上面元素的距离。

  2. margin-right:用于设置元素的右外边距,即元素右侧与其右侧元素的距离。

  3. margin-bottom:用于设置元素的下外边距,即元素底部与其下面元素的距离。

  4. margin-left:用于设置元素的左外边距,即元素左侧与其左侧元素的距离。

这些单独的边属性可以分别控制元素的上、右、下、左四个方向的外边距,使得页面布局更加灵活。

好,来看代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Margin Example</title>
    <style>
      .box {
        width: 200px;
        height: 200px;
        background-color: #ffcc00;
        margin-top: 50px; /* 上外边距为 50px */
        margin-right: 100px; /* 右外边距为 100px */
        margin-bottom: 150px; /* 下外边距为 150px */
        margin-left: 200px; /* 左外边距为 200px */
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
  </body>
</html>

效果如图。我们还可以通过检查元素,通过右侧的盒子能清楚地看出来 margin 间距。

图片

二、Margin 的属性值

可以是以下 4 种类型:

  1. 长度值:如像素(px)、厘米(cm)、毫米(mm)、百分比(%)等,用于指定具体的距离或比例。

  2. 负值:可以使用负值来调整元素的位置,使其与其他元素重叠或产生间距。

  3. auto:表示由浏览器自动计算外边距,通常用于水平居中布局。这意味着元素一定要指定的宽度且制是块元素,而剩余空间会在左右边界之间平均分配,从而实现了水平居中的效果。

  4. inherit:表示继承父元素的 margin 值。

好,我们继续用代码来演示。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Margin Values Example</title>
    <style>
      .box {
        width: 200px;
        height: 100px;
        background-color: #f0f0f0;
        border: 2px solid #333;
        margin-bottom: 10px; /* 设置每个.box的下边距离为10px */
      }

      .length-value {
        margin-left: 20px; /* 使用长度值20px */
      }

      .negative-value {
        margin-left: -20px; /* 使用负值-20px */
      }

      .auto-value {
        width: 1080px; /* 设置宽度为1080px */
        height: 522px; /* 设置高度为522px */
        margin-top: 10px;
        margin-right: auto; /* 左右使用auto值,可以使元素水平居中 */
        margin-left: auto; /* 使用auto值 */
      }

      .parent {
        margin-left: 20px; /* 设置父元素的左外边距为 20px */
        background-color: #f0f0f0;
      }

      .child {
        width: 200px;
        height: 100px;
        background-color: #ffcc00;
        margin-left: inherit; /* 继承父元素的左外边距 */
      }
    </style>
  </head>
  <body>
    <div class="box length-value">Margin with Length Value (20px)</div>
    <div class="box negative-value">Margin with Negative Value (-10px)</div>
    <div class="box auto-value"><img src="./img/tree.png" alt="" /></div>
    <div class="parent">
      <div class="child">我与父级也有距离</div>
    </div>
  </body>
</html>

效果如图。

图片

所用图片如下:

图片

注意:

在这里呢,在用这个auto的值时,有以下 4 个注意事项。

  1. 水平居中布局:将 margin 属性设置为 auto 可以实现元素在其容器中水平居中,但仅在以下条件下才有效:

    • 元素必须有一个明确的宽度,例如使用 width 属性指定的宽度值。

    • 元素的 display 属性不能是 inline,必须是 blockinline-block 或 flex 等可以设置宽度的值。

  2. 自适应布局:在一些自适应布局的情况下,可以使用 margin: auto; 来实现元素宽度的自动调整和居中显示,适应不同屏幕尺寸。

  3. 浏览器支持:大多数现代浏览器都支持将 margin 属性的值设置为 auto,但在一些特殊情况下,旧版浏览器可能不支持此功能或表现不一致。

  4. 仅对水平方向生效margin: auto; 只会在水平方向上生效,不会影响垂直方向的布局。

简写方法

如果我们要为一个元素设置四个边,写 4 行 CSS 太冗长了。所以啊,margin属性也有简写形式,和之前写过的border 4 个边的设置规则类似。

margin也可以让我们快速设置元素的外边距,以减少代码量和提高可读性。当简写形式中指定了一个、两个、三个或四个值时,遵循以下规则:

  1. 一个值:将该值应用于所有四个边的外边距。

  2. 两个值:第一个值应用于上下边的外边距,第二个值应用于左右边的外边距。

  3. 三个值:第一个值应用于上边的外边距,第二个值应用于左右边的外边距,第三个值应用于下边的外边距。

  4. 四个值:按照顺序依次应用于上、右、下、左的外边距。

这种规则确保了在不同场景下,可以通过简单的方式灵活地设置元素的外边距,使得样式编写更加高效和便捷。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Margin Property Demo</title>
    <style>
      .box {
        width: 800px;
        height: 100px;
        background-color: #f0f0f0;
        border: 2px solid #ccc;
        box-sizing: border-box;
      }
      /* 一个值:将该值应用于所有四个边的外边距 */
      .example1 {
        margin: 20px;
      }
      /* 两个值:第一个值应用于上下边的外边距,第二个值应用于左右边的外边距 */
      .example2 {
        margin: 10px auto;
      }
      /* 三个值:第一个值应用于上边的外边距,第二个值应用于左右边的外边距,第三个值应用于下边的外边距 */
      .example3 {
        margin: 5px 15px 25px;
      }
      /* 四个值:按照顺序依次应用于上、右、下、左的外边距 */
      .example4 {
        margin: 5px 10px 15px 20px;
      }
    </style>
  </head>
  <body>
    <div class="box example1">One Value Margin</div>
    <div class="box example2">Two Values Margin</div>
    <div class="box example3">Three Values Margin</div>
    <div class="box example4">Four Values Margin</div>
  </body>
</html>

延伸:margin 重叠现象

当两个相邻的元素(即兄弟元素)或者父子元素之间具有垂直方向上的 margin 时,可能会发生 margin 合并现象,这种现象是 CSS 盒模型中的一个重要特性,它的规则和原理如下:

一、相邻兄弟元素的 margin 合并

当两个相邻的兄弟元素具有相同的垂直方向上的 margin 时,它们的 margin 会发生合并,合并后的 margin 将取两个 margin 中的较大值。这种情况下,两个元素之间的间距将由两个 margin 中较大的那个值来决定。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Margin 合并示例</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        background-color: #f0f;
        margin: 20px 0; /* 相邻兄弟元素的垂直 margin */
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
    <div class="box"></div>
  </body>
</html>

效果如下:

图片

在上面的示例中,两个相邻的 .box 元素之间具有相同的 margin: 20px 0;,因此它们的 margin 会发生合并,两个元素之间的垂直间距实际上是 20px。

二、父子元素的 margin 合并

在垂直方向上,父元素的 margin-top 和子元素的 margin-top 之间会发生合并,合并后的 margin-top 取两者中的较大值。类似地,父元素的 margin-bottom 和子元素的 margin-bottom 之间也会发生合并,合并后的 margin-bottom 取两者中的较大值。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Margin 合并示例</title>
    <style>
      .parent {
        background-color: #ff0;
        margin: 30px 0; /* 父元素的垂直 margin */
      }
      .child {
        width: 100px;
        height: 100px;
        background-color: #0ff;
        margin: 20px 0; /* 子元素的垂直 margin */
      }
    </style>
  </head>
  <body>
    <div class="parent">
      <div class="child"></div>
    </div>
  </body>
</html>

效果如下:

图片

在上面的示例中,父元素 .parent 的 margin: 30px 0; 和子元素 .child 的 margin: 20px 0; 之间发生了合并,因此父元素和子元素之间的垂直间距实际上是 30px。这是因为子元素的 margin-top 会和父元素的 margin-top 合并,合并后取较大值。

综上所述,margin 合并现象在 CSS 布局中是一个重要的特性,需要注意合并规则以及合并对布局的影响。

ok,本文完。

更多前端系列内容可以go公众.h:云桃桃

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pnpm 使用 workspace 报错 ERR_INVALID_THIS

有时候真的感觉如果有一个老师指路&#xff0c;那么遇到的坑真的会少很多。 错误示例&#xff1a; GET https://registry.npmjs.org/rollup%2Fplugin-typescript error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.原因是什么&#xff1f;原因就是 pnpm 的…

Web中使用Weblogic用户

WebLogic用户&#xff0c;组设置 1. 登录weblogic console, domain结构中选择Security Realms&#xff0c;显示安装时默认创建的Realm &#xff1a; myrealm 2. 点击myrealm, 选择 users and Group&#xff0c; 追加用户和组 选择既存的权限组追加到新规的组中&#xff0c;赋予…

pyenv-win管理windows上多个版本python

pyenv是一款管理多个python版本的工具&#xff0c;可以便捷的切换使用的python版本&#xff0c;但是不支持windows环境&#xff0c;在windows环境需要使用pyenv-win pyenv-win安装 官方介绍的安装方式比较多&#xff0c;在此主要记录一下我习惯的安装方式 下载pyenv-win,可以…

2024-04-15_[UPnP]:详细解析

UPnP 一、论文阅读 1.2 Theory 1.2.1 Geometry of the absolute pose problem α i f i v i R p i t , i 1.. n . \alpha_i \mathbf{f}_i \mathbf{v}_i \mathbf{R} \mathbf{p}_i \mathbf{t} ,i1..n. αi​fi​vi​Rpi​t,i1..n. 其中&#xff1a; P i ∈ R 3 P_i \i…

javaWeb项目-闲置二手物品交易平台功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Spring Boot框架 …

PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目

在创建PHP项目之前我们需要安装PHP插件&#xff0c;安装步骤如下&#xff1a;Windows&#xff1a;IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目&#xff0c;导入之后选择&#xff0c;File > Setting 选择对应 CLL Interpreter&#xff0c;如果没有操…

麒麟服务器操作系统安装TFTP服务

原文链接&#xff1a;麒麟服务器操作系统安装TFTP服务 Hello&#xff0c;大家好啊&#xff01;今天我们将讨论如何在麒麟服务器操作系统上安装和配置TFTP&#xff08;Trivial File Transfer Protocol&#xff09;服务。TFTP是一种简单的文件传输协议&#xff0c;通常用于无盘工…

9. Spring Boot 日志文件

本篇文章源码位置延续上个章节&#xff1a;SpringBoot_demo 本篇文章内容源码位于上述地址的com/chenshu/springboot_demo/logging包下 1. 日志的作用 发现和定位问题&#xff1a; 日志是程序的重要组成部分&#xff0c;它在系统、程序出现错误或异常时提供诊断和解决问题的线…

07 SQL进阶 -- 集合运算 -- 表的加减法

1. 表的加减法 1.1 什么是集合运算 集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。 在标准 SQL 中, 分别对检索结果使用 UNION, INTERSECT, EXCEPT 来…

使用 Tranformer 进行概率时间序列预测实战

使用 Transformers 进行概率时间序列预测实战 通常&#xff0c;经典方法针对数据集中的每个时间序列单独拟合。然而&#xff0c;当处理大量时间序列时&#xff0c;在所有可用时间序列上训练一个“全局”模型是有益的&#xff0c;这使模型能够从许多不同的来源学习潜在的表示。…

神经网络学习笔记——大白话直观理解!

B站梗直哥、梗直哥丶的个人空间-梗直哥丶个人主页-哔哩哔哩视频 什么是神经网络模型?神经网络模型是一种由大量互相连接的神经元构成的算法模型,它受到生物神经元网络的启发,擅长对输入数据进行分类和模式识别。 神经网络模型最擅长的就是个各种分类问题。 神经网络模型最擅…

RN向上向下滑动组件封装(带有渐变色)

这段组件代码逻辑是出事有一个View和下面的块,下面的块也就是红色区域可以按住向上向下滑动,当滑动到屏幕最上面则停止滑动,再向上滑动的过程中,上方的View的背景色也会有个渐变效果,大概逻辑就是这样 代码如下 import React, {useEffect, useRef, useState} from react; impo…

第18天:信息打点-APP资产知识产权应用监控静态提取动态抓包动态调试

第十八天 本课意义 1.如何获取到目标APP信息 2.如何从APP信息中提取资产 一、Web&备案信息&单位名称中发现APP 1.通过查询网站去查询APP信息 https://www.xiaolanben.com/ https://aiqicha.baidu.com/ https://www.qimai.cn/ https://app.diandian.com/ 2.其他…

嵌入式学习day16-22(2024.04.06-13)

文章目录 C语言网络编程socket主机与网络字节序转换inet_addr、inet_aton&#xff08;ip转换&#xff09;inet_ntoa 网络字节序转换为IP字符串端口转换为网络字节序网络字节序转换为端口atoi &#xff08;字符串转换为整数&#xff09; UDP通信流程UDP多进程并发服务器服务端客…

沐风老师3DMAX物品摆放插件ObjectPlacer安装和使用方法详解

3DMAX物品摆放插件ObjectPlacer安装和使用教程 3DMAX物品摆放插件ObjectPlacer&#xff0c;一键在曲面上摆放对象&#xff0c;如摆放家具物品、种植花草树木、布设电线杆交通标志等。它的功能是将对象与几何体对象&#xff08;网格、多边形、面片或NURBS&#xff09;的面法线对…

RISCV指令集体系简读之RV32I

RV32I 指令格式 用于寄存器-寄存器操作的R类型指令用于短立即数和访存load操作的I型指令用于访存store操作的s型指令用于条件跳转操作的B类型指令用于长立即数的U型指令用于无条件跳转的J型指令 特点&#xff1a; 所有指令都是32bits&#xff0c; 简化了指令解码&#xff1b;…

LangChain学习笔记与样程

LangChain 是一个开源的机器学习工具库&#xff0c;专门用于构建和部署基于语言的应用程序。这个库提供了一系列工具和接口&#xff0c;使开发者能够轻松地整合和使用大型语言模型&#xff0c;例如 OpenAI 提供的 GPT。LangChain 的核心特点包括模块化设计、灵活性和易用性&…

linnux文件服务

1.FTP:文件传输协议。 基础:控制端口(身份验证) command 21/tcp 数据端口: data 20/tcp FTP Server默认配置:yum -y install vsftpd (安装vsftpd&#xff09; touch /var/ftp/abc.txt(创建文件) systemctl start vsftpd(启动文件&#xff09; systemctl …

osg渲染过程

目录 1、渲染最简单代码 2、详解run方法 3、详细过程 4、回调函数 5、Node Visitor 1、渲染最简单代码 2、详解run方法 3、详细过程 3.1 advance()方法 进行帧计数 3.2 eventTraversal() eventTraversal()响应用户操作,eventTraversal()遍历的是事件队列&#xff0c;而…