Learning CSS

1 前言

CSS,现在让我既爱你又恨你啊。 到现在终于将CSS: The Definitive Guide(3rd Edition)初略的浏览了一遍。 不能说很熟悉,但是感觉对于CSS有了进一步的了解,尤其是对于布局方面。 虽然我现在仍然不能单独写出很好的CSS布局以及细节的排版等等(这句简直是废话), 虽然我现在仍然需要借助像Bootstrap 这样的库, 但是我想……

实话是我仍然不了解CSS。现在只能稍微梳理一下今天看的书的知识点。但愿可以……

2 CSS权威指南笔记:

2.1 CSS和文档:

主要讲了CSS的由来,你可以向看小说一样浏览过去,尽情的感受其强大的威力吧。

感觉值得停留的一页:P16,这页讲到了display,这个有很重要的作用,现在就 跟他打个招呼吧:)

2.2 选择器:

主要讲了选择器,对于我来说,需要记忆的是:

  1. * 通配选择器
  2. 理解 「结合选择器和声明分组」的概念
  3. 属性选择器
  4. 伪类

2.3 结构和层叠:

  1. 特殊性(详细规则:P70)

    /* 属性权重依次增加 */
    h1 {}                           /*0,0,0,1*/
    p em {}                         /*0,0,0,2*/
    .grade {}                       /*0,0,1,0*/
    *.bright{}                      /*0,0,1,0*/
    p.bright em.dark {}             /*0,0,2,2*/
    #id216 {}                       /*0,1,0,0*/
    div#sidebar *[href] {}          /*0,1,1,1*/
    
    1. 继承:
      • 有些属性会被继承
      • 有些则不会:如边框
    2. 权重排序:

      1. 读者的重要声明
      2. 创作人员的重要声明
      3. 创作人员的正常声明
      4. 读者的正常声明
      5. 用户代理声明
      
    3. LVHA:

      :link {}
      :hover {}
      :visited {}
      :active {}
      

2.4 值和单位:

  1. 相对长度:

    em {}                           /*在css中,1em定义为一种给定字体的font-size值*/
    ex {}                           /*ex指所用字体中小写x的高度 P94*/
    
    1. 像素理论 P96

2.5 字体:

字体的话,的确讲的不错,很细。的确,一个好的文章类的网站,字体是很重要的。(感觉只要是网站,有 文字,字体的设计和排版就显得尤为的重要了。)

由于讲的很细,不过大体上的话有以下属性,到时需要什么就查手册:

font-family {}                  /*P103*/
font-weight {}                  /*P107*/
font-size {}                    /*P113*/
font-style {}                   /*P121*/
font-variant {}                 /*P123*/
font-stretch {}                 /*P125*/
font-size-adjust {}             /*P125*/
font {}                         /*127*/
line-height {}                  /*P129 第6章详细说明*/

还有就是系统字体了:

caption
icon
menu
message-box
small-caption
status-bar

最后就是 @font-face:

