《响应式Web设计:HTML5和CSS3实战(第2版)》07章 - 学习笔记

响应式Web设计:HTML5和CSS3实战(第2版)

第七章 SVG与响应式Web设计

  • SVG可伸缩矢量图是一种不会过时的、能够轻松解决多屏幕分辨率问题的技术
  • SVG的大小比位图要小很多

7.1 SVG特点

  • SVG是XML中用于描述二维图形的语言
  • SVG仅仅保存矢量点

7.2 SVG的关键点(实现方法)

  • 根元素:宽、高和视口
    • viewbox定义了SVG中所有形状都需要遵循的坐标系
    • viewbox属性可以让你伸缩图片

7.3 SVG制作工具

  • Adobe Illustrator
  • Sketch
  • InkScape(免费开源)

7.4 Web中插入SVG

  • 使用img标签
  • 使用object标签
    • 建议不要省略data和type属性
  • 作为背景图
    • 对于老旧机型可以有后备策略
  .item{
      background: url('aa.png') no-repeat;
      background: url('aa.svg') left top / auto no-repeat;
  }
  • Modernizer对不支持svg的浏览器会有“no-svg”的类
  • data URI的介绍
    • 将url的图片地址换为一串“统一资源标识符”
    • data URI有很多编码方式,建议不要使用base64格式,因为它对SVG的压缩不如text好
    • 推荐工具:Iconizr
  • 如果想为它加上动画效果,或者使用js来插入数据,最好还是把SVG内联到HTML上

7.5 内联SVG

  • 由于SVG是XML文档,所以可以直接插入到HTML中

    • 如果删掉宽高,SVG就会自动缩放,充满容器
  • 利用符号复用图形对象

    • defs元素中的symbol元素是定义一个形状以供后期使用
    • 后文中可以用use标签来将已经定义好的图形对象使用起来,通过xlink属性来选择引入的对象
  • 根据上下文改变svg颜色

  .svg{
      fill: #f90;
  }
  • 复用外部图形对象资源
    • <use xlink:href="defs.svg#icon-home"></use>
    • 意为链接到外部defs.svg文件,选用其中id为icon-home的图形
    • 好处为
      • 可以为浏览器缓存
      • 防止代码中有一堆svg符号
    • IE9-11不支持,可以用"svg for everybody"的ployfill脚本解决限制
  • 浏览器兼容性
    • IE9-11中无法引用外部svg资源
    • IE中无论采用什么方式插入svg,都会把外部样式表的样式应用到svg上
      • 其他浏览器都是只有在object标签引入svg时才会应用那些样式
    • IE不允许css为svg添加动画,只能通过JS为svg添加动画

7.6 为svg添加样式

  • 外部样式表
    • 在svg标签前加<?xml-stylesheet href="styles.css" type="text/css"?>
  <?xml-stylesheet href="styles.css" type="text/css"?> 
  <svg width="198" height="188" viewBox="0 0 198 188" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  • 内部样式表
  <defs>
      <style type="text/css"> 
          <![CDATA[ 
              #star_Path { 
                  stroke: red; 
              } 
          ]]> 
      </style> 
  </defs> 
 + 上例代码中的stroke属性。它并不是CSS属性,而是SVG属性。
 + 在样式中可以使用不少的SVG属性(无论是内联样式抑或外部样式表)。例如
     * 对于SVG,你不用指background-color,而是需要定义fill。
     * 你无需定义border,而是定义stroke-width。
  • 用CSS为SVG添加动画
    • 注意SVG上的transform-origin被设置为50% 50%。这是因为与CSS不同,SVG默认的transform-origin不是50% 50%(元素的正中间),而是0 0(元素的左上角)。如果不指定该属性,星形会围绕左上角进行旋转。
  <div class="wrapper">
      <svg width="198" height="188" viewBox="0 0 220 200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
          <title>Star 1</title>
          <defs>
              <style type="text/css">
              <![CDATA[ @keyframes 
                  spin {
                      0% {
                          transform: rotate(0deg);
                      }
                      100% {
                          transform: rotate(360deg);
                      }
                  }
                  .star_Wrapper {
                      animation: spin 2s 1s;
                      transform-origin: 50% 50%;
                  }
                  .wrapper {
                      padding: 2rem;
                      margin: 2rem;
                  }
              ]]>
              </style>
              <g id="shape">
                  <path fill="#14805e" d="M50 50h50v50H50z" />
                  <circle fill="#ebebeb" cx="50" cy="50" r="50" />
              </g>
          </defs>
          <g class="star_Wrapper" fill="none" fill-rule="evenodd">
              <path id="star_Path" stroke="#333" stroke-width="3" fill="#F8E81C" d="M99 154l-58.78 30.902 11.227-65.45L3.894 73.097l65.717-9.55L99 4l29.39 59.55 65.716 9.548-47.553 46.353 11.226 65.453z" />
          </g>
      </svg>
  </div>
  • 使用JavaScript添加SVG动画
    • 当一个SVG是通过内联或者object标签的方式插入到页面时,我们可以通过JavaScript直接或者间接地控制它。
    • 间接的意思是指我可以通过JavaScript来改变它或者它的父类的class,从而触发动画效果。
  svg { 
  /* 没有动画效果*/ 
  } 
  .added-with-js svg { 
  /* 动画*/ 
  }

7.9 优化SVG

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容