从条纹边框的实现谈盒子模型

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

假设我们的单标签为 div:


1

<div></div>

定义如下通用 CSS:


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 添加如下样式:


1

2

3

4

div{

    background:#9c27b0;

    border:20px dashed #2196f3;

}

结果如下:

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

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

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

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

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

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

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

语法:


1

2

3

4

5

{

    background-clip: border-box;  // 背景延伸到边框外沿(但是在边框之下)

    background-clip: padding-box; // 边框下面没有背景,即背景延伸到内边距外沿。

    background-clip: content-box; // 背景裁剪到内容区 (content-box) 外沿。

}

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


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;

}

法二:

上面的方法,我们使用了 div 的背景色默认情况下从 border 开始填充,及伪元素设置白色背景色填充div 的中间的 padding-box 区域完成图形。

也可以反过来,使用伪元素背景色从 border-box 开始填充,使用 div 的背景色填充中间 padding-box区域。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

div{

    background:#fff;

    background-clip:padding-box;

    border:20px dashed #cccc99;

}

div::before{

    content:"";

    position:absolute;

    top:-20px;

    left:-20px;

    bottom:-20px;

    right:-20px;

    background:#996699;

    z-index:-1;

}

具体的 Demo 戳这里 。

上面 法二 除了用到了 background-clip 改变背景的填充区域,还用到了 z-index 触发元素生成了堆叠上下文(stacking context),改变了元素的层叠顺序(stacking levle),让伪元素背景色叠到了 div 背景色 之下,这两个概念下题会提及。

法....

本题主要是想讨论一下 CSS 的盒子模型 Box Model 与 背景 background 的关系,其实本题就是在于一个 dashed 边框,内部使用颜色填充即可,与上面第一题异曲同工,使用阴影、渐变都可以完成,感兴趣可以自己尝试一下其他解法。

下面是我列出来的部分解法:

转自  http://www.cnblogs.com/coco1s/p/5895764.html

时间: 2024-11-08 14:10:57

从条纹边框的实现谈盒子模型的相关文章

从条纹边框实现谈盒子模型

效果图 源代码如下 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <title>条纹边框实现谈盒子模型</title> 6 <style> 7 html { 8 font-family: font-family: Tahoma, Arial, Helvetica, "Mi

总结css表格,边框,轮廓,盒子模型,边距

css表格:border-collapse     是否把表格边框合并为单一边框 separate/collapse.border-spacing     设置分隔单元格边框的距离 num.caption-side     表格标题的位置 Top/bottom.empty-cells     设置是否显示表格中的空单元格 hide/show.table-layout     设置显示单元.行和列的算法.automatic: 列宽度由单元格内容设定默认.fixed: 列宽由表格宽度和列宽度设定.i

边框的css属性 盒子模型

Border 边框 css属性 边框颜色 border-color:red/#ffffff/rgb() 默认为黑色 边框样式 border-style:solid(实线)dashed(虚线) 默认为none 边框粗细 border-width:1px:默认是3px Border的简写 border:border-width border -style border-color; Div 块 盒子 1.就是标签名 没有特殊的标签属性 2.主要用来排版布局 3.宽度是100%,chrome浏览器默认

html学习第三天—— 第11章 盒子模型 div

盒模型--边框(一) 盒子模型的边框就是围绕着内容及补白的线,这条线你可以设置它的粗细.样式和颜色(边框三个属性). 如下面代码为div来设置边框粗细为2px.样式为实心的.颜色为红色的边框: div{ border:2px solid red; } 上面是border代码的缩写形式,可以分开写: div{ border-width:2px; border-style:solid; border-color:red; } 注意: 1.border-style(边框样式)常见样式有: dashed

CSS速成教程—CSS盒子模型——6

1.CSS 盒子模型概述 我们先来看看盒子的组成包括: margin(外边距);border(边框);padding(内边距);content(内容) 正文框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素. 内边距.边框和外边距都是可选的,默认值是零.从上面的图中可以看出,宽度(width) 和 高度(height) 指的是内容区域的宽度和高度.增加内边距.边框和外边距不会影响内容区域的

CSS——(2)盒子模型与标准流

上篇博客<CSS--(1)基础>中简单介绍了CSS的概念和几种使用方法,现在主要是介绍其的核心内容. 盒子模型 为了理解盒子模型,我们可以先从生活中的盒子入手.盒子是用来放置物品的,内部除了有物品外,还有填充部分的东西.盒子与盒子之间还会有间隙.如下图所示: 对于网页中的大部分对象,实际呈现形式都是一个盒子形状对象,理解了盒子模型才能更好的排版. CSS盒子模式具备的属性: 内容(content).填充(padding).边框(border).边界(margin).从上面的例子来看:内容即对应

浅谈CSS盒子模型

[摘要]盒子模型是CSS中的一个重要概念,虽然CSS中没有盒子这个单独的属性对象,但它却是CSS中无处不在的一个重要组成部分.掌握盒子模型的原理和使用方法可以极大地丰富HTML元素的表现效果,同时对于整个HTML文档的布局也会产生很大的帮助和促进.本文尝试在介绍CSS盒子模型基本概念和组成元素属性的基础上,结合个人学习经验对其在网页制作中的实际应用谈一谈自己浅显的观点和看法.[关键词]盒子模型:表现效果:网页布局: CSS是Cascading Style Sheets的缩写,中文意思是层叠样式表

浅谈css(块级元素、行级元素、盒子模型)

一.块级元素的特点 1.默认显示在父标签的左上角 2.默认占满一行(占满整个文档流) 文档流是将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流. 二.行内元素(内联元素)的特点 1.大小受到文字区域的影响,不受到width.height影响. 2.行内元素不会独自占满一行. 例: 1 <div id="d1"> 2 这是块级元素 3 </div> 4 <span id="d2"> 5 这是行内元素 6 &

从div盒子模型谈如何写可维护的css代码

市面上我们常常会看到各种各样的设计模式书籍,Java设计模式.C#设计模式.Ruby设计模式等等.在众多的语言设计模式中我唯独找不到关于CSS设计模式的资料,即使在网上找到类似内容,细细一看之下才发觉是南辕北辙.经过浩瀚文章搜索发掘下依旧一无所获之后,直接导致了我萌生一股写一篇CSS设计模式的冲动,至此写下这篇文章,其中叙述如有不当之处,也恳请各位提出意见,分享出您宝贵的经验. 在写页面之中,width, margin, padding这三个CSS属性可以说是用到频率最高的几个属性之一.但根据我