xml地图|网站地图|网站标签 [设为首页] [加入收藏]
从条纹边框的实现谈盒子模型,网页字体设置你
分类:web前端

有趣的CSS题目(2): 从条纹边框的实现谈盒子模型

2016/09/29 · CSS · CSS

本文作者: 伯乐在线 - chokcoco 。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节。

解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。

不断更新,不断更新,不断更新,重要的事情说三遍。

谈谈一些有趣的CSS题目(1): 左边竖条的实现方法

所有题目汇总在我的 Github 。

有趣的CSS题目(16): 奇妙的 background-clip: text

2017/05/04 · CSS · background-clip

本文作者: 伯乐在线 - chokcoco 。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

说起 background-clip ,可能很多人都很陌生。Clip 的意思为修剪,那么从字面意思上理解,background-clip 的意思即是背景裁剪。

我曾经在 从条纹边框的实现谈盒子模型 一文中谈到了这个属性,感兴趣的可以回头看看。

简单而言,background-clip 的作用就是设置元素的背景(背景图片或颜色)的填充规则。

与 box-sizing 的取值非常类似,通常而言,它有 3 个取值:

{ background-clip: border-box; // 背景延伸到边框外沿(但是在边框之下) background-clip: padding-box; // 边框下面没有背景,即背景延伸到内边距外沿。 background-clip: content-box; // 背景裁剪到内容区 (content-box) 外沿。 }

1
2
3
4
5
{
    background-clip: border-box;  // 背景延伸到边框外沿(但是在边框之下)
    background-clip: padding-box; // 边框下面没有背景,即背景延伸到内边距外沿。
    background-clip: content-box; // 背景裁剪到内容区 (content-box) 外沿。
}

不过这些都不是本文的主角。本文的主角是 background-clip: text; ,当然现在只有 chrome 支持,所以通常想使用它,需要 -webkit-background-clip:text;

网页字体设置你了解吗?

2016/02/12 · CSS · 字体

原文出处: 携程设计委员会   

以前做项目的时候就依葫芦画瓢的设置 { font-family:arial,”microsoft yahei”,simsun,sans-self; } 等类似的字体,然而当更多的设备和系统出现后,以前这样的设置已不能满足网页在各设备上的显示需求。

就拿最简单的宋体(simsun)来说吧,在Windows系统下显示是一个比较容易阅读的字体,然而在Mac上简直无法直视,如下图给出一个优化前后页面的对比效果:

图片 1

因此,出于种种原因,促使我不得不去对字体做一个相应的了解。

对于网站字体设置,本文给出以下意见:

移动端项目:

font-family:Tahoma,Arial,Roboto,”Droid Sans”,”Helvetica Neue”,”Droid Sans Fallback”,”Heiti SC”,sans-self;

 

pc端(含Mac)项目:

font-family:Tahoma,Arial,”Helvetica Neue“,”Hiragino Sans GB”,Simsun,sans-self;

 

移动和pc端项目:

font-family:Tahoma,Arial,Roboto,”Droid Sans”,”Helvetica Neue”,”Droid Sans Fallback”,”Heiti SC”,”Hiragino Sans GB”,Simsun,sans-self;

 

 

首先说说字体的种类,字体分为五大种类,然而各设备的支持情况也个不相同,如,

各移动设备系统支持情况:

五大类字体 安卓4.0 IOS6.0 WP8
sans-serif(无衬线) 支持 支持 支持
serif(衬线) 支持 支持 支持
monospace(等宽) 支持 支持 支持
fantasy(梦幻) 不支持 支持 不支持
cuisive(草体) 不支持 不支持 不支持

 

当然目前这只是移动设备各系统的支持情况,然而pc端个浏览器的支持情况也各不相同,如:

五大类字体 IE系列 Chrome Firefox
sans-serif(无衬线) 支持 不支持 不支持
serif(衬线) 支持 支持 支持
monospace(等宽) 支持 支持 支持
fantasy(梦幻) 支持 支持 支持
cuisive(草体) 不支持 不支持 不支持

 

下面介绍下个系统的默认字体和常用字体:

系统 默认西文字体 默认中文字体 其他常用西文字体 其他常用中文字体
Windows 宋体 宋体 Tahoma、Arial、Verdana、Georgia 微软雅黑、黑体
Android 4.0以下 Droid Sans Droid Sans Fallback Arial 无宋体、无微软雅黑
Android 4.0及以上 Roboto Roboto Arial 无宋体、无微软雅黑
iOS Helvetica Neue Heiti SC (黑体) Tahoma(v7.0)、Arial、Verdana、Georgia STHeiti(v7.0)、无宋体、无微软雅黑
Mac OS X 10.6以下 Helvetica Neue STHeiti (华文黑体) Tahoma、Arial、Verdana、Georgia 宋体、无微软雅黑
Mac OS X 10.6及以上 Helvetica Neue Hiragino Sans GB  (冬青黑体简体中文) Tahoma、Arial、Verdana、Georgia 宋体、无微软雅黑

参考资料:iOS6字体列表、iOS7字体列表、Mac OS X  10.6字体列表、Mac OS X 10.7字体列表 等,在看了一些资料之后,对系统和浏览器下的字体就有了一个基本的认识。

有很多同学看到上面这些表格里面的结论,可能就会想到:可以只设置西文字体不设置中文字体。

只设置西文字体不设置中文字体是否可以?答案当然是不可以。因为上面这些系统和浏览器的默认字体也仅仅是是一个理想状态下的设置,这些默认字体仅限于浏览器或系统最初的默认字体。现在的手机都支持字体更换,对于浏览器而已也是如此,现在的浏览器都支持用户自己设置字体。因此,只设置西文字体而忽略中文字体设置是存在一定的危险性的。

 

对于现在Adroid系统的各种字体app,如:字体管家、字体管理等。如果用户自己下载相关的app字体软件将字体改掉,这种情况下,我们该如何处置?

如果用户将默认的系统字替换掉,那我们就只能用其他的中文字体来代替现实,然而就目前而言,移动端的中文字体非常少(几乎是唯一性),因此,本人还没有找到相应的解决办法,后期找到方法再分享出来。

2 赞 13 收藏 评论

图片 2

2、类似下面这个图形,只使用一个标签,可以有多少种实现方式:

图片 3

假设我们的单标签为 div:

XHTML

<div></div>

1
<div></div>

定义如下通用 CSS:

CSS

div{ position:relative; width: 180px; height: 180px; }

1
2
3
4
5
div{
    position:relative;
    width: 180px;
    height: 180px;
}

这一题主要考查的是盒子模型 Box Model 与 背景 background 的关系,以及使用 background-clip 改变背景的填充方式。

background 在 Box Model 中,他是布满整个元素的盒子区域的,并不是从 padding 内部开始(也就是说从 border 就开始啦),只不过实线边框(solid)部分遮住了部分 background ,所以我们使用虚线边框(dashed)就可以看到背景色是从 border 内部开始的。

我们给 div 添加如下样式:

CSS

div{ background:#9c27b0; border:20px dashed #2196f3; }

1
2
3
4
div{
    background:#9c27b0;
    border:20px dashed #2196f3;
}

结果如下:
图片 4

但有一点需要注意,background-color 是从元素的边框左上角起到右下角止,而 background-image 却不一样,他是从 padding 边缘的左上角起而到 border 的右下角边缘止。

background image 的绘制中有两个因素决定了绘图区域:

  • background positioning area。background-origin 属性决定了这个相对定位位置,默认为 padding-box。所以默认的背景图片绘制是从 padding box 的左上顶点开始的。
  • background painting area。background-clip 属性决定了绘制区间,默认为 border-box。所以在background-repeat: repeat 的情况下:

The image is repeated in this direction as often as needed to cover the background painting area.

嗯,什么意思呢,你可以戳进这个 demo 看看,正常情况下的背景图填充如下:

图片 5

当然,这个填充规则是可以通过 background-clip 改变的。

background-clip 设置元素的背景(背景图片或颜色)是否延伸到边框下面。

语法:

CSS

{ background-clip: border-box; // 背景延伸到边框外沿(但是在边框之下) background-clip: padding-box; // 边框下面没有背景,即背景延伸到内边距外沿。 background-clip: content-box; // 背景裁剪到内容区 (content-box) 外沿。 }

1
2
3
4
5
{
    background-clip: border-box;  // 背景延伸到边框外沿(但是在边框之下)
    background-clip: padding-box; // 边框下面没有背景,即背景延伸到内边距外沿。
    background-clip: content-box; // 背景裁剪到内容区 (content-box) 外沿。
}

XHTML

<!-- 填充与background-clip属性有关 --> <!-- 背景色的填充规则,默认为 border-box 从盒子最左上角到最右下角 --> <div class="bgColor"></div> <div class="bgColor contentBox"></div> <div class="bgColor paddingBox"></div> <!-- 背景图的填充规则,默认为 border-box 从盒子的左上角padding到最右下角 --> <div class="bgImg"></div> <div class="bgImg contentBox"></div> <div class="bgImg paddingBox"></div>

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 填充与background-clip属性有关 -->
<!-- 背景色的填充规则,默认为 border-box
            从盒子最左上角到最右下角 -->
<div class="bgColor"></div>
<div class="bgColor contentBox"></div>
<div class="bgColor paddingBox"></div>
 
<!-- 背景图的填充规则,默认为 border-box
            从盒子的左上角padding到最右下角 -->
<div class="bgImg"></div>
<div class="bgImg contentBox"></div>
<div class="bgImg paddingBox"></div>

CSS

div{ width:150px; height:150px; margin:50px 10px;; border:20px dashed rgba(0, 0, 0, 0.5); float:left; padding:10px; // background-size:cover; } .bgColor{ background-color:#ff7300; // background-clip:border-box; } .bgImg{ background-color:#ff7300; background-image:url(''); background-repeat:no-repeat; // background-clip:border-box; } .contentBox{ background-clip:content-box; } .paddingBox{ background-clip:padding-box; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
div{
    width:150px;
    height:150px;
    margin:50px 10px;;
    border:20px dashed rgba(0, 0, 0, 0.5);
    float:left;
    padding:10px;
    // background-size:cover;
}
.bgColor{
    background-color:#ff7300;
    // background-clip:border-box;
}
.bgImg{    
    background-color:#ff7300;
    background-image:url('http://www.qq1234.org/uploads/allimg/150602/8_150602171754_2.jpg');
    background-repeat:no-repeat;
    // background-clip:border-box;
}
.contentBox{
    background-clip:content-box;
}
.paddingBox{
    background-clip:padding-box;
}

See the Pen CssBackground by Chokcoco (@Chokcoco) on CodePen.

继续说回本题,接下来,只需要将中间部分填充为白色即可,这个用伪元素可以轻松完成,所以,其中一个方法如下:

CSS

div{ background:#9c27b0; border:20px dashed #2196f3; } div::after{ content:""; position:absolute; top:0; left:0; bottom:0; right:0; background:#fff; }

1
2
3
4
5
6
7
8
9
10
11
12
13
div{
    background:#9c27b0;
    border:20px dashed #2196f3;
}
div::after{
    content:"";
    position:absolute;
    top:0;
    left:0;
    bottom:0;
    right:0;
    background:#fff;
}

何为 -webkit-background-clip:text

使用了这个属性的意思是,以区块内的文字作为裁剪区域向外裁剪,文字的背景即为区块的背景,文字之外的区域都将被裁剪掉。

看个最简单的 Demo ,没有使用 -webkit-background-clip:text :

XHTML

<div>Clip</div> <style> div { font-size: 180px; font-weight: bold; color: deeppink; background: url($img) no-repeat center center; background-size: cover; } </style>

1
2
3
4
5
6
7
8
9
10
11
<div>Clip</div>
<style>
div {
  font-size: 180px;
  font-weight: bold;
  color: deeppink;
  background: url($img) no-repeat center center;
  background-size: cover;
}
</style>

效果如下:

See the Pen background-clip:text by Chokcoco (@Chokcoco) on CodePen.

使用 -webkit-background-clip:text

我们稍微改造下上面的代码,添加 -webkit-background-clip:text

div { font-size: 180px; font-weight: bold; color: deeppink; background: url($img) no-repeat center center; background-size: cover; -webkit-background-clip: text; }

1
2
3
4
5
6
7
8
div {
  font-size: 180px;
  font-weight: bold;
  color: deeppink;
  background: url($img) no-repeat center center;
  background-size: cover;
  -webkit-background-clip: text;
}

效果如下:

CodePen Demo

See the Pen background-clip:text by Chokcoco (@Chokcoco) on CodePen.

看到这里,可能有人就纳闷了,图片 6啥玩意呢,这不就是文字设置 color 属性嘛。

将文字设为透明 color: transparent

别急!当然还有更有意思的,上面由于文字设置了颜色,挡住了 div 块的背景,如果将文字设置为透明呢?文字是可以设置为透明的 color: transparent 。

div { color: transparent; -webkit-background-clip: text; }

1
2
3
4
div {
  color: transparent;
  -webkit-background-clip: text;
}

图片 7

效果如下(请在 Chrome 内核浏览器下观看):

CodePen Demo

See the Pen clip:text && color: transparent by Chokcoco (@Chokcoco) on CodePen.

通过将文字设置为透明,原本 div 的背景就显现出来了,而文字以为的区域全部被裁剪了,这就是 -webkit-background-clip:text 的作用。

本文由澳门新葡亰手机版发布于web前端,转载请注明出处:从条纹边框的实现谈盒子模型,网页字体设置你

上一篇:从倒影说起,构架CSS基础样式库 下一篇:没有了
猜你喜欢
热门排行
精彩图文