Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

38.给文本画上斑马线 #39

Open
ccforward opened this issue Aug 26, 2016 · 0 comments
Open

38.给文本画上斑马线 #39

ccforward opened this issue Aug 26, 2016 · 0 comments
Assignees

Comments

@ccforward
Copy link
Owner

给文本画上斑马线

就像这样,隔行换背景色(这种情况在页面中显示源码情况下比较常见)

zebra-line

1、先画斑马线

斑马线、条纹图案用css的背景线性渐变就能实现

div {
    /* 水平条纹 */
    background: linear-gradient(#f06 50%, #fff 0);
    background-size: 100% 30px;
}

div {
    /* 垂直条纹 */
    background: linear-gradient(to right, #f06 50%, #fff 0);
    background-size: 30px 100%;
}

上面代码 linear-gradient(#f06 50%, #fff 0) 中,第二个色标的位置值为 0 ,那它的位置就会被浏览器调整为前一个色标的位置值。

三种颜色的条纹,也很简单:

div {
    /*  三种颜色  */
    background: linear-gradient(#f06 33.3%, #9c0 0, #9c0 66.6%, #58a 0);
}

直接看demo:

2、添加文本

其实,把每行文本放入一个 div 中,用 :nth-child() 来实现斑马条纹也可以,但是 DOM 过多明显会拖累页面性能。

所以按照第一步,画出条纹背景,并用 em 单位来设定背景尺寸,这样背景就可以自适应font-size的变化了;并且它的 background-sizeline-height 的两倍(因为每条背景要覆盖两行文本)

pre {
    width: 100%;
    padding: .5em 0;
    line-height: 1.5;
    background: #f5f5f5;
    background-image: linear-gradient(rgba(0,0,120,.1) 50%, transparent 0);
    background-size: auto 3em;
    color: #333;
    font-size: 16px;
}

zebra-line-code

斑马条纹demo1

3、解决问题

如上图,有两个问题:

  1. 代码和条纹是错位的
  2. 代码缩进的 tab 宽度明显太宽了

1.错位问题

设置 background-origin: content-box; 让浏览器在解析 background-origin 时候以 content box 的外沿为基准,而不是默认的 padding box。

2.tab 缩进问题

这个简单,因为源码中用的 tab 不是空格,所以浏览器会把缩进的tab默认显示为 8 个字符

只需要加入css3的新特性

pre {
    tab-size: 2;  // tab为2个字符
}

最终的效果

@ccforward ccforward added the CSS label Aug 26, 2016
@ccforward ccforward self-assigned this Aug 26, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant