项目模仿

项目经验总结

  1. 项目结构
    1. 首页文件:index.html,一个网站总有一个首页,输入网址跳转到的第一个页面
    2. 新建css/fonts/images/js 文件夹目录
  2. 网站的结构
    1. 头部(header):LOGO、导航、搜索框、登录注册、Slogan
    2. 内容(main):核心内容、产品内容
    3. 尾部(footer):有情连接、网站备案、版权信息、其他
  3. 初始化css文件
    1. 新建一个reset.css文件在css文件夹中
      1. 用于设置CSS Reset
      2. 对浏览器的一些默认样式进行重置
      3. 百度搜索CSS Rest,可以查到很多网站的reset
    2. 新建一个style.css文件在css文件夹中:编写页面样式
  4. 常见开发经验
    1. 不用padding-left、right,用固定宽度 pic

      1. 父元素距离左右内容都有一个间距,那么是不是用的padding-left、right呢?
      2. 不是,内部再封装一个子元素,并且将子元素宽度固定g-weight
      3. 效果:
        1. 当用户拉伸<g-weight,会覆盖,防止内部自动伸缩挤压变形
        2. 当用户拉伸>g-weight,内容居中显示
    2. 没有设置宽度的盒子,设置了padding不会撑开盒子

       //不会撑开盒子course-bd
       .course-bd {
           padding: 0 15px;
       }
      
  5. CSS代码规范
    1. 省略小于1的小数前面的0(例如.5 代替 0.5)
    2. 对于以逗号分隔的属性值,每个逗号后面都应该插入一个空格(例如box-shadow)
    3. 不要在 rgb()、rgba()值的内部的逗号后面插入空格(这样利于从多个属性值中区分多个颜色值), 举例:rgba(0,0,0,.2);
    4. 并集选择器,建议每个每个选择器独立一行
    5. 样式的建议编写顺序:定位、盒子、文本、其他
      1. 定位布局: display / position / float / clear / visibility / overflow(建议 display 第一个写,毕竟关系到模式)
      2. 盒子模型:width / height / margin / padding / border / background
      3. 文本属性:color / font / text-decoration / text-align / vertical-align / white-space / break-word
      4. 其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient … 定位、盒子模型、文字、其他
       .jdc {
           //定位布局
           display: block;
           position: relative;
           float: left;
           //盒子模型
           width: 100px;
           height: 100px;
           margin: 0 10px;
           padding: 20px 0;
                  
           //文本
           font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
           color: #333;
           //CSS3
           //rgba透明是CSS3属性支持
           background: rgba(0,0,0,.5);
           -webkit-border-radius: 10px;
           -moz-border-radius: 10px;
           -o-border-radius: 10px;
           -ms-border-radius: 10px;
           border-radius: 10px;
       }
      

标签的使用经验

  1. h标签的使用
    1. 为何有些地方一定要用h标签?
    2. 把网页看成是一篇文章,因此必须有一级标题、二级标题。。。。
    3. 目的是为了让搜索引擎便于搜索
    4. 注意,如果有些标题仅仅是一张图片,那也要用h标签,然后标签中的文字隐藏掉

       <!-- 输入“网易严选”目的是为了让搜索引擎搜索到,
       然后把a标签font-size属性设置为0隐藏显示 -->
       <h1 class="logo cmp"><a href="#">网易严选</a></h1>
      
    5. 用官方工具查看一个网页的文章标题结构
      1. 地址:https://validator.w3.org/
      2. 里面有认证选择的项目
        1. Validate by RUL: 验证远程网页
        2. Validate by File Upload: 验证通过上传文件
        3. Validate by direct input: 验证通过直接输入html代码
      3. 选择Validate by File Upload
        1. 上传自己写的html文件
        2. 点击More Options,选择show Outline
        3. 点击check
        4. 然后再次勾选how Outline
        5. 再次次上传html文件
        6. 点击check即可
        7. 展示出当前网页的所有标题结构

        pic

      4. 总结:一遍网页也要当做一片文章一样来排版,这样就能够分清楚那些地方使用h标签了
  2. a标签的使用
    1. 如何判断一个网页哪些地方使用a标签?用鼠标放上去,显示小手,可以点击,一般是就是a标签
    2. 经常使用
      1. a标签包裹一张img标签,特点:鼠标挪到图片上显示小手
      2. 列表ul>li里面包含a标签

