从display:run-in;中学习新技能
有时我们想在一行内显示一个标题,以及一段内容,虽然看起来比较简单,但是为了语义化用dl比较合适,但是它默认是block元素,改成inline?那么有多段呢?不就都跑上来了?用float?那问题也挺多。
就是这种效果

当然如果不需要语义化那是很简单的事,但我现在就想用dl>dt+dd。那么display:run-in就派上用场了。
display:run-in 会根据后面的元素进行转换display为inline | inlin-block | block
如果它后一个元素是block那么它会变成inline并且神奇的是它会和后一个元素并排。

如果它后一个元素是inline那么它会变成block。

如果它后一个元素是inline-block,它还是正常的显示。

最有价值的估计就是第一种情况了,但可惜的是Chrome从32版本开始将这个属性移除了,话说要是Chrome没有移除这个属性兼容性还是比较不错的。
话说为什么要移除这个属性?我们来看看stackoverflow里面的一段话。
I'm not aware of any change to Chrome's support of display:run-in but the setting has always seemed unloved
意思好像是说,display:run-in不怎么受欢迎。
Hixie has been consistently opposed to and I kind of understand why. HTML is a semantic language and the semantics are fully defined by dl/dt/dd. The only practical problems are presentational, and that makes it a CSS problem, not an HTML one.
Hixie 说HTML是一种语义语言,而display:run-in破坏了,准确的说我们上面的问题不是HTML的问题而是CSS的问题。它是意思应该是display:run-in没有必要,完全可以通过其他方式实现。
这里有一个解决方法可以解决我们的第一个问题。
display: run-in dropped in Chrome?
但是里面没有说特别清楚,我来解释一下吧。

代码如下:
<style>
dt,dd{
display:inline;
}
dt {
font-weight: bold;
}
dt:after {
content: ": ";
}
dd {
margin:0;
}
dd:after {
content:'\0A';
white-space:pre-wrap;
}
</style>
<dl>
<dt>这是什么?</dt>
<dd>这是一本神奇的书。</dd>
<dt>这是什么?</dt>
<dd>这是一部神奇的电影。</dd>
</dl>
首先我们把所有的元素变成inline在一行显示,但问题就是所有的都一行显示了,所有这里用了一点小技巧,就是这段代码。
dd:after {
content:'\0A';
white-space:pre-wrap;
}
很神奇对吧,其实按理说只有写上content:'\0A'这句话就好了的,\0A表示换行,但为什么还要加上white-space:pre-wrap;?因为浏览器默认对文本的换行是忽略的,比如HTML里面的空白字符之类的。除了使用pre-wrap还可以使用其他的,只要不是nowrap就好了。更多关于white-space可以看CSS white-space 属性
但还是有个小问题,如果有多个dd的话,就换行了。

会出现这个问题,完全是我们考虑的不周全,换行应该加给“dt”。

<style>
dt,dd{
display:inline;
}
dt {
font-weight: bold;
}
dt::after {
content: ": ";
}
dt::before{
content:"\0A";
white-space:pre;
}
dd {
margin:0;
}
</style>
<dl>
<dt>这是什么?</dt>
<dd>这是一本神奇的书。</dd>
<dd>这是一本神奇的书。</dd>
<dt>这是什么?</dt>
<dd>这是一部神奇的电影。</dd>
</dl>
但你有没有发现有个问题啊?就是第一个dt是不用换行的。
加上这个就OK了
dt:first-of-type::before{
content:'';
}

这里说一下里面的“\0A”是ASCII码,如果想了解更多ASCII码,可以看ASCII码表
今天学到的还是很多的,倒不是这个"display:run-in"而是在content中使用ASCII。
从display:run-in;中学习新技能的更多相关文章
- [站点推荐]001.学习新技能的37个最佳网站(The 37 Best Websites To Learn Something New)
忘了过于褒奖的学校.整天呆在拥挤的教室而效果却差得可怜.这些网站和应用涵盖了科学.艺术和技术的无数话题.它们可以教会你实践练习任何技能,从制作豆 沙到用 node.js 开发 app,而且它们都是免费 ...
- 5332盛照宗 如何获取新技能+c语言学习调查
如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...
- 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破
我在阿里这仨月 Alibaba 试用期是三个月,转眼三个月过去了,也到了转正述职的时间.回想这三个月做过的事情,很多很杂,但还是有重点. 本文谈一谈工作中遇到的各种场景,需要用到的一些前端知识,以及我 ...
- 20155332 如何获取新技能+c语言学习调查
如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...
- (数据科学学习手札73)盘点pandas 1.0.0中的新特性
本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 毫无疑问pandas已经成为基于Pytho ...
- 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { pThreadCon = new CSerialThread ...
- 【转载】 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?
原文地址: http://www.sohu.com/a/249973402_610300 原作:George Seif 夏乙 安妮 编译整理 ============================= ...
- [PyTorch入门]之从示例中学习PyTorch
Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...
- 从别人的代码中学习golang系列--01
自己最近在思考一个问题,如何让自己的代码质量逐渐提高,于是想到整理这个系列,通过阅读别人的代码,从别人的代码中学习,来逐渐提高自己的代码质量.本篇是这个系列的第一篇,我也不知道自己会写多少篇,但是希望 ...
随机推荐
- Jade模板引擎让你飞
写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...
- JS核心系列:浅谈原型对象和原型链
在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...
- 【小计】新人Tostring前忘记Null判断的处理
ToString和string.Concat(可屏蔽Null的异常)性能相差不大,一些中小项目完全可以用Concat(新人容易忘记判断Null的情况,遇到太多了,所以建议重写tostring方法,内部 ...
- npm package.json属性详解
概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...
- DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(3)
上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(2)> 这篇文章主要是对 DDD.Sample 框架增加 Transa ...
- EntityFramework.Extended 支持 MySql
EntityFramework.Extended 默认不支持 MySql,需要配置如下代码: [DbConfigurationType(typeof(DbContextConfiguration))] ...
- FineBI:一个简单易用的自助BI工具
过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...
- Android的Kotlin秘方(II):RecyclerView 和 DiffUtil
作者:Antonio Leiva 时间:Sep 12, 2016 原文链接:http://antonioleiva.com/recyclerview-diffutil-kotlin/ 如你所知,在[支 ...
- jQuery标准的AJAX模板
$('#saveInformationTemplate_button').on('click', function(){ if(isEmpty($("#name").val())) ...
- [Django]用户权限学习系列之Permission权限基本操作指令
若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODU ...