CSS 教程

查看目录版

查看原版

CSS 简介

CSS 指层叠样式表(Cascading Style Sheets),插入样式表的方法有以下3种。

如何插入样式表

  • 外部样式表 - 使用外部 .css 文件。
  • 内部样式表 - 在HTML文档头部 <head> 区域使用 <style> 元素来包含CSS。
  • 内联样式 - 在HTML元素中使用"style"属性。

样式选择器种类

  • ```html
- 多个选择器可以组合使用。

- ```css
  // "和"关系 用 ','分隔
  #myId,.myClass,p {color:red}
  // "包含关系" 用 ' '分隔(有时.class前的空格会删掉)
  #myId .myClass p

多重样式优先级

多重样式优先级顺序

下面是一份优先级逐级增加的选择器列表,其中数字 7 拥有最高的优先权:

  1. 通用选择器(*)
  2. 元素(类型)选择器
  3. 类选择器
  4. 属性选择器
  5. 伪类
  6. ID 选择器
  7. 内联样式 style
!important 规则除外

与优先级无关,会覆盖CSS中任何其他的声明不建议使用

权重计算
  • 内联样式权值 - 1000

  • ID 选择器权值 - 100

  • Class 类(伪类,属性)选择权值 - 10

  • HTML 标签(元素,伪元素)选择器 - 1

  • 注意:权值计算不能进位,比如11个class类,不能算成11*10=110,该值最大不能超过100,所以可以当做99.99来看,不能进位

下面的例子,利用选择器的权值计算,em 显示蓝色:

  <html>
  <head>
  <style type="text/css">
  #redP p {    
  /* 权值 = 100+1=101 */
  color:#F00;  /* 红色 */    
  }    
  #redP .red em {    
  /* 权值 = 100+10+1=111 */    
  color:#00F; /* 蓝色 */    
  }    
  #redP p span em {    
  /* 权值 = 100+1+1+1=103 */    
  color:#FF0;/*黄色*/    
  }    
  </style>    
  </head>    
  <body>    
  <div id="redP">   
    <p class="red">red
      <span><em>em red</em></span>    
    </p>    
    <p>red</p>    
  </div>    
  </body>   
  </html>
CSS 优先级法则
  1. 选择器都有一个权值,权值越大越优先;
  2. 权值相等时,后出现的样式表设置要 优于 先出现的样式表设置;
  3. 继承的 CSS 样式,不如后来指定的 CSS 样式;

CSS Backgrounds(背景)

背景颜色

  • css body {background-color:red}

背景图像

  • css body {background-image:url('paper.gif')}

背景图像 - 水平或垂直平铺

  • css body { background-image:url('paper.gif'); background-repeat:repeat; /* 该属性有5个值 repeat: 水平和垂直方向重复,默认值; repeat-x: 只在水平方向重复; repeat-y: 只在垂直方向重复; no-repeat: 不重复; inherit: 该属性继承自父元素; */ }

背景图像 - 固定或滚动

  • css body { background-image:url('paper.gif'); background-attachment:scroll; /* 该属性有4个值 scroll: 相对 元素 固定,在子滚动窗口中 不会 随滚动条滚动,默认值; local: 相对 元素内容 固定,在子滚动窗口中 会 随滚动条滚动; fixed: 相对 浏览器窗口 固定; inherit: 该属性继承自父元素; 实例见 myCss-bgattach.html 。 */ }

背景图像 - 位置

  • css body { background-image:url('paper.gif'); background-position: top right; /* 该属性有三种写法 写法1: top、bottom、left、right、center,另一个关键字默认为center 写法2:数字。图片左上角相对于元素左上角的x,y轴偏移量。 50px 100px: 即往右偏移50px,往下偏移100px; 写法3:百分比。类似写法2。 66% 33%: 即往右偏移66%,往下偏移33%; */ }

