css之样式介绍

200 阅读5分钟

字体

字体是一类字体族,在每类字体族下又分为几个小类。

在西方国家的字母体系,分成两大字族:serif(衬线字体)及sans serif(无衬线字体)。serif的意思是,在字的笔画开始及结束的地方有额外的装饰,而且笔画的粗细会因直横的不同而有不同。相反的,sans serif就没有这些额外装饰,而且笔画粗细大致上是差不多。

在书写是,字体族是不能打引号的,具体的某一个字体需要打引号。在使用中,我们会多写几种字体,浏览器从前往后找。

在mac电脑默认是用PingFang显示,在window电脑默认用微软雅黑。下面把PingFang写在前面就优先使用PingFang,如果没有就从后面找。

body {
    font-family: "PingFang SC", "Microsoft YaHei"
}

网络字体

首先下载网络字体,然后声明一种字体,用@font-face声明,如图:

@font-face {
    font-family: 'LF',
    src: url("./identiry.tff")
}
body {
    font-family: LF
}

行高line-height

行高就是一行的高度,这一行是由内联元素组成的,所以行高是由行内的内联元素的line-height的高度决定。下面代码中这一行的高度由里面是span元素的最大的line-height决定,所以这一行的高度是30px。

.c1{ line-height: 20px; } .c2{ line-height: 8px; } .c3{ line-height: 30px; }
<div>
  <span class="c1">inline box xfg中文</span>
  <span class="c2">inline box</span>
  <span class="c3">inline box</span>
</div>

line-height为什么能让字体居中?

<div style="border: solid 1px red">
   <span
          style="
            background: blue;
            color: #fff;
            font-size: 20px;
            line-height: 60px;
          "
        >
    居中xfg
  </span>
</div>        

css-1.jpg

span元素的line-height就是这一行的高度,所以div的高度是60。但是span本身的高度就是字体大小本身的高度,那么多余的高度就平均分配到上下两侧,就形成了居中对齐的现象。

注意:在span上加背景只会加到自身上面,不会把这个高度都会有背景。

行内元素的对齐方式

默认是基线对齐,通过vertical-align来设置对齐方式。还可以是数字,数字就是以基线来为基准的,vertical-align:5px 往基线上部移动5px的距离。

图片底部3px的问题

这个3px也不是绝对的,这是由span里面文字的大小决定的。为什么有这个问题呢?因为img也是行内元素,和文字也是基线对齐,基线和底线有一段距离,所以就会产生这个问题。解决方式就是把图片的对齐方式改为vertical-align : bottom

<div style="background:red">
   <span>文字</span>
   <img src="test.png"/>
</div>

background背景

background-size

指定背景图像的大小

background-size: length|percentage|cover|contain;
  • length: 设置背景图片具体的高度和宽度
  • cover: 图片宽高比不变、铺满整个容器的宽高,而图片多出的部分则会被裁掉
  • contain: 图片自身的宽高比不变,缩放至整个图片自身能完全显示出来,所以容器会有留白区域、

contain即为包含,我图片虽然缩放了,但是整个图是被包含在里面了,完整显示,不能裁剪。cover即为铺满,按宽高比进行铺满,可能会出现裁剪掉一部分图像的效果。

background-position

设置背景图像的起始位置,其值可以是left top等,也可以是具体的数值

background-clip

指定背景绘制区域

background-clip: border-box|padding-box|content-box;

css2.jpg

以后如果设不想padding也有背景,直接置background-clip就可以了。

折行

  • white-space: 规定段落中的文本不进行换行
  • word-break: 对单词或者中文句子打断进行换行
  • text-overflow: clip|ellipsis: 指定当文本溢出包含它的元素,应该发生什么 省略号
white-space: nowrap; 
text-overflow: ellipsis; 
overflow: hidden; 
word-break: break-all;

box-shadow

box-shadow: offset-x offset-y blur spread color position

offset-x/y

.left { box-shadow: 20px 0px 10px 0px rgba(0,0,0,0.5) } 
.right { box-shadow: -20px 0px 10px 0px rgba(0,0,0,0.5) }

css3.jpg

blur

第三个长度值代表了阴影的模糊半径,值为 0 意味着该阴影是固态而锋利的,完全没有模糊效果。blur 值越大,阴影则更不锋利而更朦胧 / 模糊。

.right { box-shadow: 0px 0px 50px 0px rgba(0,0,0,0.5) }

css4.jpg

spread

第四个长度代表了阴影扩展半径,其值可以是正负值,如果值为正,则整个阴影都延展扩大,反之值为负值是,则缩小。

css5.jpg

position

此参数是一个可选值,如果不设值,其默认的投影方式是外阴影;如果取其唯一值"inset",就是将外阴影变成内阴影。

css6.jpg

利用box-shadow实现特殊的效果

box-shadow可以复制一个图像,然后用spread可以改变这个复制图像的大小,正数就变大,负数就变小,下面的图形就是通过box-shadow实现的。

网上有很多一个div实现很复制的图形,一般都是用box-shadow实现的。

.container{
      background:red;
      width:10px;
      height:10px;
      margin: 10px;
      border-radius: 5px;
      box-shadow: 200px 200px 0 5px green,
                230px 200px 0 5px green,
                215px 215px 0 -3px red;
}
<div class="container"></div>

css7.jpg

clip-path

对容器进行裁剪,但是不会改变容器的大小。circle就是裁剪为一个圆形,当hover上去以后改变clip-path的区域,就可以形成一个动画。

clip-path: circle(50px at 100px 100px);

circle(50px at 100px 100px): 50px区域大小,100px 100px表示定位到图片的那个地方(x,y)

.container{
    width: 400px; 
    height: 300px; 
    border: 1px solid red; 
    background:url(./panda.jpg); 
    background-size: cover; 
    background-repeat: no-repeat;
    clip-path: circle(50px at 100px 100px);
    transition: clip-path 0.4s;
}
.container:hover{ clip-path: circle(80px at 100px 100px); }
  • 首先对容器裁剪成一个圆形
  • 当hover上去的时候把裁剪的圆变大,这样就形成了一个比较好玩的效果

除了clip-path带有的裁剪路径,我们还可以自定义:

clip-path: url(#clipPath);
<div class="container">你好,我是熊猫</div>
    <svg>
      <defs>
        <clipPath id="clipPath">
          <!-- <circle cx="60" cy="60" r="50" fill="#34538b" /> -->
          <polygon
            stroke="#979797"
            points="0.4921875 81.2070313 92.640625 81.2070313 
              121.601562 0.21875 153.648437 81.2070313 247.390625 
              80.7734375 173.394531 140.496094 200.308594 
              227.09375 121.601562 172.71875 53.4960937 
              227.09375 80.859375 140.496094"
          ></polygon>
        </clipPath>
      </defs>
    </svg>

filter

blur

给图像设置高斯模糊, 所以值越大越模糊 css41.jpg

grayscale

将图像转换为灰度图像,取值0 - 1

css42.jpg

opacity

该函数与已有的opacity属性很相似,不同之处在于通过filter,一些浏览器为了提升性能会提供硬件加速。如果叠加其他元素,那么其他元素就会透过这个元素显示出来

css44.jpg

filter还有其他一些效果,这里就不展开了