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

news2024/12/25 1:03:54

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 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:云桃桃

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

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

相关文章

PaddleOCR训练自己模型(1)----数据准备

一、下载地址&#xff1a; PaddleOCR开源代码&#xff08;下载的是2.6RC版本的&#xff0c;可以根据自己需求下载&#xff09; 具体环境安装就不详细介绍了&#xff0c; 挺简单的&#xff0c;也挺多教程的。 二、数据集准备及制作 &#xff08;1&#xff09;下载完代码及配置…

Navicat for MySQL 使用基础与 SQL 语言的DDL

一、目的&#xff1a; Navicat for MySQL 是一套专为 MySQL 设计的高性能数据库管理及开发 工具。它可以用于任何版本 3.21 或以上的 MySQL 数据库服务器&#xff0c;并支持大 部份 MySQL 最新版本的功能&#xff0c;包括触发器、存储过程、函数、事件、视图、 管理用户等。…

软件工程及开发模型

根据希赛相关视频课程汇总整理而成&#xff0c;个人笔记&#xff0c;仅供参考。 软件工程的基本要素包括方法、工具和&#xff08;过程&#xff09; 方法&#xff1a;完成软件开发的各项任务的技术方法&#xff1b; 工具&#xff1a;运用方法而提供的软件工程支撑环境&#xff…

数据结构 -- 二分查找

本文主要梳理了二分查找算法的几种实现思路&#xff0c;基本概念参考 顺序、二分、哈希查找的区别及联系_生成一个大小为10万的有序数组,随机查找一个元素,分别采用顺序查找和二分查找方式-CSDN博客 1、基本概念 &#xff08;1&#xff09;前提条件&#xff1a;待查找数据必须…

Leetcode二叉树刷题

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true public boolean isSymmetric(TreeNode root) {if(rootnull)return true;return compare(root.left,root.right);}public boole…

【Unity】游戏场景添加后处理特效PostProcessing

添加后处理特效PostProcessing 添加雾效果后处理何为后处理&#xff1f;添加后处理特效 添加雾效果 依次点击Window -> Rendering -> Lighting添加Lighting面板。 点击Lighting里面的Environment&#xff0c;找到Other Setting 将Fog选项勾选 更改下方的颜色 调整雾的浓…

自然语言处理: 第二十七章LLM训练超参数

前言: LLM微调的超参大致有如下内容,在本文中&#xff0c;我们针对这些参数进行解释 training_arguments TrainingArguments(output_dir"./results",per_device_train_batch_size4,per_device_eval_batch_size4,gradient_accumulation_steps2,optim"adamw_8bi…

JavaSE图书管理系统

JavaSE图书管理系统 思路一.Main方法二.User包1.User类2.NormaUser类3.AdminUser类三.book包1.BookList类2.Book类四.operation包1.IOPeration接口2.AddOperation类新增图书3.BorrowOperation类借阅图书4.DelOperation类删除图书5.FindOperation类查找图书6.ReturnOperation类归…

Unity解决:导出安卓apk 安装时报错:应用未安装:软件包似乎无效

Unity2018.4.36 导出安卓apk 安装时报错&#xff1a;应用未安装&#xff1a;软件包似乎无效 解决办法&#xff1a;因为安装到安卓12 需要添加添加过滤规则 在AS工程AndroidManifest.xml 添加过滤规则即可。 android:exported"true"

初识ansible服务剧本playbook及剧本编写实例

目录 1、playbook剧本文件概念 1.1 剧本文件的结构由4部分组成 2、配置实例 实例1-编写一个实现批量安装mariadb数据库的剧本 实例2-编写一个创建一个目录/backup,并在目录喜爱创建01.txt文件的剧本 实例3-编写一个添加定时同步时间的定时任务剧本 错误反思 1、playbook剧…

MDK-ARM Keil5.38 下载安装环境搭建

一、keil软件介绍 KEIL是公司的名称&#xff0c;有时候也指KEIL公司的所有软件开发工具&#xff0c;目前2005年Keil由ARM公司收购&#xff0c;成为ARM的公司之一。 MDK&#xff08;Microcontroller Development Kit&#xff09; 也称MDK-ARM、KEIL MDK、RealView MDK、KEIL For…

不需要GPU就可以玩转模型,同时支持本地化部署

简单一款不需要GPU就可以在Win 机器跑的模型&#xff1a;Ollama&#xff1b;用于本地运行和部署大型语言模型&#xff08;LLMs&#xff09;的开源工具 关于Ollama的简要介绍 平台兼容性&#xff1a;Ollama支持多种操作系统&#xff0c;包括macOS、Linux和Windows&#xff0c;…

linux系统USB/IP远程共享USB设备 —— 筑梦之路

概述 USB/IP 是一个开源项目&#xff0c;已合入 Kernel&#xff0c;在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。 USB Client&#xff1a;使用USB的终端&#xff0c;将server共享的usb设备挂载到本地。 USB Server&#xff1a;分享本地的usb设备至远程。 架构原理…

蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)

本题链接&#xff1a;蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网 题目&#xff1a;​​​​​​​ 样例&#xff1a; 输入 2 3.14 输出 13 思路&#xff1a; 根据题意&#xff0c;结合数据范围&#xff0c;这是一道模板的高精度乘以低精度问题。 题意是double 类型 d 与…

vue3从精通到入门4:diff算法的实现

Vue 3 的 diff 算法相较于 Vue 2 有了一些改进和优化&#xff0c;主要是为了应对更复杂的组件结构和更高的性能需求。 以下是 Vue 3 diff 算法在处理列表更新时的大致步骤&#xff1a; 头头比较&#xff1a;首先&#xff0c;比较新旧列表的头节点&#xff08;即第一个节点&…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言&#xff1a;2024年4月13日上午&#xff0c;我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店&#xff0c;参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会&#xff08;MAS’2024&#xff09;。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

如何高效部署和扩展AI模型:开源平台与无服务器架构的综合应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

java的深入探究JVM之类加载与双亲委派机制

前言 前面学习了虚拟机的内存结构、对象的分配和创建&#xff0c;但对象所对应的类是怎么加载到虚拟机中来的呢&#xff1f;加载过程中需要做些什么&#xff1f;什么是双亲委派机制以及为什么要打破双亲委派机制&#xff1f; 类的生命周期 类的生命周期包含了如上的7个阶段&a…

【Linux C | 多线程编程】线程同步 | 总结条件变量几个问题

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

visual studio连接ubuntu不成功原因(SSH问题)及解决办法

原因1&#xff1a; 网络没有互通&#xff08;一般VMware&#xff09; 使用ping来看网络是不是可以互通&#xff0c;例如&#xff1a; //这里的ip是ubuntu的ip&#xff0c;也可以从ubuntu的客户端ping一下当前主机 ping 192.168.1.101原因2&#xff1a; SSH没有密钥&#xf…