margin-trim

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

margin-trim 属性允许容器裁剪其子元素的毗邻容器边缘的边距。

语法

css
margin-trim: none;
margin-trim: block;
margin-trim: block-start;
margin-trim: block-end;
margin-trim: inline;
margin-trim: inline-start;
margin-trim: inline-end;

/* Global values */
margin-trim: inherit;
margin-trim: initial;
margin-trim: revert;
margin-trim: revert-layer;
margin-trim: unset;

none

边距不会被容器裁剪。

block

提供给块级子元素,当它们毗邻容器边缘时的边距会被裁剪为零,而不影响提供给容器的边距。

block-start

第一个块级子元素与容器边缘的边距会被裁剪为零。

block-end

最后一个块级子元素与容器边缘的边距会被裁剪为零。

inline

提供给行内子元素,当它们毗邻容器边缘时的边距会被裁剪为零,而不影响行首和行尾的间距。

inline-start

容器边缘和第一个行内子元素之间的边距会被裁剪为零。

inline-end

容器边缘和最后一个行内子元素之间的边距会被裁剪为零。

正式定义

初始值none
应用于块容器和多列容器。它也适用于 ::first-letter
继承性
计算值同指定值
动画类型离散

正式语法

margin-trim = 
none |
[ block || inline ] |
[ block-start || inline-start || block-end || inline-end ]

示例

基本用法

一旦此属性得到支持,它可能会像这样工作

当你有一个包含一些行内子元素的容器,并且你想在每个子元素之间放置一个边距,但不希望它干扰行尾的间距时,你可能会这样做

css
article {
  background-color: red;
  margin: 20px;
  padding: 20px;
  display: inline-block;
}

article > span {
  background-color: black;
  color: white;
  text-align: center;
  padding: 10px;
  margin-right: 20px;
  margin-left: 30px;
}

这里的问题是,你会在行右侧多出 20px 的间距,所以你可能会这样做来解决它

css
span:last-child {
  margin-right: 0;
  margin-left: 0;
}

为了实现这一点,不得不编写另一个规则很麻烦,而且它也不是很灵活。相反,margin-trim 可以解决这个问题

css
article {
  margin-trim: inline-end;
  /* … */
}

类似地,要移除容器边缘的左边距

css
article {
  margin-trim: inline-start;
  /* … */
}

规范

规范
CSS 盒模型模块 第 4 级
# margin-trim

浏览器兼容性

另见