任务9-CSS常见技巧

课程目标

  • 熟悉常见的样式写法,如背景图片、居中、透明等

学习建议

问答题一定要动手写 demo ,否则学习效果只能达到5成

课程任务

1. CSS Sprite(雪碧图|精灵图)指什么?有什么作用

雪碧图被运用在众多使用了很多小图标的网站上。相对于把每张小图标以.png格式文件的形式引用到页面上,使用雪碧图只需要引用一张图片,对内存和带宽更加友好。

把多张图片拼到一张图中。把小图标放在同一张图片文件里,通过 background-position 显示那张图片文件的不同位置,以减少 HTTP 请求的数量。(sprites 适用于 icon 级的小图片。)

雪碧图简单总结:

优势

  • 减少 HTTP 请求数
  • 可以是任意图形,也可以是任意色彩
  • 兼容性极好(位于位图的 Sprites 兼容性都非常的好,但对于 SVG 的 Sprites,还是受到浏览器的限制,最起码要支持 SVG 的浏览器才能得到支持)

劣势

  • 增加开发时间,需要人肉或通过相关工具,将零散的图形合并到一起,而不同的合并方式,图形的色彩对 Web 的性能有直接的影响
  • 增加维护成本,要增加新的图标合成进来,是件较难的事情,甚至直接会影响到前面定位好的图片。目前为止,使用自动编译工具,相对比人肉处理要理想一些
  • 图片尺寸固定,在位图的 Sprites 中无法通过 CSS 来修改图标的大小,但在 SVG 的 Sprites 中可以配合CSS 的 background-size 调整图标的大小
来个demo
icon1.png
icon2.jpeg
icon3.png

在线工具合并:
result.png

代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Sprites-demo</title>
    <style media="screen">
        .icon {
            width: 225px;
            height: 225px;
            background: url(result.png) no-repeat;
            border: 1px solid red;
        }
        .s1 {
            background-position: 0px 0px;
        }
        .s2 {
            background-position: 0px -235px;
        }
        .s3 {
            background-position: 0px -470px;
        }
        /*
        下,右,都是负。
        */
    </style>
</head>
<body>
    <div class="icon s1"></div>
    <div class="icon s2"></div>
    <div class="icon s3"></div>
</body>
</html>

在浏览器上
demo.png
拓展阅读:
  1. Web中的图标
  2. CSS Sprite雪碧图应用
  3. 几种合成雪碧图工具

2. img 标签和 CSS 背景使用图片在使用场景上有何区别

对于固定不变的内容,如图标等用背景图。(不可点击的)

对于可变的内容,图片是和内容相关的,用图片。(可点击的,跳转到别的页面)
例如,用户头像(可变的),网站logo(可点击的)等。

注意:padding 有背景色,margin 没有。
就是 border 里面有颜色,外面没有颜色。

  • 行内元素上下 padding 虽然不会占位,但是设了背景颜色,依然可以看见上下 padding 有颜色。(所以行内元素最好不要直接用 padding ,而改用 padding-left 和 padding-right。-- 除非给这个行内元素加 block 或者 inline-block。)行内元素设置不了 height。
  • 块级元素可以设置 width, height, margin, padding 。而行内元素不可以设置上下 margin padding 以及 width height
拓展阅读

CSS 最核心的几个概念

3. titlealt 属性分别有什么作用?

title 属性规定关于元素的额外信息。这些信息通常会在鼠标移到元素上时显示“提示文本”

alt 属性规定图像无法显示时的替代文本

4. background: url(abc.png) 0 0 no-repeat; 这句话是什么意思

选用当前目录下的 abc.png 充当背景图片,在浏览器左上角显示,不重复。

5. background-size 有什么作用?兼容性如何?常用的值是?

background-size 用来指定背景图片的大小。属于 CSS3 的属性。

常用值有:length(px)、percentage(%)、cover、contain

其中,cover 会让背景铺满容器(调整背景图片的宽度或高度(较小者),以铺满整个容器。而且还会保持背景图片的宽高比。)

contain 会让容器包含整个背景图片(调整背景图片的宽度或高度(较大者),令背景图片全部包含在元素中。同时还会保持背景图片的宽高比。)

来个 demo

无论 cover 还是 contain,都会保持宽高比

原始大小-128px-128px.png

这是图片的原始大小:128px-128px

当background: cover;

.img-wrap {
            width: 128px;
            height: 50px;
            border: 1px solid red;
            background-image: url(http://www.w3school.com.cn/i/eg_smile.gif);
            background-size: cover;
        }
cover.png

可以看出,cover 为了让背景图片铺满容器,图片下半部分"不得不"没了。

当background: contain;

.img-wrap {
            width: 128px;
            height: 50px;
            border: 1px solid red;
            background-image: url(http://www.w3school.com.cn/i/eg_smile.gif);
            background-size: contain;
        }
contain.png

可以看出,当容器变小时,contain 为了让容器包含整个背景图片而调整图片的宽高,使之整体变小,且会出现重复背景图片。


cover 会让图片铺满容器而不去考虑图片是否能完整展示;
contain 优先考虑展现图片而不去考虑图片是否会重复
而且两者都会保持原始图片的宽高比!

总结:结合「容器宽高」和「图片的宽高」以及 「cover 和 contain 都会保持图片宽高比这个特性」,可以很快得出 cover 和 contain 在不同条件下会如何展示背景图片。

拓展阅读:
  1. 通俗cover-contain.demo
  2. w3cplus.background-size

6. 如何让一个 div 水平居中?如何让图片水平居中

让 div(块级元素)水平居中可以设置两边 margin 为 auto。

让 img(行内元素)水平居中可以设置 text-align: center;

来个demo
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>div-img-"水平居中"</title>
    <style media="screen">
        .test {
            width: 500px;
            height: 300px;
            border: 1px solid red;
            margin: 0 auto;
            /*块级元素居中*/

            text-align: center;
            /*行内元素居中*/
        }
    </style>
</head>
<body>
    <div class="test">
        <img src="icon1.png" alt="icon" />
    </div>
</body>
</html>
居中.png

7. 如何设置元素透明?兼容性?

opacity,指定不透明度。从 0.0(完全透明)到 1.0 (完全不透明)

主流浏览器都支持这个特性(IE8以上)。

caniuse-opacity兼容性

8. opacityrgba 都能设置透明,有什么区别

简单来说,opacity 会让子元素也变成半透明。
ragb 方式只会对该元素有效,不会影响到子元素。

来个 demo
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>opacity-rgba</title>
    <style media="screen">
        .opacity,.rgba {
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 1px solid red;
            text-align: center;
            display: table-cell;
            vertical-align: middle;
            font-size: 30px;
        }
        .opacity {
            background-color: red;
            opacity: 0.5;
        }
        .rgba {
            background-color: rgba(255,0,0,0.5);
        }
    </style>
</head>
<body>
    <div class="opacity">
        opacity不仅会对该元素有效,而且还会影响到子元素
    </div>
    <div class="rgba">
        rgba只会对该元素有效
    </div>
</body>
</html>
opacityVSrgba.png

opacity里面的字都变透明了,额,对比很明显。

代码
代码1预览
代码2预览
代码3预览

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

推荐阅读更多精彩内容

  • 1、CSS Sprite(雪碧图|精灵图)指什么? 有什么作用 简介CSS Sprites(雪碧图|精灵图)是一种...
    _hello__world_阅读 265评论 0 0
  • 2016/05/18 @hunger 说: CSS Sprite(雪碧图|精灵图)指什么? 有什么作用 主要是指将...
    嘿菠萝阅读 264评论 0 0
  • 一、CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? 1.雪碧图是把页面中需要用到的若干小图标集合在一...
    咩咩咩1024阅读 195评论 0 0
  • CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? 为了提高网页的性能,减少加载次数(减少http请求次...
    咸吧阅读 294评论 0 0
  • 1.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用 雪碧图指的是把一个网页上需要用到的多张图片整合到一...
    饥人谷_kule阅读 269评论 0 0