HTML基础篇02

 第六节

如何让盒子水平垂直居中

//绝对居中
position:abolute/relative/fixed
margin:auto;
left:0;
right:0;
top:0;
bottom:0;

 

简述BFC规则,及解决的问题?

BFC:块级格式化上下文,指一个独立的块级渲染区域,只有Block-level BOX参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。

触发bfc几种方法:

1. 根标签
2. overflow的值不为visible
3. float的值不为none
4. display的值不为inline-block
5. position的值为absolute或fixed

bfc解决的问题:

1. 外边距塌陷 
2. 浮动清除 
3. 自适应两栏或三栏布局 
4. 防止字体环绕

 

第七节

 图片间隙问题,如何解决?

 1. 图片下方间隙
给图片设置 vertical-align:middle/top/bottom
将图片转换为块元素:display:block
 2. 水平间隙
设置父级标签的:
font-size:0;line-height:0;

说说常见浏览器兼容问题

 1. IE图片的边框问题(a标签下的图片)

  img{
        border:0/none;}

 2. IE8一下浏览器背景复合属性空格问题

baground-image:url()'空格'no-repeat left;

其他ie低版本兼容性问题了解

(1)在ie6及更早浏览器中定义小高度的容器?

#text{
    overflow:hidden;
    height:1px;
    font-size:0;
    line-height:0;

}

(2)IE6及更早浏览器浮动时产生双倍间距的BUG?

针对IE6设置该标签的display属性为inline即可

#text{
    float:left;
    _display:inline;

}

(3)IE7及更早浏览器下子标签相对父标签overflow属性的auto|hidden失效的问题?

给父标签也设置相对定位position:relative

(4)块转内联块IE7-不在一行显示问题

div{
    dsiplay:inline-block;
    *display:inline;
    *zoom:1;

}

(5)IE7及更早浏览器下当li中出现2个或以上的浮动时,li之间产生的空白问题?

将垂直对齐方式设置为除了top值,还可以设置其他值如:middle|bottom等

li{
    vertical-align:top;  
}

 

等高布局、圣杯布局、双飞翼布局的实现原理?


等高布局:

 - 假等高:

内外边距互消法
列变宽,其他列等高变化`

/*三列,把外面设置一个大盒子,里面3个小盒子*/
父级:overflow:hidden;(溢出隐藏)
子级:padding-bottom:99999px;
      margin-bottom:-99999px;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div class="father">
       <div class="left">ga7a7dgadd 撒旦哈偶地 暗杀号段电话刈待定ga7a7dgadd 撒旦哈偶地 暗杀号段电话刈待定ga7a7dgadd </div>
        <div class="center">撒旦哈偶地 暗杀号段电话刈待定ga7a7dgadd 撒旦哈偶地 暗杀号段电话刈待定ga7a7dgadd </div>
        <div class="right">撒旦哈偶地 暗杀号段电话刈待定ga7a7dgadd 撒旦哈偶地 暗杀号段电话刈待定ga7a7dgadd </div>
    </div>
</body>

</html>

        .father {
            overflow: hidden;
            margin: 0 auto;
            /* width: 900px; */
        }

        .left {
            width: 100px;
            background-color: blue;
            float: left;
            padding-bottom: 9999px;
            margin-bottom: -9999px;
        }

        .center {
            width: 150px;
            background-color: green;
            float: left;
            padding-bottom: 9999px;
            margin-bottom: -9999px;
        }

        .right {
            width: 100px;
            background-color: skyblue;
            float: left;
            padding-bottom: 9999px;
            margin-bottom: -9999px;
        }

真等高:

  • 有几个盒子写几个盒子
  • 把第二个父盒子bg2进行移动,移到最后一个盒子blue的宽度
  • 移动最里面的父盒子bg3,移到倒数第二个子盒子green的大小
  • 依次把原来倒数第一个盒子blue移到原来的移动剩下的两个子元素到原位置
  • 最大盒子overflow::hidden去掉超出部分
<div class="bigbox">
        <div class="bg1">
            <div class="bg2">
                <div class="bg3">
                    <div class="red">第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅</div>
                    <div class="green">第二列第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅</div>
                    <div class="blue">第三列第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第三列第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第三列第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅第一列撒大概的 ad好贵呀噶 唉大概的噶大概空间大幅</div>
                </div>
            </div>
        </div>
    </div>
<style>
    .bigbox{
        margin: 0 auto;
        width:1000px;
    }
    .bg1{
        width: 100%;
        background-color: orange;
        overflow: hidden;
    }
    .bg2{
        width: 100%;
        background-color: pink;
        position: relative;
        right: 300px;
        float: left;
    }
    .bg3{
        width: 100%;
        background-color: skyblue;
        position: relative;
        right: 400px;
        float: left;
    }
    .red{
        width: 300px;
        /* background-color:red; */
        float: left;
        position: relative;
        left: 700px;
    }
    .green{
        width: 400px;
        /* background-color: green; */
        float: left;
        position: relative;
        left: 700px;
    }
    .blue{
        width: 300px;
        /* background-color: blue; */
        float: left;
        position: relative;
        left: 700px;
    }
    </style>

圣杯布局和双飞翼布局的原理及实现

  • 圣杯布局

圣杯布局和双飞翼布局都是为了实现左右栏固定宽度,中间部分自适应的三栏布局,不过两者实现的原理有所不同。以下是圣杯布局的实现思路。

1)将三者都float:left,再加上一个position:relative(因为相对定位后面会用到);

2)middle部分width:100%;

3)此时middle占满了,所以要把left拉到最左边,使用margin-left:-100%

4)这时left拉回来了,但会覆盖middle内容的左端,要把middle内容拉出来,所以在外围container加上padding:0 220px 0 200px;

 5) middle内容拉回来了,但left也跟着过来了,所以要还原,就对left使用相对定位left:-200px,同理,right也要相对定位还原right:-220px

6)到这里自适应就好了,若要想container高度保持一致可以给left middle right 都加上min-height:130px;

<body>
    <div class="container">
        <div class="middle">圣杯布局的中间自适应部分</div>
        <div class="left">圣杯布局左边固定宽度部分</div>
        <div class="right">圣杯布局右边固定宽度部分</div>
    </div>
</body>

        .container {
            padding: 0 200px 0 200px;
            overflow: hidden;
        }

        .middle,
        .left,
        .right {
            float: left;
            position: relative;
        }

        .middle {
            width: 100%;
            background-color: blue;
        }

        .left {
            width: 200px;
            background-color: red;
            margin-left: -100%;
            left: -200px;
        }
        .right{
            width: 200px;
            background-color: green;
            margin-left: -200px;
            right: -200px;
        }

 

  • 双飞翼布局

双飞翼布局始于淘宝UED。如果把三栏布局比作一只鸟,可以把main看成是鸟的身体,left和right则是鸟的翅膀。这个布局的实现思路是:先把重要的身体部分放好,然后再将翅膀放到适当的位置。

1)左翼left设置200px,右翼right设置220px,身体自适应;

2)html代码中,main要放在最前边,然后是left  right

3)将main left right都float:left

4)将main占满100%;

5)此时main占满100%,所以要把left拉到最左边,使用margin-left:-100%,同理right使用margin-left:-220px';

6)main内容被覆盖了,除了使用外围的的padding,还可以考虑使用margin:

给main加一个层div-- main-inner,然后margin:0 220px 0 200px

<body>
    <div class="middle">
        <div class="inner">双飞翼布局的中间自适应部分</div>
    </div>
    <div class="left">双飞翼布局左边固定宽度部分</div>
    <div class="right">双飞翼布局右边固定宽度部分</div>
</body>
.middle,
        .left,
        .right {
            float: left;
            min-height: 130px;
        }

        .middle {
            width: 100%;
        }
        .inner {
            margin: 0 220px 0 200px;
            background-color: orange;
            min-height: 130px;
        }

        .left {
            width: 200px;
            background-color: red;
            margin-left: -100%;
        }

        .right {
            width: 220px;
            background-color: green;
            margin-left: -220px;
        }

 

 

第八讲

用纯css实现小箭头的思路?

思路:用css绘制两个三角形,通过绝对定位让三角形不完全重叠,例如制作向右的空心箭头,位于前面的三角形border颜色是需要的颜色,后面的三角形border颜色与包裹他们的div背景色一致,然后设置前面三角形的left值比后者的left多1px,这样就可容易生成空心三角箭头。

<body>
    <div class="box">
      <p>右箭头</p>
      <div class="arrow-right arrow-box">
        <b class="right">
          <i class="right-arrow1"></i>
          <i class="right-arrow2"></i>
        </b>
      </div>

      <p>左箭头</p>
      <div class="arrow-left arrow-box">
        <b class="left">
          <i class="left-arrow1"></i>
          <i class="left-arrow2"></i>
        </b>
      </div>
    </div>
  </body>
* {
        padding: 0;
        margin: 0;
      }
      .box {
        width: 100px;
        height: 500px;
        margin: 0 auto;
        border: 1px solid red;
        background-color: white;
      }
      .arrow-box {
        width: 30px;
        height: 30px;
        margin: 20px auto;
        position: relative;
      }
      /* 右箭头 */
      .right {
        width: 20px;
        height: 20px;
        position: absolute;
        left: 0;
        top: 0;
        border: 1px solid white;
      }
      .right-arrow1,
      .right-arrow2 {
        width: 0;
        height: 0;
        display: block;
        position: absolute;
        left: 0;
        top: 0;
        border-top: 10px transparent dashed;
        border-right: 10px transparent dashed;
        border-bottom: 10px transparent dashed;
        border-left: 10px white solid;
        overflow: hidden;
      }
      .right-arrow1 {
        left: 1px;
        border-left: 10px blue solid;
      }
      .right-arrow2 {
        border-left: 10px white solid;
      }

      /* 左箭头 */
      .left {
        width: 20px;
        height: 20px;
        position: absolute;
        left: 0;
        top: 0;
        border: 1px solid white;
      }
      .left-arrow1,
      .left-arrow2 {
        width: 0;
        height: 0;
        display: block;
        position: absolute;
        left: 0;
        top: 0;
        border-top: 10px transparent dashed;
        border-left: 10px transparent dashed;
        border-bottom: 10px transparent dashed;
        border-right: 10px white solid;
        overflow: hidden;
      }
      .left-arrow1 {
        border-right: 10px blue solid;
      }
      .left-arrow2 {
        left: 1px;
        border-right: 10px white solid;
      }

 

简述精灵图的原理及优缺点?

利用css“background-image”、“background-repeat”、“background-position”的组合进行背景定位。

优点:

  • 减少网页的http请求,从未大大的提高页面的性能
  • 图片命名上的困扰
  • 更换风格方便

缺点:

  • 必须限定容器的大小符合背景图元素位置,需要计算

简述网页中常见图片格式及特点?

 

格式优点缺点使用场景
jpg色彩丰富,文件小有损压缩,反复保存图片质量下降明显色彩丰富的图片、渐变图像
GIF文件小,支持动画、透明,无兼容性问题只支持256种颜色色彩简单的logo、icon、动图
png无损压缩,支持透明,简单图片尺寸小不支持动画,色彩丰富的图片尺寸大

 

logo、icon、透明图

webp文件小,支持有损和无损压缩,支持动画、透明浏览器兼容性不好支持webp格式的app和webview
psd  photoshop源文件

 

第九讲

为什么要初始化css样式?那些样式需要初始化?

 因为浏览器的兼容的问题,不同浏览器有些标签的默认值是不同的,如果没有CSS初始化往往会出现浏览器之间的页面显示差异。 

/*清除默认的样式或者是某些页面所共有的样式*/

body{
	position: relative;
}
/*清除内外边距*/ 
* {
    margin: 0;
    padding: 0;
}

ul,
li {
    /*清除项目符号*/
    list-style: none;
}

/* a标签去掉下划线和默认颜色 */
a {
    text-decoration: none;
    color: black;
}

/* 文本框边框取消,去掉光标聚集时候的状态 */
select,input {
    border: none;
    outline: 0;
}

h1,h2,h3,h4,h5,h6{
	/*400 正常 700加粗*/
	font-weight:400;
}

/* ie中图片放在a标签中显示边框 */
img{
    border:none;
    /* 去除图片下方空白间隙 */
    vertical-align:middle;
}


/* 版心 */
.wrapper{
	/*如果你想使用margin 0 auto 
	前提是块元素而且给宽度
	*/
	width: 1200px;
	margin: 0 auto;
}
.center{
    margin: 0 auto;
}
.font_ct{
    text-align: center;
}
.font12{
    font-size: 12px;
    color: #333333;
}
.font14{
    font-size: 14px;
    /* color: #333333; */
}
.font28{
    font-size: 28px;
}
/* 字体12px */
.f12{
    font-size: 12px;
    color: #757575;
}
.col_t{
    color: #ff6700;
}

/* 浮动 */
.fl{
    float: left;
}
.fr{
    float: right;
}
/* 清除浮动 -伪元素 */
.clearfix:after{
    content:'';
    display: block;
    clear: both;
}
.clearfix{
    *zoom:1;
}

 

display:none和visibility:hidden的区别?

都是元素的显示与隐藏

visibility:visble  可见(默认)  hidden(隐藏,占位)

display:none(隐藏,不占位)  block(显示,转块元素,默认值)

 

你能想出几种方法让元素在页面中消失?

1.display:none;(将整个元素隐藏,并且不会占据任何的空间)

2.visibility:hidden;(元素的内容不可见,但是元素仍然保持原来的位置和大小)

3.设定它的位置,让其消失不见:

position:absolute或fixed,用z-index遮盖。

4.overflow:hidden将要隐藏的元素移除父元素的范围。

5.设置元素为透明:即opacity:0;

6.设置元素的clip(在新的css中使用clip-path来代替clip)

要让其生效,必须给元素的position的值设置为absolute或者fixed。

7.将元素的font-size,line-height,width,height设置为0;(虽然这些方法很赖皮。)

8.设置元素的transform的translateX(Y)的值为-100%;

 

标签应该如何合理嵌套?:

1、块元素里面有块元素、行内、行内块元素,一些特殊语义的标签不能嵌套块标签,比如h1--h6,p标签里面不能放块级标签

2、行内元素能够嵌套行内和行内块,a标签里面可以放块元素,a标签不能放a标签

3、固定搭配,比如ol,ul里面子元素只能是li,table,tr,th

 

第十讲

在项目中你是如何做图片优化的?

  • 使用背景图

起修饰作用的图片用背景图backgound-image(如页面中小图标尤其多次重复出现,纹理性的背景),与页面内容相关展示性的图片如(广告图、产品图)使用img图片

  • 图片品质

在保证视觉效果的情况下选择最小的图片格式与图片质量,以减少加载时间(例:在ps导出web所有格式图片时通常选择的品质在70--80之间)

  • 使用精灵图

减少网页中http请求

  • 静态banner大图的处理

有效区填白,降低图片大小,左右两栏背景选择图片品质低切片

有效区看情况划分三到五份,划分时不要切断banner中的文字

 

第十二讲

HTML5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容性问题?

新特性


1、语义化标签(结构化标签、其他标签)

结构化标签<header>页面或者区块页眉,放logo,导航
 <nav>导航:页面主导航,侧边栏导航,轮播
 <footer>页脚
 <artical>一个独立的区域,一篇文章、评论
 <section>区块,比div语义更明确
 <aside>侧边栏,与主题内容关联不大,比如侧边栏广告
 <hgroup>

标题组

<hgroup>
            <h1>主标题</h1>
            <h2>副标题</h2>    

</hgroup>

 <figure>图表,图片
 <figcaption>figure的标题,说明文字
其他标签<mark>定义标记内容
 <del>定义删除的内容
 <time>定义时间(如果标签内不是具体时间,需要用datetime属性定义时间)

 

2、音频、视频

<audio src=" " controls="controls"></audion>

<video src="" controls></video>

共有属性src引入音频、视频路径
 loop循环播放
 autoplay自动播放
 muted设置静音
video特有width,height设置视频播放时的宽高
 poster预览图片

<source>为媒介元素(比如audio,video)定义媒介资源

<audio controls>
    <source src="videoAudio/biubiubiu.ogg">
    <source src="videoAudio/hanmai.mp3">
    <source src="videoAudio/nada.wav"> 
    您的浏览器版本太低不支持音频
</audio>

source元素可以链接不同的音频、视频文件,浏览器将会使用第一个可识别的格式。

3、新增表单元素

url网址,内置正则验证
email邮箱,内置正则验证
color颜色选取控件 ,值为十六进制颜色  #000000
date日期选取控件  年月日
datetime日期输入控件  手动输入年月日小时分钟
datetime-local本地日期和时间,支持选择和输入
month选择年月
week选择一年的第几周
time输入时间
number只能输入数字,在移动端弹出数字键盘
range 滑块,数值
search搜索框
tel电话,移动端弹出数字键盘
datalist为输入框定义下拉选项
<input type="text" list="list1" name="list">
<datalist id="list1">
      <option>AA</option>
      <option>BB</option>
      <option>CC</option>
</datalist>

表单属性:

属性属性值
min定义最小值
max定义最大值
step定义步长
autofocus设置表单元素自动获得焦点
autocomplete输入框实现自动补全,默认on,设置off关闭
placeholder提示占位符
required把表单元素设置为必填项
pattern定义表单元素输入的格式,内置正则
form定义表单元素所属的表单域,值为表单域id
multiple设置多选,下拉列表,文件域,邮箱
formaction定义提交按钮的表单提交地址
formmethod定义提交按钮的提交方式

4、canvas画布
5、地理定位

 

移出一些标签



     - center、 - font、 - frame、 - frameset、 - applet

 

html5新增内容的兼容问题


浏览器支持情况:主流现代浏览器支持,ie9以上支持部分特性
PC端项目如果要求兼容ie8,不能使用html5新增的东西,如果用到结构化标签,需要做兼容处理

①使用javascript新增元素的方法解决

document.creatElement("header");

document.creatElement("footer");

由于创建出来的元素是内联元素,所以需要转换为块级,宽度和高度才能生效

header,footer{
display:block;
}

②使用封装好的插件html5shiv.js解决兼容问题

<!--[if lt IE9]>
    <script src="html5shiv.js" type="text/javascript"></script>
<![endif]-->

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值