如何使用CSS3实现书页(书本)卷角效果

html-css014

如何使用CSS3实现书页(书本)卷角效果,第1张

首先创建一个div元素容纳文本信息(可以包含更多元素),class取名为“狗耳朵”也就是卷角的意思:

[html] view plain copy

<div class="dog-eared-tip">put your tips here</div>

然后编写如下的CSS代码:

[css] view plain copy

.dog-eared-tip{

padding: 7.5px 5px 7.5px 20px

background: #DEAA2F

font-size: 13px

position: absolute

text-align: center

width: 100%

color: black

}

.dog-eared_tip:before, .work_tip:after {

content: ""

position: absolute

z-index: -2

-moz-transform: rotate(-3deg)

-webkit-transform: rotate(-3deg)

-o-transform: rotate(-3deg)

-ms-transform: rotate(-3deg)

transform: rotate(-3deg)

bottom: 15px

box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7)

height: 50%

left: 10px

max-height: 100px

max-width: 300px

width: 50%

}

.dog-eared_tip:after {

-moz-transform: rotate(3deg)

-webkit-transform: rotate(3deg)

-o-transform: rotate(3deg)

-ms-transform: rotate(3deg)

transform: rotate(3deg)

left: auto

right: 10px

}

上面的代码首先设置了div的常用样式如底色、字体、居中、边距等。

然后为该div的:before和:after伪元素设置框阴影(box-shadow)和小角度旋转(rotate方法),

并把before和after的位置放在div的底部,并且z序列为负数,这样的实际效果就是伪元素本身被div所遮挡,但是刚好使得其外围阴影部分露出底部。

注意,这里请记得不要给div设置overflow不可见的样式,否则阴影不可见。

基本上好了,还差最后一步,两边阴影的倾斜度在物理学上是对称的,所以我们还需要调整一下:after伪元素的倾斜角度(-3°调整为3°)。

这样:before对应于标签的左下边角,:after对应于标签的右下边角的卷曲阴影。

本例在IE11/Chrome/FF/Edge下可以工作。

你还可以使用CSS3中的伪类:hover和transition属性,在本例基础上添加鼠标悬停效果,

也就是当用户悬停在书页上时,呈现卷角被缓缓抚平的效果,我们把这个称之为“会呼吸的纸”。

用css3制作纸张效果

一、中规中矩的效果

所谓“中规中矩的效果”就是加个投影,贴个胶带什么的。效果如下:

CSS3的box-shadow投影效果,相关代码如下:

代码如下:

-moz-box-shadow: 0 2px 10px 1px rgba(0, 0, 0, 0.2)-webkit-box-shadow: 0 2px 10px 1px rgba(0, 0, 0, 0.2)box-shadow: 0 2px 10px 1px rgba(0, 0, 0, 0.2)

反而是上面的胶带纸效果有点说头,这些微微倾斜的胶带是CSS写出来的,大部分效果源自CSS3,主要有RGBA显示半透明背景色,box-shadow显示淡淡的投影,transform做旋转效果;元素使用after伪类生成,完整代码如下:

代码如下:

.page:after { width: 180pxheight: 30pxcontent: " "margin-left: -90pxborder: 1px solid rgba(200, 200, 200, .8)background: rgba(254, 254, 254, .6)-moz-box-shadow: 0px 0 3px rgba(0, 0, 0, 0.1)-webkit-box-shadow: 0px 0 3px rgba(0, 0, 0, 0.1)box-shadow: 0px 0 3px rgba(0, 0, 0, 0.1)-moz-transform: rotate(-5deg)-webkit-transform: rotate(-5deg)-o-transform: rotate(-5deg)transform: rotate(-5deg)position: absoluteleft: 50%top: -15px}

老外似乎很喜欢使用before和after伪类,国外最近的些教程,技术点等经常见到此玩意。我个人感觉有跟风之嫌,就像是狂热的经济泡沫,不需 要太久,大家会冷静下来重新审视这些曾经上手简单,自我感觉不错的方法。由于目前IE6/7不支持before/after类,所以,某种意义上来说,伪 类的使用少了些兼顾IE下显示的烦恼。

