06_CSS居中、文档流、精灵图、网页优化

知识点

  • 定位的盒子居中显示
  • 标签包含规范
  • 规避脱标流
  • 图片和文字垂直居中对齐
  • CSS隐藏/可见
  • CSS之内容移除(网页优化)
  • 精灵图
  • 属性选择器
  • emmet快捷键

定位的盒子居中显示

  • margin:0 auto; 只能让标准流的盒子居中对齐。
  • 定位的盒子居中:先向左走父元素盒子的一半50%,在向左走子盒子的一半(margin-left:负值。)
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .fater{
            height: 500px;
            background: #ccc;
            position: relative;
        }
        .box{
            width: 996px;
            height: 56px;
            background: pink;
            position: absolute;
            bottom: 0;
            left: 50%;
            margin-left: -498px;
        }
    </style>
</head>
<body>
    <div class="fater">
        <div class="box"></div>
    </div>
</body>
</html>
案例

顺丰banner导航

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        body,ul,li{
            padding: 0;
            margin: 0;
        }
        .banner{
            width: 1259px;
            height: 472px;
            margin: 0 auto;
            position: relative;
        }
        .search{
            width: 960px;
            height: 60px;
            background: #464646;
            position: absolute;
            bottom: 0;
            left: 50%;
            margin-left: -480px;
        }
        .search ul li{
            list-style: none;
            float: left;
        }
        .search ul li a{
            display: inline-block;
            width: 160px;
            height: 60px;
            line-height: 60px;
            text-align: center;
            color: #fff;
        }
        .search ul li a:hover{
            background: #fff;
            color: #000;
        }
        .search ul li a.one:hover{
            background: #464646;
            color: #fff;
        }
        .login{
            position: absolute;
            left: 149px;
            bottom: 56px;
        }
        .sanjiao{
            position: absolute;
            left: 218px;
            bottom: 47px;
            z-index: 2;
        }
    </style>
</head>
<body>
    <div class="banner">
        <div class="pic">![](img/sf.png)</div>
        <div class="search">
            <ul>
                <li><a href="#" class="one">运单追踪</a></li>
                <li><a href="#">我要寄件</a></li>
                <li><a href="#">运费时效查询</a></li>
                <li><a href="#">服务网点查询</a></li>
                <li><a href="#">收寄范围查询</a></li>
                <li><a href="#">在线客服</a></li>
            </ul>
        </div>
        <div class="sanjiao">![](img/sanjiao.png)</div>
        <div class="login">![](img/3.png)</div>
    </div>
</body>
</html>
顺丰导航

标签包含规范

  • div可以包含所有的标签。
  • p标签不能包含div h1等标签。
  • h1可以包含p,div等标签。
  • 行内元素尽量包含行内元素,行内元素不要包含块元素。


    标签的所有包含规范

规避脱标流

  • 尽量使用标准流。
  • 标准流解决不了的使用浮动。
  • 浮动解决不了的使用定位。
  • 使用margin-left:auto 规避脱标

margin-left:auto 让盒子左侧充满
margin-right:auto 让盒子右侧充满

margin:0 auto 居中对齐的由来

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .father{
            width: 300px;
            height: 300px;
            background: #ccc;
        }
        .son{
            width: 50px;
            height: 50px;
            background: pink;
            margin-left: auto;
        }
    </style>
</head>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>
</html>
不使用浮动和定位也能靠右

图片和文字垂直居中对齐

使用vertical-align对行内、行内块元素设置垂直距离。默认属性是:vertical-align:baseline;
vertical-align:middle 常与display:inline-block配合使用, 表格对此属性最敏感

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        img{
            vertical-align: middle;
        }
    </style>
</head>
<body>
    <div class="box">
        ![](img/3.png)nihhhhhh</img>
    </div>
</body>
</html>
vertical-align属性值 描述
baseline 默认。元素放置在父元素的基线上
sub 垂直对齐文本的下标
super 垂直对齐文本的上标
top 把元素的顶端与行中最高元素的顶端对齐
text-top 把元素的顶端与父元素字体的顶端对齐
middle 把此元素放置在父元素的中部
bottom 把元素的顶部与行中最低的元素的顶部对齐
text-bottom 把元素的底部与父元素字体的底端对齐
length
% 使用line-height属性的百分比值来排列此元素。允许使用负值
inherit 规定应该从父元素继承vertical-align属性的值

vertical-align的理解和认识

CSS隐藏/可见

方式 功能
overflow:hidden; 溢出隐藏
visibility:hidden; 隐藏元素 隐藏之后还占据原来的位置。
display:none; 隐藏元素 隐藏之后不占据原来的位置。
display:block; 元素可见

Display:none 和display:block 常配合js使用。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .red{
            width: 50px;
            height: 50px;
            background: red;
            visibility: hidden;
        }
        .green{
            width: 50px;
            height: 50px;
            background: green;
        }
    </style>
</head>
<body>
    <div class="red"></div>
    <div class="green"></div>
</body>
</html>

盒子的位置还在

将上面visibility: hidden;改为display: none;
盒子隐藏并且不占位置

  • tab切换
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .box,.div1,.div2,.div3{
            width: 300px;
            height: 300px;
        }
        .box{
            overflow: hidden;
        }
        .div1{
            background: red;
        }
        .div2{
            background: green;
        }
        .div3{
            background: pink;
        }
    </style>
