美文网首页
对CSS知识点的查漏补缺

对CSS知识点的查漏补缺

作者: Mike_Gu | 来源:发表于2016-09-11 12:56 被阅读38次

    选择符

    • 子选择符:>
    • 紧邻同胞选择符:+
    • 一般同胞选择符:~
    • 属性名选择符:标签名[属性名]
    • 属性值选择符:标签名[属性名='属性值']

    举例:选中除了第一个之外的其它元素:

    HTML代码:

    <ul> <li><a>Gryffindor</a></li> <li><a>Herqipaqi</a></li> <li><a>Ravencolor</a></li> <li><a>Slythirin</a></li> </ul>

    CSS代码(只选择下一个li里面的a元素):

    ul li + li a **{border-left:1px solid #aaa;}

    还有比较新奇的,用于多级菜单的逐层显示:

    li:hover > ul {display:none;}


    伪类

    a链接一共有4个伪类:

    1. :link
    2. :visited
    3. :hover
    4. :active

    由于这4个伪类的特指度相同,如果不按照这里列出的顺序使用它们,浏览器可能不会显示预期结果。记忆办法:LoVe&HAte~~

    :hover可以用于任何元素
    (特指度表示一条规则有多明确。一条规则的特指度,由它的选择符中包含多少个标签、类名和ID决定。)

    :focus伪类
    应用于任何元素,表示元素获得焦点的状态。

    :target伪类
    如果用户点击一个指向页面中其他元素的链接,则那个元素就是目标,可以用:target选中它。

    比如:<a href="#more_info">More Infomation</a>,指向的是ID为more_info的元素,我再把#more_info:target {background:#eee;},就会在点击链接转向ID为more_info的元素时,为该元素添加浅灰色背景。

    结构化伪类

    :first-child和:last-child —— 注意点:并不是加在父元素上,而是一组同胞元素的首个或尾个上

    当然还有更灵活的:nth-child(n) —— n为数值,最常用于提高表格的可读性


    伪元素

    ::first-letter
    可以实现段落首字符放大的效果,如:p::first-letter {font-size:300%;}

    ::first-line
    可以选中文本段落的第一行,如:p::first-line {font-family:Arial;}

    ::before和::after
    可用于在特定元素的内容前面或后面添加特殊内容,比如:<p class='age'>25</p>,给它加上如下样式p.age::before {content:'Age: '},能得到以下结果:Age: 25
    (搜索引擎不会取得伪元素的信息,所以不要在伪元素中添加你想让搜索引擎抓到的重要内容)


    十六进制表示的颜色值

    纯红色 #ff0000
    纯绿色 #00ff00
    纯蓝色 #0000ff

    6个数值两两分成3组,分别代表红、绿、蓝色值,根据每组的第一个值可以大概猜出颜色,因为十六进制的顺序是0123456789abcdef,由浅入深,所以可以估计#7c a9 be偏蓝绿色。

    如果每组的两个值相等,可以简写,如纯红:#f00,纯绿:#0f0,纯蓝:#00f


    叠加外边距(竖直方向)

    给一列相同的元素设置相同的上下边距,中间元素的上下边距会重叠,也就是会覆盖值小的那个外边距。

    根据经验,为文本元素设置外边距时通常需要混合使用不同的单位。比如说,一个段落的左、右外边距可以使用像素,以便该段落始终与包含元素边界保持固定间距,不受字号变大或变小的影响。而对于上、下外边距,以em为单位则可以让段间距随字号变化而相应增大或减小。就像这样:p {font-size:1em; margin:.75em 30px;}


    围住浮动子元素的三种办法(重点)

    问题:当一个元素的子元素都设置浮动后,它将无法包裹住这些浮动元素,实际高度将会很小甚至为0.

    解决措施:

    • 为父元素添加overflow:hidden;
    • 同时浮动父元素;
    • 添加非浮动的清除元素;

    示例:方法3的衍生版,给父元素的伪元素::after清除浮动;
    :after { content:'.'; display:block; height:0; visibility:hidden; clear:both; }


    定位position

    static,relative,absolute,fixed

    relative是相对于原本该在的位置,调节top,right,bottom,left,但这个元素原来占据的空间没有动,页面除了它本身没有任何变化。

    absolute将元素彻底从文档流中拿出来,默认相对body元素进行top,right,bottom,left
    定位,会随着页面滚动而滚动。实际上,绝对定位元素的任何祖先元素都可以成为它的定位上下文,只要把相应祖先元素的position设定为relative即可。

    fixed将元素彻底从文档流中拿出来,相对
    浏览器窗口
    进行top,right,bottom,left定位,不会随着页面滚动而滚动。

    事实上,只要把元素的外边距和内边距设定好,多数情况下只用静态定位就足以实现页面布局了。除非真需要那么做,否则不要轻易修改元素默认的position属性。

    文本垂直居中的一种办法:将文本的line-height设置成父元素的高度,而行高是在文本行上下平均分配的。


    背景background

    背景图片居中:通过把background-position设定为50% 50%,把background-repeat设定为no-repeat,可以实现图片在背景区域内居中的效果。

    背景图片铺满
    **background-size: cover; **拉大背景图片,使其完全填满背景区,保持宽高比(有裁切)。
    background-size: contain;缩放图片,使其刚好放在背景区,保持宽高比(露底)。

    background-attachment属性控制滚动元素内的背景图片是否随元素而移动,默认值scroll,随着移动。如果值为fixed,背景图片位置保持不变,常用来给网页添加淡色水印。

    简写背景属性
    background: url(...) center #fff no-repeat contain fixed;
    声明中少写了哪一种属性的值,就会用默认值。

    CSS3新增的背景属性:
    background-clip —— 控制背景元素绘制的区域,比如可以让背景颜色和背景图片只出现在内容区,而不出现在内边距区域。默认情况下,背景绘制区域是扩展到边框外边界的;
    background-origin —— 控制背景定位区域的原点;
    background-break —— 控制分离元素(比如跨越多行的行内盒子)的显示效果;

    CSS3中背景图片可以有多张,并可以层叠,先声明的图片在上层


    渐进增强和优雅降级

    渐进增强(progressive enhancement)

    针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

    优雅降级(graceful degradation)

    一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。


    VSP厂商前缀(处理各大浏览器对部分CSS3属性不支持的问题)

    -o-
    -ms-
    -moz-
    -webkit-

    以下CSS属性必须加VPS:

    border-image
    background
    linear-gradient
    transition
    background-image
    radial-gradient
    transform
    针对背景图片或渐变
    translate
    transform-origin


    背景线性渐变

    默认从上到下:background:linear-gradient(#000,#fff);
    从左到右:background:linear-gradient(left,#000,#fff);
    左上到右下:background:linear-gradient(-45deg,#000,#fff);

    渐变点:一般用百分比确定的渐变区域的临界点。

    背景径向渐变

    background: -webkit-radial-gradient(#fff, #64d1dd, #70aa25);
    background: -webkit-radial-gradient(circle, #fff, #64d1dd, #70aa25);
    background: -webkit-radial-gradient(50px 30px, circle, #fff, #64d1dd, #70aa25);


    字体大小(推荐使用rem)

    实用经验:如果你想用em,但又需要设定具体的字体大小,可以把body的font-size设定为62.5%。这样,就等于把基准大小从16px改为10px(10/16=62.5%)。然后,em与px的对应关系就很明确了,比如1em就是10px,1.28em就是12.8px。

    但是,em有一个致命伤,就是相对大小会逐层复合,会有很多计算,比较麻烦!

    幸好,CSS3推出rem,所有元素都是相对HTML根元素,避免了逐层复合的麻烦!如今已被几乎各大浏览器支持(除了IE8及之前的老版本)。


    文本属性

    首行缩进:text-indent
    字符间距:letter-spacing
    单词间距:word-spacing
    文本装饰:text-decoration
    文本转换:text-transform
    垂直对齐:vertical-align:任意长度值以及sub,super,top,middle,bottom等
    vertical-align以基线为参照上下移动文本,但这个属性只影响行内元素。如果你想在垂直方向上对齐块级元素,必须把其display属性设定为inline。文本内一般用来设上下标。


    如何在网页中应用网格排版?

    画一个100*18的矩形,在它底部画一条线,并作为背景图片平铺在网页上即可。(18px是自定义的网格高度,可自行调整)


    分栏布局

    box-sizing:border-box; —— 改变盒子的内边距和边框时,不会对盒子整体宽度造成影响。
    IE6和IE7不支持box-sizing属性,有一个专门解决这个问题的borderBoxModel.js,可以使用条件注释把它添加到HTML标记之后、结束的</body>标记之前。

    子-星选择符 >*
    选择符可以选择“所有元素”,故而,在一个选择符后面加一个,比如someSelector*就可以选择someSelector所代表元素的所有后代元素,如果再加一个>,变成someSelector > *,就会只选择someSelector所代表元素的所有子元素,而非后代元素。

    用CSS3单元格实现分栏布局(重点)
    这种方法不会导致固定不变的表格布局,也不会出现难以重新应用样式的问题(比如在手持设备上显示为一栏)。CSS可以把一个HTML元素的display属性设置为table、table-row、table-cell。通过这种办法可以模拟相应的HTML元素的行为。而通过CSS把布局中的栏设定为table-cell有三个好处:
    1.单元格不需要浮动就可以并排显示,而且直接为它们应用内边距也不会破坏布局。
    2.默认情况下,一行中的所有单元格高度相同,因而也不需要人造的等高栏效果了。
    3.任何没有明确设定宽度的栏都是流动的。
    (这种办法秒杀多栏布局采取的浮动法、外边距法,只有一个不足,就是IE7以及更低版本不支持!)


    界面组件

    用div画一个三角形:
    div { border:12px solid; border-color:transparent red transparent transparent; height:0px; width:0px; }

    相关文章

      网友评论

          本文标题:对CSS知识点的查漏补缺

          本文链接:https://www.haomeiwen.com/subject/reeuettx.html