背景知识

CSS 渐变, background-size ,“条纹背景”,“灵活的背景定位

难题

几年前,在刚刚获得 :nth-child() / :nth-of-type() 伪类之后,我们最常用其来解决的一个需求就是表格的“斑马条纹”(见下图)。这在以前需要服务器端预先处理、客户端的脚本处理或者是纯手工写死来实现,而
现在只需下面这几行简单的代码就足够了:

tr:nth-child(even) {
background: rgba(0,0,0,.2);
}

尽管如此,当我们想把表格行的这种效果应用到文本行时,仍然有些力不从心 。这种效果对于提高代码段的可读性来说尤为实用。很多开发者最终不得不使用 JavaScript 来把每行代码包裹进一个个 <div> 元素中,然后

运用上述 :nth-child() 技巧来实现斑马条纹——幸好大多数语法着色脚本都可以顺带消化掉这个令人头皮发麻的过程。这种方式并不理想,它不仅在理论上有违纯粹原则(JavaScript 不应该掺和到样式层面来),而且过多的
DOM 元素还会拖累整个页面的性能;此外,它其实不太健壮。(当你增大字号导致其中的某一“行”发生折行时会怎么样?)我们还有更好的办法吗?

解决方案

  抛开以前那种给每一行套元素再加背景的做法,我们换一种思路来重新考虑这个问题。为什么不对整个元素设置统一的背景图像,一次性加上所有的斑马条纹呢?乍听起来这好像是个糟糕的点子,但别忘了,我们可以在CSS 中用渐变直接生成背景图像,而且可以用 em 单位来设定背景尺寸,这样背景就可以自动适应 font-size 的变化了。

  让我们用这个方法给下图中的这段代码加上斑马条纹。首先,我们需要运用“条纹背景”一节中所描述的方,创建出水平条纹背景。它的background-size 需要设置为 line-height 的两倍,因为每个背景贴片需要覆盖两行代码。我们最初尝试写出的代码可能是这样的:

<pre><code>while (true) {
var d = new Date();
if (d.getDate()==1 &&
d.getMonth()==3) {
alert("TROLOLOL");
}
}</code></pre>

  

pre {
padding: 0 .5em;
line-height: 1.2;
background: hsl(20, 50%, 95%);
background-image: linear-gradient(
rgba(120,0,0,.1) 50%, transparent 0);
background-size: auto 2.4em;
background-origin: content-box;
font-family: Consolas, Monaco, monospace;
} code { font: inherit }

最终效果:

其中background-origin 这个属性正是我们所需要的:它可以告诉浏览器在解析 background-position时以 content box 的外沿作为基准,而不是默认的 padding box 外沿。因为我们是用半透明色来生成条纹的,所以在改变背景色时,斑马条纹仍然可以正常显示。这个方法总体来说是十分灵活的,唯一可能破坏效果的情况 可能就是在改变 line-height 时忘了相应地调整 background-size 。

css3 文本行的斑马线的更多相关文章

  1. 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17

    The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号 ...

  2. 对文本行进行排序,新增-d(目录排序),只对字母数字空格排序(TCPL 练习5-16)

    文本行的排序用到了命令行参数以及多级指针,在要求只对字母数字空格进行排序时,关键的问题点是兼容-f命令参数,也就是排序的同时忽略大小写.由于在之前的练习中,我将忽略大小写的比较方法重新写了一个函数tr ...

  3. UltraEdit文本行数多变一和一边多

    一.UltraEdit文本行数多行转换成一行 1.文本样式内容 1.qwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiop ...

  4. Linux文本行倒序排列6种方法

    Linux文本行倒序排列6种方法 1. 命令方法: nl filename | sort -nr | cut -f2 这个方法很unix风格,使用多命令组合完成某种功能是典型的unix特点 单命令: ...

  5. 读取txt文件将文本行组合成特定格式

    有一网友要求从txt文本文件读取一些数据,然后组合为特定格式的数据行.原论题如下,刚才开始的要求描述得不太清楚,后来补充完整了. Insus.NET觉得本论题可有练习文本件读取功力,因此尝试实现一下. ...

  6. [Python学习笔记-008] 使用双向链表去掉重复的文本行

    用Python处理文本文件是极方便的,当文本文件中有较多的重复的行的时候,将那些重复的行数去掉并打印诸如"...<repeats X times>..."有助于更好的浏 ...

  7. CSS3属性—— line-clamp控制文本行数

    说明: 限制在一个块元素显示的文本的行数. -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 为 ...

  8. css 的包含块 、负外边距,字体,文本行高

    一.包含块 目的:确定元素的位置和相对大小(%) 1.正常文档流元素和浮动元素 ---- 父元素的 content-box 2.绝对定位元素 ---- 父元素的 padding-box 3.固定定位元 ...

  9. linux下统计文本行数的各种方法(二)

    上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以.现在试试脚本的方式,统计多个文件的行数 一.统计目录下所有文件的文件数及所有行数 脚本暂时命名为count.sh,代码如下: #!/bin/b ...

随机推荐

  1. zabbix内存百分比监控告警

    本文结合配置内存不足10%触发报警的需求,zabbix给我们提供的模板,里面都已经配置好了item和trigger.但是给我们的模板是当内存小于20M的时候才会触发报警,这样不能满足我们的需求,我们需 ...

  2. WPF 如何流畅地滚动ScrollViewer 简单实现下

    看了看原生UWP的ScrollViewer,滑动很流畅(例如 开始菜单),但是WPF自带的ScrollViewer滚动十分生硬.. 突发奇想,今天来实现一个流畅滚动的ScrollViewer. 一.目 ...

  3. HttpClient 常用方法封装

    简介 在平时写代码中,经常需要对接口进行访问,对于 http 协议 rest 风格的接口请求,大多使用 HttpClient 工具进行编写,想着方便就寻思着把一些常用的方法进行封装,便于平时快速的使用 ...

  4. 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 程序员‍‍的上下文是什么? 很多时候一大部分编程开发的人员都只是关注于功能的实现,只 ...

  5. Flume-0.9.4和Hbase-0.96整合

    这几天由于项目的需要,需要将Flume收集到的日志插入到Hbase中,有人说,这不很简单么?Flume里面自带了Hbase sink,可以直接调用啊,还用说么?是的,我在本博客的<Flume-1 ...

  6. 面向对象存储框架:Obase快速入门

    在项目中完成对象建模后,可以使用Obase来进行对象的管理(例如对象持久化),本篇教程将创建一个.NET Core控制台应用,来展示Obase的配置和对象的增删改查操作.本篇教程旨在指引简单入门. 本 ...

  7. python django mkdir和makedirs的用法

    总结一下mkdir和makedirs的用法:      1.mkdir( path [,mode] )      作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777.      ...

  8. lin-cms-dotnetcore功能模块的设计

    lin-cms-dotnetcore功能模块的设计 先来回答以下问题. 1.什么是cms? Content Management System,内容管理系统. 2.dotnetcore是什么? .NE ...

  9. yum 安装JDK

    系统:CentOS 7 查看当前系统是否已安装JDK yum list installed |grep java 如果没有就选择yum库中的包进行安装,查看yum库中JDK列表 yum -y list ...

  10. JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现

    我们按照表示的设计 以及: package com.weiyuan.goods.category.domain; import java.util.List; public class Categor ...