@font-face {
    font-family: "Scarborough Fair";
    src: url(http://......);
}

2.6 文本属性:

  1. 缩进: text-indent
    1. line-height P141-P142
    2. vertical-align P145

2.7 基本视觉格式化:

这一章主要理解那个盒子: P165

还有基线和行高: P197

display: P 205

2.8 内边距、边框和外边距:

排版的重点(个人认为)

2.9 颜色和背景:

图片的处理,重复(X,Y)。

一个「复螺旋变形」的演示:http://meyerweb.com/eric/css/edge/complexspiral/glassy.html 其实质就是body设置了一个背景图片(清晰),然后在h2标签中使用background-position定位功能设置 一张图片(模糊)。用到的属性: 0 0 的定位, no-repeat, fixed

2.10 浮动和定位:

  1. 浮动:允许其他内容(如:文本)「围绕」某一容器。

    /* P289 */
    float
    left | right | none | inherit
    

    Attention:

    /* P304 */
    clear
    left | right | both | none | inherit
    
    1. 定位:

      /* P309 */
      position
      <length> | <percentage> | auto | inherit
      
      • static:
      • relative:
      • absolute:
      • fixed:
    2. 内容溢出和裁剪:

      /*P315*/
      overflow
      visible | hidden | scroll | auto | inherit
      
    3. 其他一些重要的:

      /* P313 */
      min-width min-height
      
      max-width max-height
      
      /* P317 */
      clip
      
      /* P321 */
      visibility
      
    4. Z轴上的放置: P333

2.11 表布局:

没有仔细看,因为暂时用不到

2.12 列表与生成内容:

这章可以看看,知道如何制作列表,更多的还是去网上看看其他人的优秀案例。

还有就是标题的自动排序,这个很好啊,不需要js生成,css就可完成。而且很方便。 实例:

style.css

body{
    counter-reset: chapter 0;
}
h1{
    counter-reset: sub-chapter 0;
}
h1:before{
    counter-increment: chapter;
    content: "Chapter " counter(chapter) ". ";
}
h2:before{
    counter-increment: sub-chapter;
    content: counter(chapter) "." counter(sub-chapter) ": ";
}

index.html

<body>
  <h1>Font Properties</h1>
  <h2>font-size</h2>
  <h2>font-weight</h2>
  <h2>font-family</h2>

  <h1>Background Properies</h1>
  <h2>background-color</h2>
  <h2>background-position</h2>
  <h2>background-repeat</h2>
</body>

参考:

2.13 用户界面样式:

自定一些部件吧:如光标,轮廓的颜色,page分页等等

2.14 非屏幕媒体:

读出页面内容,暂时没有仔细看,不过我感觉以后肯定可以用到。来帮助他们。

3 响应式WEB设计(HTML5和CSS3实战):

备注:

  1. 初步整理
  2. 作者blog: http://benfrain.com/
  3. 贯穿全文的项目演示地址:http://andthewinnerisnt.com/
  4. 文中提到有名的地址:

3.1 HTML5、CSS3及响应式设计入门

  1. 视口调试工具 P4
  2. 一些著名的响应式站点:

3.2 媒体查询:支持不同的视口

  1. 媒体查询语法:

    @media screen and (max-width: 768px) {
        ...
    }
    
  2. Respond.js: support IE8-

3.3 拥抱流式布局

  1. 公式:

    目标元素宽度 / 上下文宽度 = 百分比宽度

  2. em 替换 px
  3. CSS网格系统
    • Columnal: A responsive CSS grid system for rapid prototyping.

3.4 响应式设计中的HTML5

  1. 腻子脚本(polyfill)
  2. HTML5样板文件: http://html5boilerplate.com/
  3. HTML5大纲结构算法 P80
  4. WAI-ARIA无障碍站点
  5. form用于搜索时使用search

3.5 快速而有效的CSS技巧

  1. CSS3多兰布局 P108

    #main {
        column-width: 12em;
        column-gap: 2em;
        column-rule: thin dotted #999;
        column-width: 12em;
    }
    
    or
    
    #main {
        column-width: 4;
    }
    
  2. 文字换行:

    word-wrap: break-word;
    
  3. 子字符串匹配 P112
  4. HTML的ID命名方面唯一需要记住的是名字中间不能有空格且保证在页面中唯一
  5. 在视口小于768像素时使用 display: inline-block
  6. nth规则:P119

    :nth-child(n)
    :nth-last-child(n)
    :nth-of-type(n)
    :nth-last-of-type(n)
    
  7. 在CSS3中,计数从1开始,所以整数1会匹配第一个元素
  8. CSS3要求对伪类元素使用两个冒号以便与伪类进行区别
  9. @font-face:
  10. HSL颜色 P131 使用HSLA或RGBA则可以仅让元素的某些部分透明效果。 opacity则会对整个元素产生影响。

