惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
量子位
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
Y
Y Combinator Blog
L
LangChain Blog
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
CSS margin-inline和margin-block区别是什么? « 张鑫旭-鑫...
张鑫旭,zhangxinxu · 2018-10-26 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8132
本文可全文转载,个人博客无需授权,只要保留原作者、出处以及文中链接即可,任何网站均可摘要聚合,商用请联系授权。

一、了解CSS逻辑属性

所谓CSS逻辑属性,指的是*-start*-end以及*-inline-start*-inline-end*-block-start*-block-end这类CSS属性,其最终渲染的方向是有逻辑性在里面的。

例如margin-left方向是固定的,就左侧间距,没有逻辑;但是,margin-start有可能是左间距,也有可能是右间距,例如,对于内联元素,如果direction属性值是rtl,则margin-start的表现等同于margin-right,如果属性值是ltr,则margin-start的表现等同于margin-left,就表现出了逻辑判断在里面,因此,成为CSS逻辑属性。

// zxx: 如果对direction属性不是很了解,可以参考这篇文章“CSS direction属性简介与实际应用”。

CSS逻辑属性很多,包括:block-sizeborder-block-endborder-block-end-colorborder-block-end-styleborder-block-end-widthborder-block-startborder-block-start-colorborder-block-start-styleborder-block-start-widthborder-inline-endborder-inline-end-colorborder-inline-end-styleborder-inline-end-widthborder-inline-startborder-inline-start-colorborder-inline-start-styleborder-inline-start-widthinline-sizeinset-block-endinset-block-startinset-inline-endinset-inline-startmargin-block-endmargin-block-startmargin-inline-endmargin-inline-startmax-block-sizemax-inline-sizemin-block-sizemin-inline-sizepadding-block-endpadding-block-startpadding-inline-endpadding-inline-start

标题所提到的margin-inlinemargin-block也是CSS逻辑属性,前者是margin-inline-startmargin-inline-end的缩写,后者是margin-block-startmargin-block-end的缩写。

二、margin-inline和margin-block的区别

CSS逻辑属性浏览器支持还算早,例如text-align-starttext-align-end,以及我没记错的话,之前Chrome版本还有非标准的-webkit-margin-before-webkit-margin-end。然后最近的Chrome版本69完全支持CSS逻辑属性后,去掉了。参见下面截图纯绿色部分:

CSS逻辑属性兼容性

对于margin这种4个方向都可以生效的元素而言,*-start*-end这种设计是有局限的,一旦使用writing-mode属性改变水平流为垂直流,则*-start就会和*-top发生冲突。而标准的CSS逻辑属性增加了inlineblock一层区分,则就没有这个问题。

了解margin-inline和margin-block

乍一看,我们可能会误认为margin-inline是对inline元素生效的,margin-block是对block元素生效的。实际上不是的,千万不要被表面迷惑,inline和block其实指的是方向。

在CSS世界中,inline元素的排列默认是水平的,从左往右,block元素的排列是垂直的,从上往下。

所以,在中文或英文网页环境中,默认情况下,margin-inline指的是水平方向的margin控制,而margin-block指的是垂直方向的margin控制。

一图胜千言,一例胜千图,您可以狠狠地的点击这里:默认margin-inline-start和margin-block-start表现demo

上下两个元素,分别设置CSS如下:

.inline-start {
    margin-inline-start: 40px;
}
.block-start {
    margin-block-start: 40px;
}

结果如下截图:

对比效果截图

可以看到,设置margin-inline-start:40px的元素其样式表现等同于margin-left:40px,因为此时文字这个inline元素的排版方向是左→右,因此inline-start是左left。

类似的,设置margin-block-start:40px的元素,其block元素此时的排版方向是上↓下,因此block-start是上top。最终样式表现等同于margin-top:40px


下面,我们设置两个元素direction:rtl,则表现如下:

对齐如margin-right

inline元素的排版方向变成了右→左,因此,margin-inline-start:40px这里的start指的就是right,由此右间距40px

writing-mode属性可以改变block元素的排版方向,从垂直变成水平,因此,设置两个元素writing-mode:vertical-lr,两元素效果表现如下截图:

writing-mode下的margin表现

// zxx: 如果对writing-mode属性不是很了解,可以参考这篇文章“改变CSS世界纵横规则的writing-mode属性”。

提示:demo页面提供了切换按钮,大家可以自行亲自感受布局的变化。

margin-inline和margin-block的区别是什么?

margin-inlinemargin-block的区别在于,一个表示inline元素排版方向,一个表示block元素排版方向。

三、结束语

除了directionwriting-mode这两个CSS属性,text-orientation也是可以影响*-inline-start*-inline-end*-block-start*-block-start这些CSS属性的定位的。

text-orientation是一个比较新的CSS3属性,IE包括Edge18都尚未支持。其作用可以让英文字母都竖着同时垂直排列(见下截图),writing-mode只能让东亚语言竖排。

英文竖排

这个以后有机会再深入讲解。

好,本文就到这里,感谢阅读,欢迎交流。

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8132

(本篇完)