合并写法

  • css body {background:#ffffff url('paper.gif') no-repeat right top;}

CSS Text(文本)

文本对齐

  • css p.main {text-align:justify;} //每一行被展开为宽度相等,左、右外边距对齐

文本修饰

  • css a {text-decoration:none;} //删除下划线 h1 {text-decoration:overline} //文本上一条线 h2 {text-decoration:underline} //文本下一条线 h3 {text-decoration:line-through} //穿过文本下的一条线 p.detail {text-decoration:blink} //闪烁的文本

文本转换

  • css p.uppercase {text-transform:uppercase;} //整句大写 p.lowercase {text-transform:lowercase;} //整句小写 p.capitalize {text-transform:capitalize;} //每个单词首字母大写

文本缩进

  • css p {text-indent:50px}

文本间隔

  • css p {word-spacing:30px}

CSS Fonts(字体)

CSS 颜色(color)

CSS的颜色有三种表示方法,分别是:

  • 单词:red,blue,green之类;

  • 十六进制:按 红,绿,蓝 每种比例组合,数值大小表示对应颜色浓度;

  • RGB:按 红,绿,蓝 每种比例组合,数值大小表示对应颜色浓度;

  • p 
    {
      /* 单词 */
      background-color: red;
      /* 十六进制,可以缩写,00~FF */
      background-color: #FF0000;            //红色
      background-color: #00FF00;            //绿色
      background-color: #0000FF;            //蓝色
      background-color: #000000;            //黑色
      background-color: #FFFFFF;            //白色
      background-color: #F00;           //红色
      background-color: #0F0;           //绿色
      background-color: #00F;           //蓝色
      background-color: #000;           //黑色
      background-color: #FFF;           //白色    
      /* RGB,0~255 */
      background-color: rgb(255,0,0)        //红色
      background-color: rgb(0,255,0)        //绿色
      background-color: rgb(0,0,255)        //蓝色
      background-color: rgb(0,0,0)      //黑色
      background-color: rgb(255,255,255)        //白色
    }
    

CSS link(链接)

  • css a:link {color:#FF0000;} //未访问链接 a:visited {color:#00FF00} //已访问链接 a:hover {color:#FF00FF} //鼠标移到链接上 a:active {color:#0000FF} //鼠标单击链接 /* hover必须跟在link和visited后面 active必须跟在hover后面 */

CSS ul(列表样式)

不同的列表项标记

  • css ul.a {list-style-type:none;} /* 该属性有4个值 none: 不使用项目符号; disc: 实心圆; circle: 空心圆; square: 实心方块; */ ol.a {list-style-type:demical;} /* 该属性有5个值 decimal: 阿拉伯数字; lower-alpha: 小写英文字母; upper-alpha: 大写英文字母; lower-roman: 小写罗马数字; upper-roman: 大写罗马数字; */

列表项标记的图像

  • css ul {list-style-image:url('square.gif');}

浏览器兼容性解决方案

  • css /* 用图像表示li */ ul { list-style-type:none; padding:0px; margin:0px; } ul li{ background-image: url('square.gif'); background-repeat: no-repeat; background-position: 0px 5px; padding-left: 14px; }

列表 - 缩写属性

  • ul {
      list-style: square url('square.gif');
    }
    /* 用单个属性指定所有的列表属性,用list-style
    顺序是:
    list-style-type;
    list-style-position;
    list-style-image;
    
    另:url('square.gif') 会覆盖square的样式
    */
    

CSS Table(列表)

表格 - 折叠边框

  • css tbale { border-collapse:collapse; } table, th, td { border: 1px solid block } /* border-collapse属性有3个值 separate: 边框会被分开,默认值; collapse: 边框不会被分开; inherit: 该属性继承自父元素; */

表格 - 文字对齐

  • css /* 水平对齐 */ td { text-align:left; //center;right } /* 垂直对其 */ td { height: 50px; vertical-align: bottom; //top,middle,bottom }

CSS 盒子模型

  • Margin + Border + Padding + Content
  • border-style值:
    • none:默认无边框
    • dotted:一个点线框
    • dashed:一个虚线框
    • solid:实线边界
    • double:2个边界,2个边界的宽度和border-width的值同宽

CSS 轮廓(outline)属性

  • Border外侧的一条线

CSS Margin和Padding

CSS 尺寸

CSS Display(显示)和Visibility(可见性)

  • 2个属性都可以隐藏某个元素,不同的是:

    • display:none,隐藏后不占空间。
    • visibility:hidden,隐藏后仍占原来的空间。
  • 利用display的属性,可以改变元素的显示,即 内联元素 <==> 块元素

    • css /* 块元素==>内联元素,不换行了 */ li {display:inline} /* 内联元素==>块元素,换行了 */ span {display:block}
  • visibility 的hidden 和collapse

    • 在其他场景下,都是一样的,即隐藏 同时占据原来的空间
    • 在表格Table中,collapse 删除行列后不占空间,hidden会占空间

CSS Positioning(定位)

Static 定位

默认值,没有定位,出现在正常的流中,不会受到top,bottom,left,right影响。

Fixed 定位

/* 相对浏览器窗口是固定位置
   可以与其他元素重叠,不占空间
*/
p.pos_fixed
{
    position:fixed;
    top:30px;
    right:5px;
}

Relative 定位

/* 相对正常位置的定位
   可以与其他元素重叠,原本所占的空间不会改变
*/
h2.pos_left
{
    position:relative;
    left:-20px;
}

Absolute 定位

/* 相对最近的已定位的父元素的定位
   可以与其他元素重叠,不占空间
*/

重叠的元素

  • z-index:指定了元素的堆叠顺序,大的放前面,小的放后面。

  • 如果2个元素重叠且都没有z-index,最后定位 在HTML代码中的元素将显示在 最前面

  • img
    {
      position:absolute;
      left:0px;
      top:0px;
      z-index:-1;
    }
    

CSS Float(浮动)

  • 浮动元素会生成一个 块级框,会使元素向左或向右移动,周围的元素也会重新排列。

  • 清除浮动 - 使用 clear

  .text_line
  {
      clear:both;
  }
  /* 该元素属性有5个值:
    left: 左侧不允许浮动元素;
    right: 右侧允许浮动元素;
    both: 左右两侧不允许浮动元素;
    none: 默认值,左右两侧允许浮动值;
    inherit: 该属性继承自父元素;
  */

CSS 对齐

中心对齐,使用margin属性

  • css .center { margin-left:auto; margin-right:auto; width:70%; background-color:#b0e0e6; } /* 宽度设置成100%是没有效的 */

使用position属性设置左,右对齐

  • css .right { position:absolute; right:0px; width:300px; background-color:#b0e0e6; }

使用float属性设置左,右对齐

  • css .right { float:right; width:300px; background-color:#b0e0e6; }

使用Padding设置垂直居中对齐

  • css /* 头部使用Padding,上下间距设置成一样高 */ .center { padding: 70px 0; border: 1px solid green; text-align: center; }

CSS 组合选择符

  • CSS3 中包含了四种组合方式:
    • 后代选取器(以空格分隔)
    • 子元素选择器(以大于号分隔)
    • 相邻兄弟选择器(以加号分隔)
    • 普通兄弟选择器(以波浪号分隔)

后代选取器

  • 匹配所有指定元素的后代元素

  • div p 
    {
      background-color: yellow;
    }
    

子元素选择器

  • 只能选择某元素子元素的元素(只能1层关系的子元素)

  • div>p
    {
      background-color: yellow;
    }
    

相邻兄弟选择器

  • 选择紧连在另一元素后的 一个 元素,且 二者具有相同的父元素

  • div+p
    {
      background-color: yellow;
    }
    

普通兄弟选择器

  • 选择 所有 指定元素的相邻兄弟元素,不需要 具有相同的父元素 。

  • div~p
    {
      background-color: yellow;
    }
    

CSS 伪类和伪元素

伪类 - 简介

  • CSS 伪类是用来添加一些选择器的特殊效果。
  • 由于状态的变化是非静态的,所以元素达到一个特定状态时,它可能得到一个 伪类 的样式;但它状态改变时,又会失去这个样式。

伪类 - 语法

  • css /* 伪类的语法 */ selector:pseudo-class {property:value;} /* CSS类也可以使用伪类*/ selector.class:pseudo-class {property:value}

伪类 - 常用

  • css a:link {color:#FF0000;} /* 未访问的链接 */ a:visited {color:#00FF00;} /* 已访问的链接 */ a:hover {color:#FF00FF;} /* 鼠标划过链接 */ a:active {color:#0000FF;} /* 已选中的链接 */
  • html <!-- 伪类可以与 CSS 类配合使用 --> a.red:visited {color:#FF0000;} <a class="red" href="css-syntax.html">CSS Syntax</a>
  • css /* 匹配任何元素的第一个子元素的 <p> 元素 */ p:first-child {color:blue;} /* 选择元素输入后具有焦点 */ input:focus {background-color:yellow;} /* 在每个元素之前插入内容 */ p:before {content:"Read this: "} /* 在每个元素之后插入内容 */ p:after {content:" Finished."}

CSS 导航栏

水平导航栏

  • <li> 元素和 <a> 元素组合,生成水平导航栏。

  • 方式1:<li> 转换成 内联元素 ,缺点是 <a> 标签的长度不能设定。

  • li {display:inline;}
    
  • 方法2:<a> 元素转换成 元素,然后使用 float 水平排列,优点是 <a> 标签的长度可以设定。

  • li {float:left;}
    a 
    {
      display:block;
      width:60px;
    }
    

CSS 下拉菜单

<style>
/* 下拉按钮样式 */
.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}

/* 容器 <div> - 需要定位下拉内容 */
.dropdown {
    position: relative;
    display: inline-block;
}

/* 下拉内容 (默认隐藏) */
.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

/* 下拉菜单的链接 */
.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}

/* 鼠标移上去后修改下拉菜单链接颜色 */
.dropdown-content a:hover {background-color: #f1f1f1}

/* 在鼠标移上去后显示下拉菜单 */
.dropdown:hover .dropdown-content {
    display: block;
}

/* 当下拉内容显示后修改下拉按钮的背景颜色 */
.dropdown:hover .dropbtn {
    background-color: #3e8e41;
}
</style>

<div class="dropdown">
  <button class="dropbtn">下拉菜单</button>
  <div class="dropdown-content">
    <a href="#">W3Cschool教程 1</a>
    <a href="#">W3Cschool教程 2</a>
    <a href="#">W3Cschool教程 3</a>
  </div>
</div>

CSS 图片廊

  • 使用 floathover 属性。

  • <html>
    <head>
    <style>
    div.img
    {
    margin:2px;
    border:1px solid #0000ff;
    height:auto;
    width:auto;
    float:left;
    text-align:center;
    }
    div.img img
    {
    display:inline;
    margin:3px;
    border:1px solid #ffffff;
    }
    div.img a:hover img
    {
    border:1px solid #0000ff;
    }
    div.desc
    {
    text-align:center;
    font-weight:normal;
    width:120px;
    margin:2px;
    }
    </style>
    </head>
    <body>
    

Klematis
Add a description of the image here
Klematis
Add a description of the image here
Klematis
Add a description of the image here
Klematis
Add a description of the image here

```

CSS 图片透明

  • css /* 使用opacity来显示透明度; 范围0~1,数字越小越透明; IE8和早期版本使用滤镜:alpha(opacity=x),x取值0-100,值越低元素越透明; 利用:hover属性改变透明度,效果更好 */ img { opacity:0.4; filter:alpha(opacity=40); /* For IE8 and earlier */ }

CSS 图片拼合技术

  • 加载时加载一张大图片,单个图像的集合。使用时截图图像中的单个图片使用。

  • img.home
    {
      width:46px;
      height:44px;
      background:url('img_navsprites.gif') 0 0;
    }
    img.next
    {
      width:43px;
      height:44px;
      background:url('img_navsprites.gif') -91px 0;
    }
    

CSS 媒体类型

  • 媒体类型允许你指定文件将如何在不同媒体呈现。

  • @media规则允许在相同样式表 为不同媒体 设置 不同的样式

  • <html>
    <head>
    <style>
    @media screen
    {
    p.test {font-family:verdana,sans-serif;font-size:14px;}
    }
    @media print
    {
    p.test {font-family:times,serif;font-size:10px;}
    }
    @media screen,print
    {
    p.test {font-weight:bold;}
    }
    </style>
    </head>
    

.... ```

  • 其他媒体类型。

| 媒体类型 | 描述 | | ---------- | ------------------------------------------------------------ | | all | 用于所有的媒体设备 | | aural | 已废弃。用于语音和音频合成器 | | braille | 已废弃。用于盲人用点字法触觉回馈设备 | | embossed | 已废弃。用于分页的盲人用点字法打印机 | | handheld | 已废弃。用于小的手持的设备 | | print | 用于打印机和打印预览 | | projection | 已废弃。用于投影设备方案展示,比如幻灯片 | | screen | 用于电脑显示器,平板电脑,智能手机等。 | | tty | 已废弃。用于使用固定密度字母栅格的媒体,比如电传打字机和终端 | | tv | 已废弃。用于电视机类型的设备 |

CSS 响应式设计

Viewport

  • viewport 是用户网页的可视区域,中文叫 视区

  • viewport 常用标签如下:

    • width:浏览器宽度,控制 viewport 的大小。
    • device-width:设备宽度。
    • height:和 width 对应,浏览器高度。
    • initial-scale:初始缩放比例,也是当页面第一次 load 的时候缩放比例。
    • maximum-scale:允许用户缩放到的最大比例。
    • minimum-scale:允许用户缩放到的最小比例。
    • user-scalable:用户是否可以手动缩放。
    • html <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head>

网格视图

简介

将一个页面分成12列,在浏览器窗口大小调整时会自动伸缩。

创建响应式网格视图

  • 确保所有元素的 宽度和高度 包含 边框

    • { box-sizing: border-box; } /* 该属性有3个值 content-box: 元素的宽高,只包含content,不包含padding,border,margin,outline等。 border-box: 元素的宽高,包含content,padding,border,不包含margin,outline等。 默认是content-box。某些需求下使用border-box,更符合使用习惯(不需要担心padding,border导致的元素变形等) */ ```
  • css /* class名包含AA的 class */ [class*="AA"] { color: blue; } /* class名以AA开头的 class */ [class^="AA"] { color: red; }
  • 实例见 myCss-gridview.html 文件

  • <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Gridview</title>
      <style>
          * {
              box-sizing: border-box;
          }
          .row:after {
              content: "";
              clear: both;
              display: block;
          }
          [class*="col-"] {
              float: left;
              padding: 15px;
          }
    
          .col-1 {width:8.33%;}
          .col-2 {width:16.66%;}
          .col-3 {width:25%;}
          .col-4 {width:33.33%;}
          .col-5 {width:41.66%;}
          .col-6 {width:50%;}
          .col-7 {width:58.33%;}
          .col-8 {width:66.66%;}
          .col-9 {width:75%;}
          .col-10 {width:83.33%;}
          .col-11 {width:91.66%;}
          .col-12 {width:100%;}
    
          html {
              font-family: "Lucida Sans", sans-serif;
          }
          .header {
              background-color: #9933cc;
              color: #ffffff;
              padding: 15px;
          }
          .menu ul {
              list-style-type: none;
              margin: 0px;
              padding: 0px;
          }
          .menu li {
              padding: 8px;
              margin-bottom: 7px;
              background-color: #33b5e5;
              color: #ffffff;
              box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
          }
          .menu li:hover {
              background-color: #0099cc;
          }
    
      </style>
    </head>
    <body>
    <div class="header">
      <h1>Chania</h1>
    </div>
    

The City

Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.

Resize the browser window to see how the content respond to the resizing.

```

媒体查询

媒体查询

  • 使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。

  • /* 如果浏览器窗口小于 500px,背景将变成浅蓝色 */
    @media only screen and (max-width: 500px) {
      background-color: lightblue;
    }
    

添加断点

  • 不同尺寸 的设备,设计 不同的样式

  • /* 当屏幕(浏览器窗口)小于 768px,每一列的宽度是100% */
    /* For desktop: */
    .col-1 {width: 8.33%;}
    .col-2 {width: 16.66%;}
    .col-3 {width: 25%;}
    .col-4 {width: 33.33%;}
    .col-5 {width: 41.66%;}
    .col-6 {width: 50%;}
    .col-7 {width: 58.33%;}
    .col-8 {width: 66.66%;}
    .col-9 {width: 75%;}
    .col-10 {width: 83.33%;}
    .col-11 {width: 91.66%;}
    .col-12 {width: 100%;}
    

@media only screen and (max-width: 768px) { /* For mobile phones: / [class="col-"] { width: 100%; } } ```

  • 实例见 myCss-media.html 文件

  • <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>media</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <style>
          * {
              box-sizing: border-box;
          }
          video {
              max-width: 100%;
              height: auto;
          }
          .row:after {
              content: "";
              clear: both;
              display: block;
          }
          [class*="col-"] {
              width: 100%;
              float: left;
              padding: 15px;
          }
    
          /* 大于600px,小于768px,平板电脑 */
          @media only screen and (min-width: 600px) {
              .col-s-1 {width: 8.33%;}
              .col-s-2 {width: 16.66%;}
              .col-s-3 {width: 25%;}
              .col-s-4 {width: 33.33%;}
              .col-s-5 {width: 41.66%;}
              .col-s-6 {width: 50%;}
              .col-s-7 {width: 58.33%;}
              .col-s-8 {width: 66.66%;}
              .col-s-9 {width: 75%;}
              .col-s-10 {width: 83.33%;}
              .col-s-11 {width: 91.66%;}
              .col-s-12 {width: 100%;}
              body {color: blue}
          }
    
          /* 大于768px,电脑屏幕 */
          @media only screen and (min-width: 768px) {
              .col-1 {width: 8.33%;}
              .col-2 {width: 16.66%;}
              .col-3 {width: 25%;}
              .col-4 {width: 33.33%;}
              .col-5 {width: 41.66%;}
              .col-6 {width: 50%;}
              .col-7 {width: 58.33%;}
              .col-8 {width: 66.66%;}
              .col-9 {width: 75%;}
              .col-10 {width: 83.33%;}
              .col-11 {width: 91.66%;}
              .col-12 {width: 100%;}
              body {color: red}
          }
    
          html {
              font-family: "Lucida Sans", sans-serif;
          }
          .header {
              background-color: #9933cc;
              color: #ffffff;
              padding: 15px;
          }
          .menu ul {
              list-style-type: none;
              margin: 0px;
              padding: 0px;
          }
          .menu li {
              padding: 8px;
              margin-bottom: 7px;
              background-color: #33b5e5;
              color: #ffffff;
              box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
          }
          .menu li:hover {
              background-color: #0099cc;
          }
          .aside {
              background-color: #33b5e5;
              padding: 15px;
              color: #ffffff;
              text-align: center;
              font-size: 14px;
              box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
          }
          .footer p {
              height: 70px;
              background-color: #0099cc;
              color: #ffffff;
              text-align: center;
              font-size: 12px;
              padding: 25px;
          }
      </style>
    </head>
    <body>
    <div class="header">
      <h1>Chania</h1>
    </div>
    <div class="row">
      <div class="col-3 col-s-3 menu">
          <ul>
              <li>The Flight</li>
              <li>The City</li>
              <li>The Island</li>
              <li>The Food</li>
          </ul>
      </div>
    
      <div class="col-6 col-s-9">
          <h1>The City</h1>
          <p>Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the
              old town and the modern city.</p>
          <video>
              <source src="https://www.w3cschool.cn/statics/demosource/mov_bbb.mp4" type="video/mp4">
              <source src="https://www.w3cschool.cn/statics/demosource/mov_bbb.ogg" type="video/ogg">
              Your browser does not support HTML5 video.
          </video>
      </div>
    
      <div class="col-3 col-s-12">
          <div class="aside">
              <h2>What?</h2>
              <p>Chania is a city on the island of Crete.</p>
              <h2>Where?</h2>
              <p>Crete is a Greek island in the Mediterranean Sea.</p>
              <h2>How?</h2>
              <p>You can reach Chania airport from all over Europe.</p>
          </div>
      </div>
    </div>
    <div class="footer">
      <p>Resize the browser window to see how the content respond to the resizing.</p>
    </div>
    </body>
    </html>
    

方向:横屏/竖屏

语法

  • css orientation: portrait | landscape
  • portrait: 竖屏,指定输出设备中的页面 可见区域高度 大于或等于 宽度

  • landscape“:横屏,除 portrait 外,都是 landscape

实例

  • css @media only screen and (orientation: landscape) { body { background-color: lightblue; } h1 { color: red; } }

图片

图片

  • width:100% - 根据上下范围自动实现响应式功能,可能会比原始图片更大。

  • img {
      width: 100%;
      height: auto;
    }
    
  • max-width:100% - 最大值100%,永远 不会大于 其原始大小。

  • img {
      max-width: 100%;
      height: auto;
    }
    

背景图片

  • background-size 属性有4个值,分别是 lengthpercentagecovercontain

  • /* length:以固定长度来设置,
    如设置1个值,另一个为auto,
    图像可能变形
    */
    div {
      background-image: url('paper.gif');
      background-repeat: no-repeat;
      background-size: 500px 200px;
    }
    
  • css /* percentage: 以父元素的百分比来设置, 如设置1个值,另一个为auto, 图像可能变形 */ div { background-image: url('paper.gif'); background-repeat: no-repeat; background-size: 80% 50%; }
  • css /* cover: 按比例把图像伸缩, 直至背景图像完全覆盖背景区域 图像不变形 */ div { background-image: url('paper.gif'); background-repeat: no-repeat; background-size: cover; }
  • css /* contain: 按比例把图像伸缩 直至背景图像自适应内容区域(背景图像的一边填满内容区域) 图像不变形 */ div { width: 100%; height: auto; background-image: url('paper.gif'); background-repeat: no-repeat; background-size: contain; }

为不同设备添加背景图片

  • 使用 @media 来确定不同设备,进而选择不同的图片或格式。

  • /* For width smaller than 400px: */
    body {
      background-image: url('img_smallflowers.jpg');
    }
    

/* For 浏览器 width 400px and larger: */ @media only screen and (min-width: 400px) { body { background-image: url('img_flowers.jpg'); } }

/* For 设备 width 400px and larger: */ @media only screen and (min-device-width: 400px) { body { background-image: url('img_flowers.jpg'); } } ```

HTML5 <picture> 元素

  • 类似于 <video> 和 <audio> 元素,可以设置不同的资源,设置的第一个资源为首选使用。

  • <picture>
    <source srcset="img_smallflowers.jpg" media="(max-width: 400px)">
      <source srcset="img_flowers.jpg">
      <img src="img_flowers.jpg" alt="Flowers">
    </picture>
    
  • srcset 属性是必须的,定义了图片资源。

  • media 属性是可选的,定义了媒体查询。

视频

  • 图片 类似,使用 widthmax-width 来控制元素大小。

框架

  • 响应式 Web 设计框架 Bootstrap

  • <head>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css">
      <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
      <script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    </head>
    

CSS 拓展阅读