3.6 用CSS3创造令人惊艳的美

  1. 文字阴影

    /* 第一个值右侧阴影大小,第二个值下方阴影大小, */
    /* 第三个值模糊距离,第四个值颜色。 */
    .element {
       text-shadow: 1px 1px 1px #CCCCCC;
    }
    
    /* text-shadow: none; */
    /* 取消阴影 */
    
  2. 内阴影:

    -ms-box-shadow: inset 0 0 30px hsl(0, 0%, 0%),
    inset 0 0 70px hsla(0, 97%, 53%, 1);
    -moz-box-shadow: inset 0 0 30px hsl(0, 0%, 0%),
    inset 0 0 70px hsla(0, 97%, 53%, 1);
    -webkit-box-shadow: inset 0 0 30px hsl(0, 0%, 0%),
    inset 0 0 70px hsla(0, 97%, 53%, 1);
    box-shadow: inset 0 0 30px hsl(0, 0%, 0%),
    inset 0 0 70px hsla(0, 97%, 53%, 1);
    
  3. 线性背景渐变:

    /* 1. 使用1像素图片制作 */
    aside {
       ...
       background: url(../img/sidebarBg2.png) 50% repeat-x;
    }
    2. 使用linear-gradient
    aside {
       /* P145 */
       background: linear-gradient(90deg, #b01c20 0%, #f15c60 100%);
    }
    
  4. 径向背景渐变: P147

    background: radial-gradient(center, ellipse cover, #ffffff 72%, #dddddd 100%);
    
  5. 渐变生成器: CSS3渐变生成器
  6. 重复渐变: P149

    background: repeat-linear-gradient(90deg, #ffffff 0px, hsla(0, 1%, 50%, 0.1) 5px);
    
  7. CSS背景渐变图案
  8. 多重背景图片

    /* 排在最前面的图片在浏览器中显示是会覆盖在最上面 */
    /* 先声明多重背景图片,然后声明背景大小,最后声明背景位置 */
    background:
      url('../img/1.png') center,
      url('../img/2.png'),
      url('../img/3.png') left bottom, black;
    

    Reference: w3c参考资料 P161

3.7 CSS3过渡、变形和动画

  1. 过渡:P166

    -o-transition: all 1s ease 0s;
    -ms-transition: all 1s ease 0s;
    -moz-transition: all 1s ease 0s;
    -webkit-transition: all 1s ease 0s;
    transition: all 1s ease 0s;     /*P166*/
    

    贝塞尔曲线:http://cubic-bezier.com/

  2. CSS3的2D变形: P170

    transform:
      scale(1.7);
      translate(...);
      rotate(...);
      skew(...);
      matrix(...);
    

    矩阵变形工具

  3. transform-origin : 修改变形效果的起点
  4. 分析3D变形效果: P176
  5. CSS3动画效果:动画关键帧技术 P179

    @keyframes [动画名] {
        0% {
    
        }
        50% {
    
        }
        100% {
    
        }
    }
    

    使用的话:

    .back h5 {
        ...
        animation: warning 1.5s infinite ease-in; /*P180*/
    }
    

    Reference: CSS Transforms

3.8 用HTML5和CSS3征服表单

  1. email
  2. number
  3. url
  4. search
  5. pattern

    <input id="name" type="" name="name" value="" pattern="([A-Za-z]{3,30}\s*)+[a-zA-Z]{3, 30}" placeholder="Dwight Schultz" required aria- required="true"/>
    
  6. time datetime datetime-local P200
  7. 针对表单CSS3伪类选择器 P208

    input:required:
    input:focus:invalid:
    input:focus:valid:
    

3.9 解决跨浏览器问题

  1. HTML5验证工具:
  2. 在多个网站测试: P217
    • IE Tester
    • Smashing Magazine 总结
  3. 前端瑞士军刀: Modernizr

4 2013-05-20学习CSS笔记,稍候整理:

4.2 padding:

内边距

4.3 margin:

外边距

4.4 border-radius:

/** The Syntax: **/
box-shadow: none | <shadow> [ , <shadow> ]**
<shadow> = inset? && [ <length>{2,4} && <color>? ]
/**Example**/
#example1 {
    -moz-box-shadow: 10px 10px 5px #888;
    -webkit-box-shadow: 10px 10px 5px #888;
    box-shadow: 10px 10px 5px #888;
}

Reference:

4.5 border-left:

当使用 border-bottom 时,会和 border-left 自动形成交接线么?

我的意思是这样可以绘制出三角形:

#triangle-up {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid red;
}
/* solid 貌似是实心线的意思 */

Reference:

5 Learn Layout Website:

5.1 Note:

  1. 清除浮动(clearfix hack):

    /* Modern Browser */
    .clearfix {
            overflow: auto;
    }
    /* IE6 */
    .clearfix {
            overflow: auto;
            zoom: 1;
    }
    /* 注意这个属性 */
    /* clear:both */
    

    Reference:

    1. Left-right layout using floats
    2. Which method of 'clearfix' is best?
  2. 学习CSS布局:

    /* 当为屏幕,并且大于最新宽度时使用以下样式 */
    /* 适用屏幕范围:600px+ */
    @media screen and (min-width:600px) {
            nav {
                    float: left;
                    width: 25%;
            }
            section {
                    margin-left: 25%;
            }
    }
    /* 当时屏幕,并且小于最大宽度时使用以下样式 */
    /* 也就是在0~599px范围之内的屏幕使用以下样式 */
    @media screen and (max-width:599px) {
            nav li {
                    display: inline;
            }
    }
    

    Reference:

    1. Media Queries
    2. CSS media queries
    3. An introduction to meta viewport and @viewport
  3. inline-block:

    .box2 {
                    display: inline-block;
                    width: 200px;
                    height: 100px;
                    margin: 1em;
    }
    /* Another layout */
    li {
                    width: 200px;
                    min-height: 250px;
                    border: 1px solid #000;
                    display: -moz-inline-stack; /*解决ff*/
                    display: inline-block;      /*本来只要这个*/
                    vertical-align: top;
                    margin: 5px;
                    zoom: 1;                    /*IE7*/
                    *display: inline;           /*IE7*/
                    _height: 250px;             /*IE6 not support min-height*/
    }
    

    Reference:

    1. Cross-Browser Inline-Block
    2. vertical-align
    3. IE hasLayout
    4. IE hasLayout的问题总结
  4. flexbox:
  5. css框架:
  6. 边框颜色(全局):

    .container {
                    outline: solid 3px #faa;
    }
    
  7. CSS 使用注意事项

6 布局技巧:

6.1 八个需要掌握的CSS布局技巧:

链接地址:http://g.51cto.com/wangzhanqianduankaifa/49213

  1. 若有疑问立即检测: CSS LINT
  2. 使用浮动功能时记得适当清除指令: clear
    1. 边界重合时利用padding或border来避免
    2. 尝试避免同时对元素指定padding/border以及高度或宽度
    3. 不要依赖min-width/min-height
    4. 若有疑问,先减少百分比: 50% -> 49.9%
    5. 记住“TRouBLed”写法:border,margin与padding的简写语法有特定顺序,top,right,bottom,left.
    6. 只要不是零的值,都要指定单位: font,margin(唯一的例外是line-height)

6.2 详解CSS布局技巧十则:

7 Sprites, 图片的特定位置选取:

position: absolute;
/* 这里设置最终显示出来的图片的大小 */
width: 64px;
height: 64px;
/* 图片位置 */
background-image: url(file:///D:/Codes/JavaScript/Supercharged%20JavaScript%20Graphics%20Code%20Examples/sprites/cogs.png);
/* 定位 */
left: 352px;
top: 192px;
/* 这里是真正选取图片的位置哦 */
/* 第一个参数:负数表示将图片向右移动,视口向左移动 */
/* 第二个参数:负数表示将图片向上移动,视口向下移动 */
background-position: -128px -64px;

8 CSS Hack:

  1. 区别IE6与Firefox:

    background:orange;*background:blue;
    
  2. 区别IE6与IE7:

    background:green !important;background:blue;
    
  3. 区别IE7与Firefox:

    background:orange; *background:green;
    
    1. 区别Firefox,IE7,IE6:

      background:orange;*background:green !important;*background:blue; 
      /* 注:IE都能识别*;标准浏览器(如Firefox)不能识别*;  */
      /*    IE6能识别*,但不能识别 !important, */
      /*    IE7能识别*,也能识别!important;  */
      /*    Firefox不能识别*,但能识别!important;      */
      
    2. 另外再补充一个,下划线"_", IE6支持下划线,IE7和firefox均不支持下划线。

    于是大家还可以这样来区分IE6,IE7,firefox:

    background:orange;*background:green;_background:blue;
    /* 注:不管是什么方法,书写的顺序都是firefox的写在前面,IE7的写在中间,IE6的写在最后面。      */
    

    Reference:

9 CSS 特殊字符:

  1. "¶ 6\A0"
  2. ">> &raquo"

10 CSS 开发常用工具:

11 CSS Draw Shape:

  1. 三角形:

    .triangle {
        height: 0px;
        width: 0px;
        border:100px solid;
        /*  Add color now */
        border-color: red green yellow blue;
    }
    
  2. Reddit

    <style type="text/css" media="screen">
      #reddit-alien {
          width: 296px;
          height: 380px;
          position: relative;
          margin: 0 auto;
      }
      #reddit-alien .antenna {
          height: 50px;
          width: 44px;
          top: 40px;
          left: 155px;
          border: 7px solid black;
          border-width: 9px 0 0 9px;
          -webkit-border-radius: 5px 0 0 0;
          -webkit-background-clip: padding-box;
          -moz-border-radius: 5px 0 0 0;
          border-radius: 5px 0 0 0;
          -webkit-transform: rotate(16deg);
          -moz-transform: rotate(16deg);
          -o-transform: rotate(16deg);
      }
      #reddit-alien div {
          position: absolute;
      }
      #reddit-alien .dot {
          width: 26px;
          height: 26px;
          left: 37px;
          top: -28px;
          border: 8px solid black;
          -webkit-border-radius: 26px;
          -webkit-background-clip: padding-box;
          -moz-border-radius: 26px;
          border-radius: 26px;
          background: white;
      }
      #reddit-alien .ear.left {
          left: 40px;
      }
      #reddit-alien .ear.right {
          left: 216px;
      }
      #reddit-alien .ear {
          width: 32px;
          height: 32px;
          top: 100px;
          border: 8px solid black;
          -webkit-border-radius: 32px;
          -webkit-background-clip: padding-box;
          -moz-border-radius: 32px;
          border-radius: 32px;
          background: white;
      }
      #reddit-alien .head {
          z-index: 2;
          top: 88px;
          left: 52px;
          height: 115px;
          width: 182px;
          border: 9px solid black;
          -webkit-border-radius: 150px 100px;
          -webkit-background-clip: padding-box;
          -moz-border-radius: 150px / 100px;
          border-radius: 150px / 100px;
          background: white;
      }
      #reddit-alien .eye.left {
          left: 42px;
      }
      #reddit-alien .eye.right {
          left: 110px;
      }
      #reddit-alien .eye {
          z-index: 2;
          width: 32px;
          height: 32px;
          top: 29px;
          -webkit-border-radius: 16px;
          -moz-border-radius: 16px;
          border-radius: 16px;
          background: orangeRed;
      }
      #reddit-alien .mouth {
          z-index: 1;
          width: 94px;
          height: 80px;
          top: 3px;
          left: 35px;
          border: 9px solid white;
          border-bottom-color: black;
          -webkit-border-radius: 150px 120px;
          -moz-border-radius: 150px / 120px;
          border-radius: 150px / 120px;
      }
      #reddit-alien .arm.left {
          left: 78px;
          -webkit-border-radius: 43px 0 0 43px;
          -moz-border-radius: 80px 0 0 90px;
          border-radius: 43px 0 0 43px;
      }
      #reddit-alien .arm.right {
          left: 170px;
          -webkit-border-radius: 0 43px 43px 0;
          -moz-border-radius: 0 80px 90px 0;
          border-radius: 0 43px 43px 0;
      }
      #reddit-alien .arm {
          height: 78px;
          width: 39px;
          top: 210px;
          border: 8px solid black;
          background: white;
          -webkit-background-clip: padding-box;
      }
      #reddit-alien .body {
          z-index: 1;
          width: 88px;
          height: 178px;
          left: 100px;
          top: 150px;
          border: 8px solid black;
          -webkit-border-radius: 120px 250px;
          -webkit-background-clip: padding-box;
          -moz-border-radius: 120px / 250px;
          border-radius: 120px / 250px;
          background: white;
      }
      #reddit-alien .foot.left {
          -webkit-border-radius: 24px 24px 0 0;
          -moz-border-radius: 30px 0 0 10px;
          border-radius: 24px 24px 0 0;
          left: 82px;
      } 
      #reddit-alien .foot.right {
          -webkit-border-radius: 24px 24px 0 0;
          -moz-border-radius: 0 30px 10px 0;
          border-radius: 24px 24px 0 0;
          left: 156px;
      }
      #reddit-alien .foot {
          border: 8px solid black;
          width: 50px;
          height: 16px;
          top: 312px;
          background: white;
          -webkit-background-clip: padding-box;
      }
    </style>
    <div id="reddit-alien">
      <div class="antenna">
        <div class="dot"></div>
      </div>
      <div class="ear left"></div>
      <div class="ear right"></div>
      <div class="head">
        <div class="eye left"></div>
        <div class="eye right"></div>
        <div class="mouth"></div>
      </div>
      <div class="arm left"></div>
      <div class="arm right"></div>
      <div class="body"></div>
      <div class="foot left"></div>
      <div class="foot right"></div>
    </div>
    

