CSS躬行记(3)——CSS属性拾遗

简介: CSS躬行记(3)——CSS属性拾遗


一、粘滞定位


  粘滞定位(sticky)与相对定位类似,既不会脱离正常流,也不会改变元素盒类型,并且会保留原先所占的空间。它会相对于包含块偏移,它的包含块分为两种,第一种和绝对定位一样;第二种是最近的滚动祖先,即overflow属性是hidden、scroll、auto或overlay时。接下来用一个例子来介绍粘滞定位的用法,如下代码所示。

<style>
  div {
    overflow: auto;
  }
  span {
    position: sticky;
    top: 10px;
    left: 20px;
    width: 70px;
    height: 50px;
    background: #CCC;
  }
</style>
<div>
  改变粘滞定位的位置,改变
  <span>粘滞定位的位置</span>
  ,改变粘滞定位的位置,改变粘滞定位的位置,
  改变粘滞定位的位置,改变粘滞定位的位置,
  改变粘滞定位的位置。
</div>

  span元素的包含块是div元素,下图描绘了页面滚动时,粘滞定位的效果。在中间图中可以看到偏移后的span元素所占的空间被保留了,在右边图中可以看到span元素粘滞在指定的偏移位置。

G1.png


二、边框图像


  CSS3新增了一组属性,允许在边框中加载图像,接下来会逐个讲解。

  第一个是border-image-source属性,它能指定图像来源,如下所示。在下图中,会发现加载的图像位于div元素的四个角,而不是沿着边框绘制。

div {
  border: 40px solid;
  border-image-source: url(./star.png);
}

G2.png

  注意,边框宽度需要指定,并且其外观不能是none,否则将无法显示。

  第二个是border-image-slice属性,它包含四条裁剪线,可接收四个偏移值,分别距图像的上右下左四个边,下图演示了偏移33%时的裁剪线。

G3.png

  执行下面的样式(效果如下图所示),在将circle.png分解成9块后,编号为1、2、3、4的四个圆位于div元素的四个角,而编号为5、6、7、8的四个圆则会被拉伸。

div {
  border-image-source: url(./circle.png);
  border-image-slice: 33%;
}

G4.png

  border-image-slice属性还能接收一个fill关键字(如下图所示),可将编号为9的圆作为div元素的背景图。

div {

 border-image-slice: 33% fill;

}

G5.png

  第三个是border-image-repeat属性,它能指定填充边框的方式,默认是拉伸,现在改成平铺(如下图所示),边界处的图像可能会被裁剪。

div {
  border-image-repeat: repeat;
}

G6.png

  第四个是border-image-width属性,与border-image-slice属性类似,也有4条裁剪线,只是它裁剪的对象是边框。在下图中,左边是未定义border-image-width属性的div元素,右边是将该属性设为20px后的效果。

div {
  border-image-width: 20px;
}

G7.png

  第五个是border-image-outset属性,可声明图像超出边框的距离,即向外偏移。在下图中,左边是未定义border-image-outset属性的div元素,右边是将该属性设为10px后的效果。

div {
  border-image-outset: 10px;
}

G8.png

  第六个是border-image属性,可将上述5个属性整合到一起,规定不同的值之间用斜杠(/)分隔,并且还指定了顺序:首先是border-image-slice,然后是border-image-width,最后是border-image-outset。而border-image-source和border-image-repeat两个属性可放在任意位置,但要注意,不能放置在其它属性值之中。下面是个整合示例,效果如下图所示。

div {
  border-image: url(./circle.png) 33% / 20px / 10px repeat;
}

G0.png


三、字符间距


  letter-spacing属性可定义字符之间的距离,可以突出某段文本,例如为p元素定义10px的字符间距,如下图所示。

<style>
  p {
    letter-spacing: 10px;
  }
</style>
<p>字符间距是10px</p>

H1.png


四、文本阴影


  text-shadow属性可为文本添加阴影,适用于标题或短文本。阴影值由四部分组成,分别是颜色、横向偏移、纵向偏移和模糊半径。下面的示例为一段文本添加了灰色的阴影,效果如下图所示。

<style>
p {
  text-shadow: #CCC 5px 10px 2px;
}
</style>
<p>My name is Strick.</p>

H2.png

  注意,模糊半径越大,阴影就越模糊。妥善利用好text-shadow属性,还能创造出3D效果,下面的样式来源于网络,字体放大后,3D更明显,效果如下图所示。

p {
  font-size: 48px;
  text-shadow: 0 1px 1px #BBB, 
    0 2px 0 #999, 
    0 3px 0 #888, 
    0 4px 0 #777,
    0 5px 0 #666, 
    0 6px 0 #555, 
    0 7px 0 #444, 
    0 8px 0 #333, 
    0 9px 7px #302314;
}

H3.png


五、多重背景


  CSS3支持多重背景,大部分背景属性都能通过逗号分隔多个值,包括简写的background属性也能接受多个值。在下面的示例中,为div元素声明了两个背景,先声明的star.png将会在lake.png之上,如下图所示。

div {
  background-image: url(./star.png), url(./lake.png);
  background-position: left bottom, center;
  background-repeat: repeat-x, no-repeat;
}
/* 等价于 */
div {
  background: url(./star.png) left bottom repeat-x,
            url(./lake.png) center no-repeat;
}

H4.png

  注意,不能为background-color指定多个值。当用background属性声明多个背景时,颜色只能出现在最后一个背景层中,如下代码所示。

