-Webkit-Box 在 Safari 中出现的兼容性问题(bug?)

作者:应用开发 来源:域名 浏览: 【】 发布时间:2025-11-05 14:00:48 评论数:

本文转载自微信公众号「志语自乐」,出现作者linxz。容性转载本文请联系志语自乐公众号。问题

问题来源背景

这个是出现当时在『iCSS前端CSS交流讨论』群中看到的,当时转为朋友的容性提问是这样的:

看这个图,主要是问题有两点:多行截断和 tag 环绕。多行截断那就是出现用 -webkit-box 那种方式,tag 环绕呢那就是容性早期图文环绕的方式,用 float 就好了。问题

理想是出现丰满的,现实是容性骨感的。未经他人之苦,问题一切都是出现那么轻松。当我提到说使用 float 就可以实现后,容性群里有朋友反馈说在 Safari 和移动端会有问题。问题

事实上我的确也没在意过,于是事后尝试了一下,的免费信息发布网确如此。

摸索前进

这是一个比较奇怪的现象,首先就我个人而言的确是没有见到过这样的情况,之前都没有这样类似的需求。

初次尝试

在没有查阅任何资料之前,直接做了一个最简单的 demo 看效果。

<div class="text-overflow">   <span class="tag">new</span>   很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容 </div> 

一个很简单的 HTML 结构和一份很简单的 CSS 样式。