二、外翻卷角纸张效果

纸张一般都是有卷角的,所以,我们可以更近一步,模拟卷角效果来使得纸张的感觉更逼真,这里就要借助于投影了,且是曲线投影。

我们还可以给纸张增加渐变(gradient)效果,以模拟纸张的曲度。

同时,可以给文字增加投影,可以让文字有书写的凹陷感,可以进一步让纸张效果更逼真。

于是,在“中规中矩”纸张基础上,我们做点小手术,结果得到下面的效果:

您可以狠狠地点击这里:渐变卷边纸张效果demo

目前貌似opera浏览器还不支持CSS3渐变,同时webkit核心下浏览器下的gradient渐变的写法已经开始向FireFox浏览器靠拢了。确实,都是CSS3,有必要搞得五花八门吗?

相关渐变CSS代码如下:

代码如下:

background:-moz-linear-gradient(top, #f4f39e, #f5da41 60%, #fe6)background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f4f39e), to(#fe6), color-stop(.6, #f5da41))

在60%的位置有个颜色拐点。

关于弧形的投影,也是使用:before/:after伪类实现的,相关代码如下:

代码如下:

.page:before { -webkit-transform: skew(-15deg) rotate(-5deg)-moz-transform: skew(-15deg) rotate(-5deg)-o-transform: skew(-15deg) rotate(-5deg)transform: skew(-15deg) rotate(-5deg)left: 15px} .page:after { -webkit-transform: skew(15deg) rotate(5deg)-moz-transform: skew(15deg) rotate(5deg)-o-transform: skew(15deg) rotate(5deg)transform: skew(15deg) rotate(5deg)right: 15px} .page:before, .page:after { width: 90%height: 20%content: ' '-webkit-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3)-moz-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3)box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3)position: absolutebottom: 22pxz-index: -1}

要想查看效果的完整代码,demo页面查看源文件即可,脱光光,一览无遗。

这里的曲线投影卷角效果支持Opera浏览器,如下截图:

三、带分隔线的卷纸纸张效果

上面的纸张卷角效果是通过曲线投影效果来模拟的,而这里,纸张的卷边效果是纸张真的“曲线化”了,而且,还是带隔线的纸张效果哦,您可以参见下面的效果截图(Chrome 9):

这里,Firefox浏览器下的纸张隔线使用的是重复渐变(Repeating Gradients)实现的,对于webkit浏览器,使用的是background-size实现的。实际上,Firefox3.6+已经支持background-size属性了(-moz-background-size), 所以,对于Firefox浏览器,这里使用重复渐变与渐变+background-size是等效的。在FireFox4以及IE9浏览器中 background-size属性已经没有私有属性了,Opera浏览器在9.5版本时候就已经支持background-size属性了,但是存在一 些bug。

这里分隔线实现的相关CSS如下:

代码如下:

background: -moz-repeating-linear-gradient( top, #fcf59b, #fcf59b 29px, #81cbbc 30px )background: -webkit-gradient( linear, left top, left bottom, from(#81cbbc), color-stop(2%, #fcf59b) )background: repeating-linear-gradient( top, #fcf59b, #fcf59b 29px, #81cbbc 30px )-webkit-background-size: 100% 30px

而对于曲边的实现,使用的是border-radius圆角,这里展示下示意的代码:

代码如下:

border-bottom-left-radius: 20px 500pxborder-bottom-right-radius: 500px 30pxborder-top-right-radius: 5px 100px

当然,FireFox浏览器下的写法不是如此,其bottom, left是连起来的,而不是”-”分隔,这里仅仅是示意,这里的微曲线是如何实现的。相信看到上面的代码就知道意思了,这里就不啰嗦了。

还有其他些细节,如如何控制行高让文字与隔线一一对应,这些您要是有兴趣可以去demo页面,通过查看元素等方法一看究竟。

四、最后点老生常谈

难免的,本文的重点在于CSS3,所以就本文而言,IE6/IE7/IE8浏览器就是过来打酱油的,且三个纸张效果从一而终,都是下面这副模样:

虽然没有透明胶效果,没有投影,没有卷边,更没有分隔线,但是,就功能上来讲,一点都不影响使用。所以,无论你是渐进增强还是退求其次,纸张投影效果在实际项目中的应该也不是不可以的,这就要看个人和团队的抉择了。

DIV+CSS规则整理

一、善用css缩写规则

/*注意上、右、下、左的书写顺序*/

1. 关于边距(4边):

1px 2px 3px 4px (上、右、下、左)

1px 2px 3px (省略的左等于右)

1px 2px (省略的上等于下)

1px (四边都相同)

2. 简化所有:

*/ body{margin:0}------------表示网页内所有元素的margin为0

#menu{ margin:0}------------表示menu盒子下的所有元素的margin为0

3. 缩写(border)特定样式:

Border:1px solid #ffffff

Border-width:0 1px 2px 3px

4. 关于文字的缩写规则:

Font-style:italic斜体形式

Font-variant:small-caps/normal变体样式:小型大写字母/正常

Font-weight:bold

Font-size:12px

Line-height:1.2em(120%)/1.5em(150%)

Font-family:arrial,sans-serif,verdana

缩写成:

Font:italic small-caps bold 12px/1.5emarrial,sans-serif

注意:Font-size和Line-height用斜杠组合在一起不能分开写。

5. 关于背景图片的:

Background:#FFF url(log.gif) no-repeatfixed top left

6. 关于列表:

List-style-type:square/none

List-style-position:inside

List-style-image:url(filename.gif)

缩写成:

List-style:none inside url(filename.gif)

二、运用4种方法来引入CSS样式

1.link

<link rel=”stylesheet” type=”text/css”href=”a.css”>

rel 关系

type 数据类型,有多种

href 路径

部分浏览器支持候选样式,关键字:alternate:

<link rel=”stylesheet” type=”text/css”href=”a.css”>

<link rel=”alternate stylesheet”type=”text/css” href=”b.css”>

<link rel=”alternate stylesheet”type=”text/css” href=”c.css”>

2.内部样式块

<style>

<!–

h1{color:red}

–>

</style>

3.@import

@import url{a.css}

注意:此指令必须放在<style>容器中,并且在所有样式之前

建议放在一个html注释中,<!– –>浏览器会不显示注释内的内容,而import等css代码能正常工作

4.内联样式

<p style=”color:red”>

选择器是css的一个基本概念,基本规则如下:

1.规则结构:

h1 {color:red}

选择器 {属性:值}

这类是元素选择器,基本可以包括所有html的元素

属性值可以包括多个元素,如:border:1px solid red

常用语法

1)分组:

选择器和声明都可以分组:

h1,h2,h3{color:redbackground:#fff} ,选择器用“,”分割开,属性用””分割

2)类选择器,即通过class=”stylename”应用的声明

定义:

.stylename{color:red}

注意:

在html中可以使用多类选择:如class=”cn1 cn2 cn3″

3)ID选择器,即与id属性对应的样式

定义:

#a{color:red} ->这个定义对用id=”a”的元素

2.这部分都是我们常见的css语法,下面谈一下我们不常见的选择器语法

1)父子结构,跟文档结构图对应

如p span{border:1px solidred}对应的是<p>下面的<li>标签,这个很用用途,可以准确定位.

一些特殊应用(IE7支持):

(1) p >span{},匹配所有p下所有的span

(2) p + span{} ,匹配紧接着p元素后出现的第一个span标签,2者要有相同的父标签

2)属性选择器:(注意:属性选择器ie7才开始支持,以下版本并不支持,其他的浏览器基本可以)

语法:img[alt]{border:1pxsolid}

表示对应有alt属性的img标签,当然可以支持多个属性对应,如img[alt][title]{}表示这个2个属性都有的img标签,

也可以与具体值对应:如:img[alt=”摄影”]{}

属性选择器中的高级应用,特殊匹配:

(1)img[class~=”b”], ~= : 与属性中的一个值对应的,即与<img class=”a b c”>对应

