热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【译】在行内元素前注入一个换行|CSS-Tricks

【译】在行内元素前注入一个换行|CSS-Tricks
原文: http://www.zcfy.cc/article/517

我遇到了一个小问题,我有一个 span 在 header 中,而我想要在 span 的前面产生一个换行。郑重声明,在 span 前面插入一个
标签当然没问题(而事实上,你还可以显示/隐藏这个标签,这 非常有用 )。但是...不得不用 HTML 去做一个布局相关的事情始终感觉有点奇怪。

因此,让我们来深入探索一下,在这个探索中,我们会多次说到“然而...”。

Break right after this and before this

块级元素能做到

不同于 ,我们可以使用一个

,而之所以用 p 可以是因为它是一个块级元素。

但是我们有使用 span 的理由,因为设计上要求我们用 span。在换行之后的文本应该是一个行内/行内块元素,因为我们可能想给它一个背景或者 padding 或者其他什么。

你可以通过伪元素插入换行

这很容易:

h1 span::before {  content: "\A";}

然而... 是一个行内元素。换行不会产生任何效果!就像 真正的 回车换行一样不产生。

我们可以通过样式让空白符生效,来强制让换行有效...

h1.two span::before {  content: "\A";  white-space: pre;}

这样实际有效果了。然而... 由于 padding 和背景存在,它把左 padding 的部分留在了上一行:

我们可以使用 box-decoration-break: clone; 来修复这个“左边缘环绕”的问题,然而... 它会导致上一行产生更大的黑块:(此处不明白的同学可以看 这个例子 ——译者注)

box-decoration-break 对于处理一些问题来说好极了,但不包括这个问题。

如果我们将 span 变成 inline-block,那么换行将会发生在那个块里面,这也不是我们想要的效果:

将伪元素设置成块级元素,让 span 保持行内元素,这样也不行:

你可能会有点奇怪,为何不直接将实际的文本写在伪元素里

这是 Aaron Bushnell 想出的 办法 。这个技巧是让 span 成为块级元素,然后把文本通过伪元素插入进去,以伪元素作为行内元素添加样式。

h1 span {  display: block;}h1 span::before {  content: attr(data-text);  background: black;  padding: 1px 8px;}

这样可以!然而...

我一直是伪元素技巧的簇拥,但是这么用有点危险,因为你可能破坏了可访问性。我认为一些读屏软件会读伪元素,但不是所有的都会,也不是所有的都打算支持。更何况这种方式下你不能拷贝和粘贴所有的文本,尽管这些文本完整地出现在 HTML 文档里。

利用 table 布局

我最喜欢的 方式 是由 Thierry Koblentz 提出的。只需要给 span 设置 display:table; 就行了。当然这不是真正的表格数据,但没关系。通过 CSS 将元素强制用 table 布局以利用 table 布局独特的布局属性,它唯一的问题仅仅是——不语义化。

h1 span {  display: table;}

在线例子

包括使用
的那个例子,那样做也是好的。

例子: 在一个 header 元素中的行内元素前尝试插入一个换行 。

英文原文: https://css-tricks.com/injecting-line-break/

推荐阅读
  • selenium 定位方式3css_selector
    关于页面元素定位,可以根据id、class、name属性以及link_text。其中id属性是最理想的定位方式,class与name属性, ... [详细]
  • 吴恩达“机器学习”——学习笔记二
    定义一些名词欠拟合(underfitting):数据中的某些成分未被捕获到,比如拟合结果是二次函数,结果才只拟合出了一次函数。过拟合(overfitting):使用过量的特征集合, ... [详细]
  • ARToolKitunity
    ARToolKit为开源的AR库,相对于高通和easyAr有几点特点:1)开源2)识别项目可以动态添加(详细在后)3)识别文件可以本地生成4)目前只能识别图片(目前为.jpg格式) ... [详细]
  • ASP.NET Core WebAPI 开发新建WebAPI项目  转
    转 http:www.cnblogs.comlinezerop5497472.htmlASP.NETCoreWebAPI开发-新建WebAPI项目ASP.NETCoreWebAPI ... [详细]
  • 第38天:Python decimal 模块
    by程序员野客在我们开发工作中浮点类型的使用还是比较普遍的,对于一些涉及资金金额的计算更是不能有丝毫误差,Python的decimal模块为浮点型精确计算提供了支持。1简介deci ... [详细]
  • 利用ipv6技术,废旧笔记本变成server
    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到。那恭喜你,再配合我这个dd ... [详细]
  • 根据时间更改网站背景的脚本。热!
    我在网上找到了它,并以自己的方式对其进行了自定义;作者的功劳就在那里。实际上,这是一个用于更改背景颜色的脚本,并且在我看来& ... [详细]
  • 摘自:https:www.cnblogs.comnick-huangp4076273.htmlselect*from(select'Nick'asitemfromd ... [详细]
  • 如果您想到达任何地方,就一定不要害怕探索。我的背景我在2001年只有4岁。那是我第一次使用计算机“联机”的时候。从一开始我就一直是一个好奇的孩子。我知道如何建立拨号连 ... [详细]
  • 来自Google的前端工程师-PhilipWalton分享了本身关于怎样成为优异的工程师的一些看法。个人感觉很有代价,所以翻译成中文,轻易人人浏览。程度有限,如翻译不妥的地方请在批 ... [详细]
  • 【实践】基于RTThread的智慧路灯案例实验分享
    之前分享了基于LiteOS的智慧农业案例实验分享基于LiteOS的智慧农业案例实验分享,阅读量挺不错,看样子大家都挺喜欢这种实验。那咱们就再来一个类似的实验:基于RT-Thread ... [详细]
  • 微信小程序官方组件展示之表单组件input源码
    以下将展示微信小程序之表单组件input源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:输入框。该组件是原生组件, ... [详细]
  • 题目:Givenanintegerarray,youneedtofindone continuoussubarray thatifyouonlysortthissubarrayin ... [详细]
  • 1同样使用wepy-cli快速生成的小程序,目前可以使用组件:2直接通过git下载VantWeapp源代码,并将dist目录拷贝到自己的项 ... [详细]
  • Jmeter的聚合报告
       ... [详细]
author-avatar
maylo1978
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有