</head>
<body>
    <a href="#div1">新闻</a>
    <a href="#div2">体育</a>
    <a href="#div3">明星</a>
    <div class="box">
        <div class="div1" id="div1">新闻</div>
        <div class="div2" id="div2">体育</div>
        <div class="div3" id="div3">明星</div>
    </div>
</body>
</html>

css之内容移除(网页优化)

  • 使用text-indent:-5000em;
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .logo{
            width: 143px;
            height: 76px;
            background: url('img/logo.png');
        }
        .logo a{
            display: inline-block;
            text-indent: -5000em;
        }
    </style>
</head>
<body>
    <div class="logo">
        <h1><a href="http://www.baidu.com">搜狐</a></h1>
    </div>
</body>
</html>
  • 将元素高度设置为0,使用内边距将盒子撑开,给盒子使用overflow:hidden;将文字隐藏。
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .box{
            width: 300px;
            height: 0px;
            padding-top: 100px;
            overflow: hidden;
            background: red;
        }
    </style>
</head>
<body>
    <div class="box">Web大前端威武</div>
</body>
</html>

精灵图

  • 精灵图的由来


上图所示为网页的请求原理图,当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户。
  然而,一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接受和发送请求,这将大大降低页面的加载速度。为了有效地减少服务器接受和发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也称CSS Sprites)。
  简单地说,CSS精灵是一种处理网页背景图像的方式。它将一个页面涉及到的所有零星背景图像都集中到一张大图中去,然后将大图应用于网页,这样,当用户访问该页面时,只需向服务发送一次请求,网页中的背景图像即可全部展示出来。通常情况下,这个由很多小的背景图像合成的大图被称为精灵图,如下图所示为淘宝网站中的一个精灵图。


  • 精灵图工作原理
      CSS 精灵其实是将网页中的一些背景图像整合到一张大图中(精灵图)。然而,各个网页元素通常只需要精灵图中不同位置的某个小图,要想精确定位到精灵图中的某个小图,就需要使用CSS的background-image、background-repeat和background-position属性进行背景定位,其中最关键的是使用background-position属性精确地定位。

例如:我们要使用上图中的一个图标

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .box{
            width: 54px;
            height: 54px;
            background: url('img/qq.png') -700px -110px;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>
传智导航

hot、new使用精灵图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        body,ul,li{
            padding: 0;
            margin: 0;
        }
        li{
            list-style: none;
        }
        .nav{
            background: #000;
            height: 48px;
            margin-top: 100px;
        }
        .nav-con{
            width:1182px;
            height: 48px;
            margin: 0 auto;
            position: relative;
        }
        .nav-con ul li{
            float: left;

        }
        .nav-con ul li a{
            display: inline-block;
            height: 48px;
            font: 16px/48px microsoft yahei;
            color: #fff;
            padding: 0 13px;
            text-decoration: none;
        }
        .nav-con ul li a:hover{
            background: #3A92DD;
        }
        .hot{
            width: 31px;
            height: 21px;
            background: url('img/sprite.png') -57px 0px;
            position: absolute;
            left: 245px;
            top: -10px;
        }
        .new{
            width: 31px;
            height: 21px;
            background: url('img/sprite.png') -135px 0px;
            position: absolute;
            left: 634px;
            top: -10px;
        }
    </style>
</head>
<body>
    <div class="nav">
        <div class="nav-con">
            <div class="hot"></div>
            <div class="new"></div>
            <ul>
                <li><a href="#">首页</a></li>
                <li><a href="#">Java</a></li>
                <li><a href="#">UI设计</a></li>
                <li><a href="#">前端与移动开发</a></li>
                <li><a href="#">问答专区</a></li>
                <li><a href="#">iOS</a></li>
                <li><a href="#">PHP</a></li>
                <li><a href="#">C/C++</a></li>
                <li><a href="#">python</a></li>
                <li><a href="#">网络营销</a></li>
                <li><a href="#">活动专区</a></li>
            </ul>
        </div>
    </div>
</body>
</html>

精灵图用法总结:
  1:精灵图只能用打开的方式,不能使用导入得方式打开
  2:使用精灵图的时候注意坐标位置的正负取值
制作精灵图
注意事项:
  1:制作精灵图,小背景图片之间必须有间隙
  2:保存精灵图要保存为拼合png格式

属性选择器

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        input[type=text][id]{
            width: 200px;
            height: 20px;
            background: pink;
        }
        input[type=text][class="username"]{
            width: 100px;
            height: 20px;
            background: red;
        }
    </style>
</head>
<body>
    <input type="text" id="mytxt">
    <input type="text" class="username">
    <input type="password">
</body>
</html>

emmet快捷键

emmet是我们在sublime中的一个插件在这个插件中集成很多的快捷键。

html:
  • 生成结构的快捷键:
    + tab可以生成html5的结构代码。
  • 生成id名和类名
    标签名.类名#id名+tab
    没有标签名:.类名+tab ==>生成div
  • 生成同级元素:
    标签名+标签名+标签名 + tab
  • 生成子类标签
    标签名>子标签名>子标签名>子标签名+tab
    标签名>子标签名>子标签名>子标签名^^子标签名+tab
    注意:^是指返回一级,与父节点同级
  • 带固定数量的标签:
    ul>li*5+tab
  • 带有序号名称
    ul>li.abc$*3 + tab
  • 生成带有内容的标签:
    ul>li>a{item}*5+tab
css
  • width:30px==>w30+tab
  • Height:30px==>h30+tab
  • Margin:30px==>mg30+tab
  • Padding:30px==> pd30+tab
  • Line-height:12px==>lh12px+tab
  • Background==>bg+tab
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容