(2)[class^=”a”],以a开头的

(3)[class$=”a”],以a结束的

(4)[class*=”a”],包含a的

(5)[class|=”a”],等于a或以a开头的

3)伪类和伪元素

日常使用中主要是<a>标签的几个伪类:link:hover:active:visited

以及:first-child:first:before:left:right:lang:focus:fist-line等等

注意:动态伪类可以应用到任何元素,如,input:focus{background:red}当input标签获得焦点时背景变红

以上语法组合使用,就能实现定位准确、简单间接的样式了。

三、选择器分类整合

优先级别遵循:行内样式 >ID >Class >标记

基本选择器标记选择器(eg:<p></p>)

类别选择器(eg:class)

ID选择器

复合选择器

“交集”复合选择器(eg:p.menu{color:red})必须是

标记+类别/ID组合

“并集”复合选择器(eg:h1,h2,h3{color:red})

“后代”复合选择器(eg: #menu.menulist{ ... })

“子”复合选择器(eg: #menu.menulist .selectit {... })

四、使用子选择器减少id和class的定义

示例结构:

<div id="menu">

<div class="menulist">

<divclass="selectit">content</div>

</div>

</div>

示例CSS:

#menu { ... }

#menu .menulist { ... }

#menu .menulist .selectit { ... }

五、使用组选择器为不同元素应用相同的样式

如h1,h2,h3,div{font-size:16pxfont-weight:bold}

则h1,h2,h3,div元素的样式都为字体16像素,字体粗体

六、伪类和选择符的配合使用

将伪类和类组合起来用,就可以在同一个页面中做几组不同的链接效果了,例如,我们定义一组链接为红色,

访问后为蓝色;另一组为绿色,访问后为黄色:

a.red:link {color: #FF0000}

a.red:visited {color: #0000FF}

a.blue:link {color: #00FF00}

a.blue:visited {color: #FF00FF}

现在应用在不同的链接上:

<a class="red"href="...">这是第一组链接</a>

<a class="blue" href="...">这是第二组链接</a>

七、CSS的最近优先原则

/*如果对一个元素定义了多次样式,则以最近的一级优先,最近一级的样式将覆盖其他行内样式 >ID >Class>标记*/

以下是引用片段:

CSS:

p{color:red}

.blue{color:blue}

.yellow{color:yellow}

HTML:

<p>此处显示为红色</p>

<p class="blue">此处显示为蓝色</p>

<p class="blue"style="color:green">此处显示为绿色</p>

<p class="blue yellow">此处显示为黄色</p>

注意:

(1)注意样式的几个优先顺序(优先级由上至下递减,下面的样式覆盖上面的样式):

--元素style设定

--head区<style></style>中的设定

--外部引用css文件

(2)优先级不是按访问顺序来设定的,而是又css中的声明顺序来设的。

如上例中<pclass="yellow blue">此处显示为黄色</p>也显示为黄色,因为在css定义中.yellow在.blue

的后面。

八、书写正确的链接样式

当用css定义链接的各种状态时,要注意书写的顺序即::link :visited :hover :active利用首字母:L V H A,

你可以通过记忆LoVe,Hate,两个单词来记住其顺序。

:link --------链接的颜色

:visited -----鼠标点击后的颜色

:hover -------鼠标放上去未点的颜色(悬停)

:active-------鼠标点击瞬间的颜色

九、:hover的灵活运用

IE6不支持除a标签以外的:hover属性,我们了解:hover属性是鼠标悬停效果。在IE7和FF中,对几乎任意元素

都可以设置:hover属性效果。这对我们做不同的访问效果很好。

如:

p {

width : 360px

height : 80px

padding : 20px

margin : 50px auto 0 auto

border : 1px solid #ccc

line-height : 25px

background : #fff

}

p:hover {

border : 1px solid #000

background : #ddd

}

----------------此效果针对IE7和FF

p a {

color : #00f

text-decoration : none

font-size : 13px

}

p a:hover {

color : #036

text-decoration : underline

}

-----------------此效果针对IE6

十、定义A标签要注意的小问题

当我们定义a{color:red}时,它代表了A的四种状态的样式,如果此时要定义一个鼠标放上的状态只要定义

a:hover就可以了,其它三种状态就是A中所定义的样式。

只定义了一个a:link时,一定要记得把其它三种状态定义出来!

十一、禁止内容换行与强制内容换行

在表格或层中我们可能希望内容不换行或强制换行,我们可以通过一些css属性来达到这些要求。

禁止换行:white-space:nowrap

强制换行:word-break:break-allwhite-space: normal

十二、区别relative和absolute

Absolute---CSS中的写法是:position:absolute他的意思是绝对定位,他是参照浏览器的左上角,配合

TOP、RIGHT、BOTTOM、LEFT(下面简称TRBL)进行定位,在没有设定TRBL,默认依据父级的做标原始点为

原始点。如果设定TRBL并且父级没有设定position属性,那么当前的absolute则以浏览器左上角为原始点进行

定位,位置将由TRBL决定。

Relative---CSS中的写法是:position:relative他的意思是绝对相对定位,他是参照父级的原始点为原始点,

无父级则以BODY的原始点为原始点,配合TRBL进行定位,当父级内有padding等CSS属性时,当前级的原始

点则参照父级内容区的原始点进行定位。

十三、区别块级元素block和内联元素inline

块级---可定义宽高,另起独占一行(如:divul)

内联---不可定义宽高,如文本元素(如a span)

十四、区别display和visibility

display:none和visibility:hidden都可以隐藏一个元素,但visibility:hidden只是隐藏了元素的内容,但其使用的

位置空间仍然被保留。而display:none则相当把元素从页面中去除,其占用位置也将被删除。

十五、背景background的一些语法

background-image:url(背景图案.jpg,gif,bmp)

background-color:#FFFFFF(背景颜色)

background-color : transparent<--设定背景为透明色–>

background-repeat 改变背景图片的重复并排的设定

说明

repeat 背景图片并排

repeat-x 背景图片以X方向 并排

repeat-y 背景图片以Y方向 并排

no-repeat 背景图片不 以并排的方式处理

background-attachment是否固定图片位置

说明

scroll 拉动卷轴时,背景图片会跟着移动(缺省值)

fixed 拉动卷轴时,背景图片不会跟着移动

以长度定位background-position:x y

使用百分比定位background-position: x% y%

说明

x% 往右移

y% 往下移

backgroud-position: 0% 0%左边上方

backgroud-position: 0% 50%左边中间

backgroud-position: 50% 0%中间上方

backgroud-position: 50% 50%正中间

backgroud-position:100% 0%右边上方

backgroud-position: 0% 100%左边下方

backgroud-position: 100% 50%右边中间

backgroud-position: 50% 100%中间下方

backgroud-position: 100% 100%右边下方

以关键字定位

关键字说明

top 上 ( y = 0 )

center 中 ( x = 50, y = 50 )

bottom 下 ( y = 100 )

left 左 ( x= 0 )

Exp:

background-position:center

图片在指定背景中央X=50% Y=50%位置

background-position: 200px 30px

十六、注释的写法

在Html中:

<!-- footer -->

content

<!-- end footer -->

在CSS中:

/* ---------- header ----------------- */

Style

十七、CSS的命名规范

1. id的命名

(1)页面结构

容器: Container

页头:header

内容:content/container

页面主体:main

页尾:footer

导航:nav

侧栏:sidebar

栏目:column

页面外围控制整体布局宽度:wrapper

左右中:left right center

(2)导航

导航:nav

主导航:mainnav

子导航:subnav

顶导航:topnav

边导航:sidebar

左导航:leftsidebar

右导航:rightsidebar

菜单:menu

子菜单:submenu

标题: title

摘要: summary

(3)功能

标志:logo

广告:banner

登陆:login

登录条:loginbar

注册:regsiter

搜索:search

功能区:shop

标题:title

加入:joinus

状态:status

2. class的命名

(1)颜色:使用颜色的名称或者16进制代码,如

.red { color: red}

.f60 { color: #f60}

.ff8600 { color: #ff8600}

(2)字体大小,直接使用"font+字体大小"作为名称,如

.font12px { font-size: 12px}

.font9pt {font-size: 9pt}

(3)对齐样式,使用对齐目标的英文名称,如

.left { float:left}

.bottom { float:bottom}

(4)标题栏样式,使用"类别+功能"的方式命名,如

.barnews { }

.barproduct { }

注意事项::

u 一律小写

u 尽量用英文

u 不加中杠和下划线

u 2个组合的单词不用中杠和下划线可以将第二个单词的首字母大写(eg:mainContent);

u 尽量不缩写,除非一看就明白的单词.

3. 主要的站点css文件

主要的 master.css

模块 module.css

基本共用 base.css(root.css)

布局,版面 layout.css

主题 themes.css

专栏 columns.css

文字 font.css

表单 forms.css

补丁 mend.css

打印 print.css

十八、Padding影响宽度问题

如果一组要嵌套的标签之间需要些间距的话,那就留给位于里面的标签的margin属性吧,而不要去定义位

于外面的标签的padding

十九、完美的单象素外框线表格

table{border-collapse:collapse}

td{border:1px solid #000}

二十、如果文字过长,则将过长的部分变成省略号显示

<style=”width:120pxheight:50pxoverflow:hiddentext-overflow:ellipsiswhite-space:nowrap”>

二十一、并不是所有样式都要简写

当样式表前定义了如p{padding:1px2px 3px 4px}时,在后续工程中又增加了一个样式上补白5px,下补白

6px。我们并不一定要写成p.style1{padding:5px 6px 3px 4px}。可以写成p.style1{paddingtop:5pxpadding-right:6px},你可能会感觉这样写还不如原来那样好,但你想没想过,你的那种写法重复定义

了样式,另外你可以不必去找原来的下补白与左补白的值是多少!如果以后前一个样式P变了话,你定义的

p.style1的样式也要变。(此种方法对后期修改样式很重要)

二十二、几个常用到的CSS细节处理上的样式

1)中文字两端对齐:text-align:justifytext-justify:inter-ideograph

2)固定宽度汉字截断:overflow:hiddentext-overflow:ellipsiswhite-space:nowrap(不让其换行,不过只能

处理文字在一行上的截断,不能处理多行。)(IE5以上)FF不能,它只隐藏。

***万能强制换行:white-space:normalword-break:break-all

禁止换行:white-space:nowrap

强制换行:word-wrap:break-wordword-break: normal

.AutoNewline

{

/*word-break: break-all方法一必须*/

/*word-wrap:break-wordoverflow:hidden方法二*/

/*word-wrap:break-wordword-break: normal方法三 */

word-wrap:break-wordword-break:break-all}

.NoNewline

{

/*word-break: keep-all方法一必须*/

white-space:nowrap

}

3)固定宽度汉字(词)折行:table-layout:fixedword-break:break-all(IE5以上)FF不能。

4)<acronym title=”输入要提示的文字”style=”cursor:help”>文字</acronym>用鼠标放在前面的文

字上看效果。这个效果在国外的很多网站都可以看到,而国内的少又少。

5)图片设为半透明:.halfalpha { background-color:#000000filter:Alpha(Opacity=50)}在IE6及IE5测试通

过,FF未通过,这是因为这个样式是IE私有的东西;

6)FLASH透明:选中swf,打开原代码窗口,在</object>前输入<paramname=”wmode”

value=”transparent”>以上是针对IE的代码。

针对FIREFOX 给<embed>标签也增加类似参数wmode=”transparent”

7)在做网页时常用到把鼠标放在图片上会出现图片变亮的效果,可以用图片替换的技巧,也可以用如下的滤

镜:

.pictures img {

filter: alpha(opacity=45)}

.pictures a:hover img {

filter: alpha(opacity=90)}

8)层在浏览器中居中对齐问题

body { text-align: center }

#content { text-align: leftwidth: 700pxmargin: 0 auto }