.text-overflow {   width: 200px;   overflow: hidden;   display: -webkit-box;   -webkit-line-clamp: 2;   -webkit-box-orient: vertical;   font-size: 13px;   line-height: 1.425;   background-color: pink; } .tag {   float: right;   padding: 0 2px;   color: #fff;   background-color: #f32600;   border-radius: 2px; } 

最终的效果就是前面所看到的,在 Chrome 中很完美地得到期望结果,但是 Safari 中发现 tag 不见了,并且有一条空白存在。

按照常规想法,一般这种内容突然不见的,如果不是被截断了就是被覆盖了,或者渲染有问题。尝试性在 .tag 中增加了 position: relative; 看看效果,发现 tag 出现了,云南idc服务商并且是独占一行。

设想

tag 独占一行,说明至少有类似 block 块级元素的特性存在,而 float 之后本身就是会将元素转为块级。想到这里,突然想到,-webkit-box 这个是早期版本的 flex 布局,那会不会就跟 display: flex; 这个一样,当有了 flex 容器之后,flex 元素就不再是 BFC、IFC 之类的,而是 FFC 呢?

如果真是这样的话,那么是不是就可以多嵌套一层,由最外层控制文本多行截断,最里层控制 tag 的浮动效果呢?于是改变一下 HTML 结构。

<div class="box">   <div class="text-overflow">     <span class="tag">new</span>     很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容很多文本内容   </div> </div> 

在原有的基础上,增加一层,CSS 部分也改变一下,高防服务器其实只要把选择符 .text-overflow 换成 .box 就可以了。

.box {   width: 200px;   overflow: hidden;   display: -webkit-box;   -webkit-line-clamp: 3;   -webkit-box-orient: vertical; } .tag {   float: right;   padding: 0 2px;   color: #fff;   background-color: #f32600;   border-radius: 2px; } 

那么最终的结果就是这样。也就是说的确是 -webkit-box 的影响,而且应该就是 FFC 的关系。至于浏览器中差异可能就是兼容性问题了。

查资料

既然 -webkit-box 是早期 flex 布局的一个版本,那么必定还有其他一些属性,比如以下几个:

box-pack; box-align; box-orient;

那么就按照这个思路,我们可以看看 flex 相关的资料文档。

在之前的 flex 教程文档(https://www.yuque.com/linxz/flex)有关 display: flex; 有过介绍,前面也提到了 FFC,那么具体的我们也可以从 w3c 文档中看到:

A flex container establishes a new flex formatting context for its contents. This is the same as establishing a block formatting context, except that flex layout is used instead of block layout. For example, floats do not intrude into the flex container, and the flex container’s margins do not collapse with the margins of its contents. Flex containers form a containing block for their contents exactly like block containers do. [CSS21] The overflow property applies to flex containers.

以上内容来自:https://www.w3.org/TR/css-flexbox-1/#flex-formatting-context

其中 A flex container establishes a new flex formatting context for its contents. 和 floats do not intrude into the flex container,至少说明了在 flex 布局中,浮动是有“可能”是无效的。

我的结论

针对这个问题的处理方式,我的结论,是的,仅仅只是代表我个人的一个结论就是:多套一层,由外层控制元素多行截断,最里层去实现浮动环绕的效果,避开因为 flex 容器而导致子元素浮动失效的情况。

一、文件/文件夹管理 cd .. 回当前目录的上一级目录 mv 路经/文件 /经/文件移动相对路经下的文件到绝对路经下 二、系统管理 fdisk fdisk -l 查看系统分区信息 Useradd 创建一个新的用户 service [servicename] start/stop/restart 系统服务控制操作 uname -a 查看内核版本 reboot Init 6 重启LINUX系统 三、打包/解压 tar -c 创建包 –x 释放包 -v 显示命令过程 –z 代表压缩包 四、make编译 make 编译 五、apt命令 apt-cache search package 搜索包 查看软件xxx安装内容 查找软件 查询软件xxx依赖哪些包 查询软件xxx被哪些包依赖 增加一个光盘源 系统升级 清除所以删除包的残余配置文件 编译时缺少h文件的自动处理 查看安装软件时下载包的临时存放目录 备份当前系统安装的所有包的列表 从上面备份的安装包的列表文件恢复所有包 清理旧版本的软件缓存 清理所有软件缓存 删除系统不再使用的孤立软件 查看包在服务器上面的地址 系统 查看Ubuntu版本 查看内核加载的模块 查看PCI设备 查看USB设备 查看网卡状态 查看CPU信息 显示当前硬件信息 硬盘 查看IDE硬盘信息 查看STAT硬盘信息 查看硬盘剩余空间 查看目录占用空间 优盘没法卸载 内存 进程 强制中止一个进程(在上面进程中止不成功的时候使用) 图形方式中止一个程序 查看当前进程的实时状况 查看进程打开的文件 ADSL 配置 ADSL ADSL手工拨号 激活 ADSL 断开 ADSL 查看拨号日志 如何设置动态域名 网络 查看当前IP地址 查看当前外网的IP地址 查看当前监听80端口的程序 查看当前网卡的物理地址 立即让网络支持nat 查看路由信息 手工增加删除一条路由 修改网卡MAC地址的方法 统计当前IP连接的个数 统计当前20000个IP包中大于100个IP包的IP地址 屏蔽IPV6 服务 删除一个服务 临时重启一个服务 临时关闭一个服务 临时启动一个服务 设置 修改用户资料 给apt设置代理 修改系统登录信息 中文 批量转换src目录下的所有文件内容由GBK到UTF8 转换文件内容由GBK到UTF8 转换 mp3 标签编码 控制台下显示中文 文件 查看文件类型 显示xxx文件倒数6行的内容 让tail不停地读地最新的内容 查看文件中间的第五行(含)到第10行(含)的内容 查找包含xxx字符串的文件 全盘搜索文件(桌面可视化) 查找关于xxx的命令 通过ssh传输文件 查看某个文件被哪些应用程序读写 把所有文件的后辍由rm改为rmvb 把所有文件名中的大写改为小写 删除特殊文件名的文件,如文件名:–help.txt 查看当前目录的子目录 将当前目录下最近30天访问过的文件移动到上级back目录 将当前目录下最近2小时到8小时之内的文件显示出来 删除修改时间在30天之前的所有文件 查找guest用户的以avi或者rm结尾的文件并删除掉 查找的不以java和xml结尾,并7天没有使用的文件删除掉 统计当前文件个数 统计当前目录个数 显示当前目录下2006-01-01的文件名 FTP filezilla无法列出中文目录? 本地中文界面 解压缩 解压缩 xxx.tar.bz2 压缩aaa bbb目录为xxx.tar.gz 压缩aaa bbb目录为xxx.tar.bz2 解压缩 RAR 文件 Nautilus 显示地址栏 特殊 URI 地址 查看已安装字体 程序 日期和时间 设置日期 设置时间 将时间写入CMOS 读取CMOS时间 从服务器上同步时间 控制台 不同控制台间切换 指定控制台切换 控制台下滚屏 控制台抓图 数据库 从mysql中导出和导入数据 忘了mysql的root口令怎么办 修改mysql的root口令 其它 如何删除Totem电影播放机的播放历史记录 如何更换gnome程序的快捷键 vim 如何显示彩色字符 如何在命令行删除在会话设置的启动程序 如何提高wine的反应速度 #chgrp #chmod #chown Ubuntu命令行下修改网络配置 2. 为网卡配置静态IP地址 用下面的命令使网络设置生效: 3. 设定第二个IP地址(虚拟IP地址) 4. 设置主机名称(hostname) 5. 配置DNS 安装AMP服务 修改 MySql 密码 apache2的操作命令 Ubuntu 7.10 更换软件源、更新系统 # Ubuntu.cn99.com 更新服务器(江苏省常州市电信,推荐电信用户使用。) 这样便更新以及升级了系统。 桌面汉化: 安装解码器、flashplayer、java虚拟机、微软字体 FireFox 中安装 FlashPlayer 插件 回答(y/n/q) n/q 安装媒体播放器 另外需要一个w32codecs文件,是用来支持那些私有媒体格式的解码器,源里已经没有w32codecs了,我们可以从这里下载那个后缀为.deb的安装 mplayer调试(视频、字幕) 安装下载工具(多线程下载、BT下载、电驴) 字体更换 apt下载的deb包清理 安装rar压缩、解压工具 启用root(最高权限)帐户 安装QQ 显卡驱动安装 beryl的安装 如何设定/改变/启用 root 使用者的密码 为了启用 root 帐号 (也就是 设置一个口令) 使用: 当你使用完毕后屏蔽 root 帐号 使用: 如何在终端机模式下切换到 root 身份 安装VNC server 安装MS字体 vim配置 2) vim中文在线帮助 3) 启用本地配置 VIM version 7.1 (说明文档) history文件中需要记录的行数 在处理未保存或只读文件的时候,弹出确认 与windows共享剪贴板 侦测文件类型 载入文件类型插件 为特定文件类型载入相关缩进文件 保存全局变量 带有如下符号的单词不要被换行分割 语法高亮 高亮字符,让其不受100列限制 状态行颜色 “ 不要生成swap文件,当buffer被丢弃的时候隐藏它 字符间插入的像素行数目 增强模式中的命令行自动完成操作 在状态行上显示光标所在位置的行号和列号 命令行(在状态行下)的高度,默认为1,这里是2 使回格键(backspace)正常处理indent, eol, start等 允许backspace和光标键跨越行边界 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位) 启动的时候不显示那个援助索马里儿童的提示 通过使用: commands命令,告诉我们文件的哪一行被改变过 不让vim发出讨厌的滴滴声 在被分割的窗口间显示空白,便于阅读 “ 匹配括号高亮的时间(单位是十分之一秒) 在搜索的时候忽略大小写 不要高亮被搜索的句子(phrases) 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索) 输入:set list命令是应该显示些啥? 光标移动到buffer的顶部和底部时保持3行距离 不要闪烁 我的状态行显示的内容(包括文件类型和解码) 总是显示状态行 “ 继承前一行的缩进方式,特别适用于多行注释 为C程序提供自动缩进 使用C样式的缩进 制表符为4 统一缩进为4 不要用空格代替制表符 不要换行 在行和段开始处使用制表符 “ 在右侧显示窗口 压缩方式 假如只有一个buffer,kill窗口也kill掉buffer 不要关闭其他文件的tags 不要显示折叠树 “ if has(autocmd) autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number autocmd FileType xml,html vmap
优雅x4sl5s1(以优雅x4sl5s1为代表的奢华智能手机,尊贵从外表开始)

最近更新