/* 错误 */
div {
  background: #FC0 url(./star.png) left bottom repeat-x,
            url(./lake.png) center no-repeat;
}
/* 正确 */
div {
  background: url(./star.png) left bottom repeat-x,
            #FC0 url(./lake.png) center no-repeat;
}


六、矩阵函数


  在CSS中,矩阵函数是变形的基础,位移、缩放、倾斜和旋转四种变形都能用矩阵来实现,例如用矩阵函数来描述水平偏移10px,垂直偏移5px,代码如下所示。

.matrix {
  transform: matrix(1, 0, 0, 1, 10, 5);
  /* 等同于 */
  transform: translate(10px, 5px);

}

  现在将矩阵函数的6个参数用小写字母来命名,如下所示,

transform: matrix(a, b, c, d, e, f);

  对应的矩阵如下所示,注意观察6个参数的位置。

V1.png

  矩阵函数的原理是通过变更元素的所有坐标,重新定位元素,从而实现各种变形。下面是矩阵的计算公式,其中x和y是元素的横坐标和纵坐标。

B1.png

  ax+cy+e是变形后的横坐标,bx+dy+f是变形后的纵坐标。具体的计算过程如下所示,以矩阵的第一行为例,相同底色的变量会相乘,得到的积再相加。

T12.png

  在下图中,列出了与四类变形函数等效的矩阵符号(引用自《The CSS3 matrix() Transform for the Mathematically Challenged》一文),其中旋转和倾斜还用到了三角函数。

21.png

  在三维空间,也有一个对应的矩阵函数:matrix3d(),此处不再展开叙述,可以查看网上的相关资料。


七、三维变形


  在三维空间中有三个轴,如下图所示,其中Z轴表示用户与平面的距离(即透视值)。

22.png

  perspective()是一个透视函数,它能接收一个非零正数透视值。在下面的示例中,会让四个元素围绕Y轴旋转30°,除了第一个元素,其它都调用了透视函数。通过下图的效果可知,当透视值越小时,变形效果越失真。

.rotate {
  transform: rotateY(30deg);
}
.perspective-200 {
  transform: perspective(200px) rotateY(30deg);
}
.perspective-600 {
  transform: perspective(600px) rotateY(30deg);
}
.perspective-1200 {
  transform: perspective(1200px) rotateY(30deg);
}

23.png

  注意,透视函数需要声明在变形函数列表的首位,以免在透视前变形,呈现错误的效果。

  除了perspective()函数之外,CSS3还提供了一个perspective属性。前者只能为目标元素声明透视,而后者声明的透视能应用于其子元素。举个简单的例子,为父元素section声明perspective属性,子元素仍旧围绕Y轴旋转30°,代码如下所示,得到的效果如下图所示。

<style>
  .perspective {
    perspective: 200px;
  }
  .perspective > div {
    transform: rotateY(30deg);
  }
</style>
<section class="perspective">
  <div>200px</div>
  <div>200px</div>
</section>

24.png

  perspective-origin属性可修改透视原点,也叫消失点,其取值与transform-origin类似。默认情况下,这个点位于元素的中心,接下来修改上例父元素的透视原点,样式如下,效果如下图所示。

.perspective {
  perspective-origin: top left;
}

25.png

  backface-visibility属性可控制元素背面朝向用户时是否渲染,利用该属性可设计出3D翻转的特效。接下来会一步步的实现该功能,首先是创建HTML结构,如下所示,section是两个div的父元素。

<section class="flip">
  <div class="positive">正面</div>
  <div class="reverse">反面</div>
</section>

  然后在父元素中添加过渡时间和透视,并将transform-style属性设为preserve-3d,这样才能让子元素和父元素处于同一个三维空间,样式如下。

.flip {
  position: relative;
  width: 100px;
  height: 100px;
  transition: 0.6s;
  transform-style: preserve-3d;
  perspective: 1000px;
}

  再将两个子元素的backface-visibility属性设为hidden,并且将第二个div元素围绕Y轴旋转180°,样式如下。

.flip > div {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
}
.flip .positive {
  background: #FC0;
}
.flip .reverse {
  background: #F60;
  transform: rotateY(180deg);
}

  最后为父元素定义:hover伪类,也就是在鼠标悬停时,自身也围绕Y轴旋转180°,隐藏第一个div元素,显示第二个div元素,样式如下。

.flip:hover {
  transform: rotateY(180deg);
}

  由于是动态的效果,因此需要用多张图来描绘翻转的过程,如下图所示。

26.png

相关文章
|
6月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
330 1
|
6月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
304 1
|
6月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
205 1
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
608 1
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
214 0
|
前端开发
css的渐变属性linear-gradient
css的渐变属性linear-gradient
|
前端开发
CSS属性:盒子模型
CSS属性:盒子模型
170 0
|
前端开发
CSS属性
CSS属性
195 0
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
749 3
前端基础(五)_CSS文本文字属性、背景颜色属性
|
前端开发
CSS 浮动属性讲解和使用
本文介绍了CSS中的浮动(float)属性,包括其基本功能、属性选项及其在网页布局中的应用。浮动使元素脱离文档流,向左或右排列,周围元素随之调整。文章还详细讲解了清除浮动的方法,如使用clear属性、设置父元素高度、利用overflow属性、伪元素等,以解决因浮动导致的布局问题。最后,强调了浮动在创建复杂布局时的作用,并预告后续内容。
460 2

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    420
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    330
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    304
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    205
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    421
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    608
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    777
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    214
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    621
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    382