布局经验

布局流程

  1. 必须确定页面的版心(可视区)宽度,我们测量可得知。
    1. 就是一个网页一定有一个可视区固定宽度,无论窗口怎样拖放,宽度固定不变,这个宽度展示的区域叫版心。
    2. 比如一个网页的版心:每个版心都要水平居中对齐

       .w {
           width: 1200px;
           margin: auto;
       }
      
  2. 分析页面中的行模块,以及每个行模块中的列模块。其实页面布局,就是一行行罗列而成
  3. 制作HTML结构。我们还是遵循,先有结构,后有样式的原则。结构永远最重要。
  4. 然后开始运用盒子模型的原理,通过DIV+CSS布局来控制网页的各个模块。

多个行内标签水平一定间距排列并且在父元素居中问题

  1. 一般情况下元素水平排布布局,用float布局,但是float只能左、右浮动,然后设置元素之间的margin,不能在父元素居中
  2. 标准流行内标签可以实现,但是不能解决行内标签默认间距问题
    1. 给父元素设置text-align:center即可
    2. 但是行内标签的默认间距,怎么解决呢?
  3. 除了之前讲过的办法,还可以通过js来实现

     <!-- 引入jQuery -->
     <script src="js/jquery-3.2.1.min.js"></script>
     <!-- 自定义函数 -->
     <script>
         function removeSpace(){
             for(var i in arguments){
                 $(arguments[i]).contents().filter(function(){
                     return this.nodeType === 3
                 }).remove();
             }
         };
         $(function(){
             // 传入指向父元素的选择器
             removeSpace('.slider .page-list', '.product .attrs');
         });
     </script>
    

块级元素(div)的子元素设置margin-right超出父元素问题

  1. 场景

     span {
         display: inline-block;
     }
        
     <div class="div1">
         <div class="div2">
             <span></span>
             <span></span>
             <span></span>
             <span></span>
         </div>
     </div>
    
    1. div1宽度为1090,div2宽度填充div1, 内部有4个子元素span,每个宽度为265,则剩余宽度为1090-265*4 = 30
    2. 如果此时给每个子元素设置margin-right:10px;,则子元素总宽度为 (265+10)*4 = 1100>1090,那么第4个子元素就会换到下一行显示了, 那么如何才能让第4个子元素不换行显示呢?
  2. 解决办法
    1. 方法1:给第4个子元素设置一个class,然后单独设置

       .last {
           margin-right:0;
       }
      
    2. 方法2:(重要!!!

      1. 给div2设置margin-right:-10px;
      2. 这样等于给div2加宽了10px
      3. 因为标准流布局公式:标准流块级、非替换元素

         包含块宽度= margin-left + padding-left +width + padding-right + margin-right
        
  3. 计算包含块的宽度公式
    1. 标准流块级、非替换元素

       包含块宽度= margin-left +border-left-width + padding-left +width + padding-right + border-right-width + margin-right
      
    2. 绝对定位的非替换元素

       包含块宽度= left + margin-left +border-left-width + padding-left +width + padding-right + border-right-width + margin-right + right
      

浏览器私有前缀

  1. 有时候可能会看到有些CSS属性名前面带有:-o-、-xv-、-ms-、mso-、-moz-、-webkit-

     -o-animation-duration: 2s;
     mso-background:red;
     -webkit-background-clip: border-box;
     -moz-background-size: contain;
     -ms-word-wrap: normal;
    
  2. 上述前缀叫做浏览器私有前缀,只有对应的浏览器才能解析使用
    1. -o-、-xv-:Opera等
    2. -ms-、mso-:IE等
    3. -moz-:Firefox等
    4. -webkit-:Safari、Chrome等
  3. 官方文档给出的专业术语叫做:vendor-specific extensions(供应商特定扩展)
  4. 为何会有浏览器私有前缀?
    1. W3C提出的某项新技术(比如columns),如果想要成为W3C正式标准,需要经过复杂、漫长的审查流程,有些浏览器供应商不愿等正式标准发布,觉得columns技术已成熟,就会在浏览器中添加支持columns,为了防止W3C以后发布正式标准时变更名字,就加上一个浏览器私有前缀,比如-moz-columns,等到W3C发布正式标准,再让新版本浏览器直接支持使用columns(确定正式名字是columns),不用再加上浏览器私有前缀
    2. 最终结果:旧版本浏览器使用-moz- columns,新版本浏览器使用columns。新旧版本浏览器都能够支持这个新技术,所以说,浏览器私有前缀是是浏览器对新CSS属性的一种提前支持
  5. 浏览器的1x/2x图片适配

     -moz-image-set(url("1x图片路径") 1x,url("2x图片路径") 2x);
     -ms-image-set(url("1x图片路径") 1x,url("2x图片路径") 2x)
     -o-image-set(url("1x图片路径") 1x,url("2x图片路径") 2x)
     -webkit-image-set(url("1x图片路径") 1x,url("2x图片路径") 2x)
    
    1. 浏览器会根据当前PC屏幕的像素来自动选择用1x、2x图片

网站优化三大标签

  1. SEO是由英文Search Engine Optimization缩写而来, 中文意译为“搜索引擎优化”!
  2. 常见的搜索引擎,比如百度,谷歌,雅虎,搜狗等等..
  3. SEO是指通过对网站进行站内优化、网站结构调整、网站内容建设、网站代码优化等和站外优化,从而提高网站的关键词排名以及公司产品的曝光度。 简单的说就是,把产品做好,搜索引擎就会介绍客户来。

网页title 标题

  1. title具有不可替代性,是我们的内页第一个重要标签,是搜索引擎了解网页的入口,和对网页主题归属的最佳判断点。
  2. 建议:首页标题:网站名(产品名)- 网站的介绍
  3. 例如:
    1. 品优购-综合网购首选-正品低价、品质保障、配送及时、轻松购物!
    2. 小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站
  4. 标题长度有要求
    1. 谷歌:小于35个中文
    2. 百度:小于28个中文

Description 网站说明

  1. 对于关键词的作用明显降低,但由于很多搜索引擎,仍然大量采用网页的MATA标签中描述部分作为搜索结果的“内容摘要”。 就是简要说明我们网站的主要做什么的。
  2. 我们提倡,Description作为网站的总体业务和主题概括,多采用“我们是…”“我们提供…”“×××网作为…”“电话:010…”之类语句。
  3. 品优购网:

     <meta name="description" content="品优购JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!" />
    
  4. 注意点:
    1. 描述中出现关键词,与正文内容相关,这部分内容是给人看的,所以要写的很详细,让人感兴趣, 吸引用户点击
    2. 同样遵循简短原则,字符数含空格在内不要超过 120 个汉字。
    3. 补充在 title 和 keywords 中未能充分表述的说明.
    4. 用英文逗号 关键词1,关键词2
     <meta name="description" content="小米商城直营小米公司旗下所有产品,囊括小米手机系列小米MIX、小米Note 2,红米手机系列红米Note 4、红米4,智能硬件,配件及小米生活周边,同时提供小米客户服务及售后支持。" />
    

Keywords 关键字

  1. Keywords是页面关键词,是搜索引擎关注点之一。Keywords应该限制在6~8个关键词左右,电商类网站可以多 少许。
  2. 品优购网:

     <meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,品优购" />
    
  3. 小米网

     <meta name="keywords" content="小米,小米6,红米Note4,小米MIX,小米商城" />
    

总结

  1. 我们的网页要做的优秀,符合搜索引擎的要求,才可以让搜索引擎优先显示我们的网页。所以我们的网站要做很多的优化, 其中就有这三大标签。
  2. 一般情况下,三大标签里面的优化词,都是专门的优化人员写的,我们大概了解一下规范就可以了。
  3. 我们的主要任务是,能写出这三大标签, 然后把优化人员给我们的内容,添加到里面

字体图标

  1. 图片是有诸多优点的,但是缺点很明显,比如图片不但增加了总文件的大小,还增加了很多额外的”http请求”,这都会大大降低网页的性能
  2. 更重要的是图片不能很好的进行“缩放”,因为图片放大和缩小会失真。
  3. 字体图标优点
    1. 可以做出跟图片一样可以做的事情,改变透明度、旋转度,等..
    2. 但是本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果等等…
    3. 本身体积更小,但携带的信息并没有削减。
    4. 几乎支持所有的浏览器
    5. 移动端设备必备
  4. 字体图标使用流程
    1. UI人员设计字体图标(svg格式)
    2. 前端人员上传生成兼容性字体文件包
    3. 前端人员下载兼容性文件包到本地
    4. 把字体文件包引入到HTML页面中

UI人员设计字体图标

  1. 在 illustrator 或 Sketch 这类矢量图形软件里创建 icon图标,之后保存为svg格式,然后给我们前端人员
  2. 如果图标是大众的,网上本来就有的,可以直接执行第3步

上传生成字体包

  1. UI设计人员给我们svg文件,我们需要转换成我们页面能使用的字体文件, 而且需要生成的是兼容性的适合各个浏览器的。
  2. 推荐网站:
    1. icomoon字库 (最全,常用)
      1. IcoMoon成立于2011年,推出的第一个自定义图标字体生成器,它允许用户选择他们所需要的图标,使它们成一字型。 内容种类繁多,非常全面,唯一的遗憾是国外服务器,打开网速较慢。
    2. 阿里icon font字库
      1. 这个是阿里巴巴M2UX的一个icon font字体图标字库,包含了淘宝图标库和阿里妈妈图标库。可以使用AI制作图标上传生成。

下载兼容字体包(这里使用的是icomoon)

  1. 上面2个网站上既可以将自己自作的svg上传生成字体图标,然后下载,也可以直接搜索然后下载。
  2. 下载后的文件夹解压后打开内部有个fonts文件夹
  3. 注意: 下载的压缩包要保存,以后还会用到

字体引入到HTML

  1. 首先把 fonts文件夹放入我们项目根目录下 。
  2. html标签内里面添加结构
  3. 在样式里面声明字体: 告诉别人我们自己定义的字体(一定注意字体文件路径的问题)
  4. 给盒子使用字体
  5. 代码举例:

     <!DOCTYPE html>
     <!--<html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>Document</title>
         <style>
             //定义字体
             @font-face {
                 /*1. 这个字体名称要注意 icomoon*/
                 font-family: 'icomoon';
                 /*2. 一定要注意路径的问题*/
                 src:  url('fonts/icomoon.eot?7kkyc2');
                 src:  url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
                 url('fonts/icomoon.ttf?7kkyc2') format('truetype'),
                 url('fonts/icomoon.woff?7kkyc2') format('woff'),
                 url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
                 font-weight: normal;
                 font-style: normal;
             }
             span,
             div,
             strong {
                 //使用字体
                 font-family: 'icomoon';
                 font-size: 50px;
                 color: red;
             }
         </style>
     </head>
     <body>
         <!--注意:这个标签中的内容都是在下载的字体demo.html中复制过来的-->
         <span>  </span>
         <div>  </div>
         <strong>  </strong>
     </body>
     </html>-->
    

追加字体图标

  1. 如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标,但是原来的不能删除,继续使用,此时我们需要这样做
  2. 把压缩包里面的selection.json 从新上传,然后,选中自己想要新的图标,从新下载压缩包,替换原来文件即可。
    1. 打开icomoon网站->点击import Icons->选择selection.json上传,然后选择新加入的字体,重新下载替换即可
    2. selection.json就是选中字体的记录

拓展@常见字体格式

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

项目的logo 优化

  1. logo 里面首先放一个 h1 标签 ,目的是为了提权,告诉搜索引擎,这个地方很重要
  2. h1里面在放一个连接,可以返回首页的,给连接一个大小和logo的背景图片
  3. 连接里面要放文字(网站名称),为了搜索引擎收录我们。但是文字不要显示出来
    1. 要用 text-indent 移到盒子外面 (text-indent: -9999px) 然后overflow:hidden 淘宝的做法
    2. 直接给font-size: 0; 就看不到文字了, 京东的做法。
  4. 最后给 连接一个 title 这样鼠标放到logo 上, 就可以看到提示文字了

     <div class="logo">
         <h1>
             <a href="index.html" title="品优购">品优购</a>
         </h1>
     </div>
        
     .header .logo {
         position: absolute;
         left: 0;
         top: 25px;
         width: 175px;
         height: 56px;
         /* background-color: #0f0; */
     }
     .logo a {
         display: block;
         width: 175px;
         height: 56px;
         background: url(../img/logo.png) no-repeat;
         /* 淘宝方法 */
         /* overflow: hidden;
         text-indent: -99px; */
         /* 京东方法 */
         font-size: 0;
     }
    
Table of Contents