12 CSS Pseudo Class/Elements

:link	a:link	Selects all unvisited links
:visited	a:visited	Selects all visited links
:active	a:active	Selects the active link
:hover	a:hover	Selects links on mouse over
:focus	input:focus	Selects the input element which has focus
:first-letter	p:first-letter	Selects the first letter of every <p> element
:first-line	p:first-line	Selects the first line of every <p> element
:first-child	p:first-child	Selects every <p> elements that is the first child of its parent
:before	p:before	Insert content before every <p> element
:after	p:after	Insert content after every <p> element
:lang(language)	p:lang(it)	Selects every <p> element with a lang attribute value starting with "it"

13 CSS white-space Property

14 CSS部分术语解释:

  1. 替换元素(Replaced): 替换元素就是浏览器根据元素的标签和属性,来决定元素的具体显示内容。
    • <img>
    • <input>
    • <textarea>
    • <select>
    • <object>
  2. 不可替换元素(Nonreplaced): HTML 的大多数元素是不可替换元素,即其内容直接表现给用户端(例如浏览器)。
    • <p></p>
  3. 块元素(Block-level): 在视觉上被格式化为块的元素, 最明显的特征就是它默认在横向充满其父元素的内容区域, 而且在其左右两边没有其他元素,即块级元素默认是独占一行的。
    • <div>
    • <p>
    • <h1> - <h6>
  4. 行内/内联函数(Inline): 行内元素不形成新内容块,即在其左右可以有其他元素
    • <a>
    • <span>
    • <strong>
  5. Baseline alignment: Baseline alignment describes the alignment of textual content and based on information contained in font tables associated with font resources. Additional descriptions for these font tables are provided in the CSS3 Fonts module.

Reference:

  1. CSS:替换元素(Replaced)、不可替换元素(Nonreplaced)、块元素(Block-level)和行内/内联元素(Inline)

15 HTML Useful Character Entities:

冰糖火箭筒(Junjia Ni)

2013-05-25

2016-11-10 Thu 13:03

Emacs 25.1.1 (Org mode 9.0)

2016-11-10 Thu 12:43