发表于: 2017-04-21 10:20:53

1 569


今天完成的事情:

1、任务8的深度思考。

2、task10的header写好。
明天计划的事情:

1、task9的深度思考。

2、task10的页面做好。
遇到的问题:

1、task1用的bootstrap的栅格布局,做到响应式。做header的时候,

点击下拉导航按钮会出现滚动条而且显示不完全,

 后来仔细看了下,只需要给.navbar-collapse 设置一个合适的高度,这个问题就解决了。

收获:

1.主流浏览器内核有哪几种?

主流浏览器

主流浏览器是一定市场份额且有自己独立研发内核的浏览器,也可以叫原生浏览器。
这其中我们大家常见的有: 
IE/Edge,Chrome,Safari,Opera,Firefox 
至于我们大家也很常用的
360浏览器、qq浏览器、uc浏览器等等都是壳浏览器 
它们只是把原生浏览器的内核拿过来,精简一下、包装一下。

主流浏览器

内核

IE -> Edge

trident->EdgeHTML

Chrome

webkit->blink

Safari

webkit

Firefox

Gecko

Opera

Presto->blink

浏览器内核

浏览器内核名字有很多,渲染引擎、排版引擎、解释引擎,英文Rendering Engine 
是用来渲染网页内容的,把你的网页代码转化为可见的页面 。
在早期内核也是包含js引擎的,而现在js引擎越来独立了,可以把它单独提出来 
主流浏览器内核及变化如下: 

浏览器分为外壳部分和渲染部分。外壳部分就是用户看得见摸得到的外观和操作界面;而渲染部分则包括了浏览器内核和JS引擎,其中JS引擎主要负责执行javascript语言实现网页上的动作,而内核则负责渲染网页,把数据变成用户可以看得见的网页内容。

IE至今采用都是trident内核

微软公司最新的Win10操作系统放弃了原有的IE浏览器,采用的新的Edge浏览器

Edge浏览器:微软 Edge使用了一个新的渲染引擎,它带有Trident属性。 “我们从老的渲染引擎Trident,也就是MSHTML开始,创建了分支代码,削减了很多(事实上,我认为几乎是所有)遗留技术和遗留行为——这些遗留技术和遗留行为定义了IE浏览器,把它与其他现代浏览器分开,”德布鲁因解释说
他们与过去决裂,并引入“
Edge HTML”,使得Edge可能成为微软这些年来最快、最轻便的浏览器。 德布鲁因告诉我,从用户反馈以及某些基准测试的早期结果来看,Edge浏览器和基于Blink的Chrome(Blink也是开放标准WebKit的一个代码分支 )一样快,甚至可能更快。 “我们在性能的很多方面都表现出了优势,因为我们可以把很多很多的IE遗留技术留在IE浏览器里。” 

2.什么是外边距重叠?重叠的结果是什么?

     在CSS中,两个或以上的块元素(可能是兄弟、父子、祖先元素)之间的相邻外边距可以被合并成一个单独的外边距。通过此方式合并的外边距被称为折叠,且产生的已合并的外边距被称为折叠外边距。

重叠的结果:

两者垂直外边据都为,取其最大值。

两者 垂直外边据都为,取其最小值

两者垂直外边据有正有,则取其两者相加后的值

外边据折叠只发生在垂直的外边据上,水平的外边据不会发生折叠。

 外边距重叠的意义:外边距的重叠只产生在普通流文档的上下外边距之间,这个看起来有点奇怪的规则,其实有其现实意义。设想,当我们上下排列一系列规则的块级元素(如段落P)时,那么块元素之间因为外边距重叠的存在,段落之间就不会产生双倍的距离,多数情况下,折叠垂直外边距可以在视觉上显得更美观,也更贴近设计师的预期。

怎么消除外边距折叠:

1、首先说明一下外边距折叠的规则:仅当两个块级元素相邻并且在同一个块级格式化上下文时,它们垂直方向之间的外边距才会叠加

所以,第一种方法只要触发BFC就可。

2、不使用margin,用padding代替margin。

3.div+css的布局较table布局有什么优点?

1.符合W3C标准,代码结构清晰明了,结构、样式和行为分离,div代表结构、css代表样式,带来足够好的可维护性。
2.布局精准,网站版面
布局修改简单
3.加快了页面的
加载速度(最重要的)(在IE中要将整个table加载完了才显示内容)。
4.
节约站点所占的空间和站点的流量
5.用只包含结构化内容的HTML代替嵌套的标签,提高另外
搜索引擎对网页的搜索效率。

6、保持视觉的一致性DIV+CSS最重要的优势之一:保持视觉的一致性;以往表格嵌套的制作方法,会使得页面与页面,或者区域与区域之间的显示效果会有偏差。而使用DIV+CSS的制作方法,将所有页面,或所有区域统一用CSS文件控制,就避免了不同区域或不同页面体现出的效果偏差。

缺点:table布局规避了许多浏览器不兼容的问题。而DIV则必须面对这些问题。

4.bootstrap有哪些常用组件?

1、bootstrap的栅格系统  2、按钮组  3、面板  4、导航条  5、icon图标 6、轮播组件 7、进度条 8、列表组 9、表单 (不具体一一介绍了)

5.css有哪些方式可以实现垂直居中?

<div class=”container”>

              <div class=”item”>垂直居中<div>

</div>

1、利用table布局

CSS: .container{

              width;300px;

              height:300px;

              display:table-cell;

              vertical-align:middle;

              text-align:center;

}

2、利用flex布局

a.container{

              width;300px;

              height:300px;

              display: flex;

               justify-content: center;

               align-items: center;

}

b、.container{

              width;300px;

              height:300px;

              display: flex;

               text-align;center;

}

.container .item{

              margin:auto;

}   利用display:flex和子元素margin:auto

c、改变主轴方向后   竖直方向用justify-content居中 水平方向用text-align:center;即可

.container{

              width;300px;

              height:300px;

              display: flex;

              flex-direction:column;

                justify-content: center;

}

.container .item{

              text-align:center;

}

3、利用绝对定位

a1、假如子元素有确切的宽和高

.container{

              width;300px;

              height:300px;

              display:relative;

}

.container .item{

              display:absolute;

              height:100px;

              width:100px;

              top:100px;

              left:100px;

}

决定定位lefttop的值为父元素的widthheight减去子元素的widthheight后除以2.

子元素已垂直居中,如果还需要垂直居中四个字也显示为垂直居中,那么须再设置.item

              text-align:center;

              vertical-align:middle;

              line-height:100px;

b1、子元素的宽高有具体数值

.container .item{

              height:50%;

              width:50%;

              overflow:auto;

              marginauto;

              display:absolute;

              top:0;

              left:0;

              right:0;

              bottom:0;

}

但是这里是通过margin:auto和top,left,right,bottom都设置为0实现居中

子元素已垂直居中,如果还需要垂直居中四个字也显示为垂直居中,那么须在.item

              text-align:center;

              vertical-align:middle;

              line-height:100px;

 

这种实现方式的两个核心是:把要垂直居中的元素相对于父元素绝对定位,top和bottom设为相等的值,我这里设成了0,当然你也可以设为99999px或者-99999px无论什么,只要两者相等就行,这一步做完之后再将要居中元素的margin设为auto,这样便可以实现垂直居中了,如果需要实现水平垂直居中则leftright也设置为0就ok

被居中元素的宽高也可以不设置,但不设置的话就必须是图片这种自身就包含尺寸的元素,否则无法实现。

 

b2利用translate:这种方法具有广泛性

.container .item{

              display:absolute;

              top:50%;

              left:50%;

              transform:translate(-50%,-50%);

}

 

在垂直方向top;50%;那么在垂直方向上的居中,应该需要在往上去子元素二分之一的高度

所以translateY轴方向是-50%,水平方向同理


4、利用line-height和vertica-align

a、单独使用line-height对单行文字设置垂直居中

.container{

              width;300px;

              height:300px;

              line-height:300px;

              text-aligncenter;

}

b、使用 line-height 和 vertical-align 对图片或者多行文字及盒子进行垂直居中

.container{

                width;300px;

              height:300px;

              line-height:300px;

              text-aligncenter;

}

.container .item{

              vertical-align:middlle;

}

假如是有宽高的盒子里面的文字垂直居中需要对该盒子设置line-height为盒子高度

 

5、利用inline-block

.container{

              width:300px;

              height:300px;

              text-align:center;

}

.contaner:after{

              content:””;

              height:100%;

              width:0;

              vertical-align:center;

              display:inline-block;

}

.container .item{

              display:inline-block;

}

这种方法设置伪元素:after为行内元素来占位,设置after伪元素为空,然后设置高度为100%,最后子元素设置为inline-block

 

6、display:-webkit-box

.container{

width: 300px;

  height: 300px;

  background-color: pink;

  display: -webkit-box;

  -webkit-box-pack:center;

  -webkit-box-align:center;

  -webkit-box-orient:vertical;

  text-align: center;

}   

这种方法是可行的,亲自测试过,不过原理我还不是很懂,今天学习下-webkit-box 把。

7、利用float和clear

<div class=”container”>

              <div class=”floater”></div>

              <div class=”item”>垂直居中<div>

</div>

.container{

width: 300px;

  height: 300px;

  text-align: center;

}

.container .floater{

float:left;

height:50%;              

}

.container .item{

clear:both;

transform:translateY(-50%);_

}

这种方法需要添加一个额外的空div,总体来说这种我认为当作一种参考就好,具体使用的话,不利于以后代码的维护。

8、利用padding和margin.

a1、父元素设置padding

.container{

padding;50px;

display:inline-block;

}

a2、子元素设置margin.

.container{

display:inline-block;

}

.container .item{

margin:50px;

}

这两种方法使用应该有限制不过这种方式看似没有什么技术含量,但其实在某些场景下也是非常好用的。



6.margin负值在页面布局中有哪些应用?

1、实现两列布局。

<div class=”box1”>box1</div>

<div class=”box2”>box2</div>

.box2{

              margin-left:200px;

              margin-top:-200px;

}

浮动和margin负值都能实现相同的效果,不过相对于浮动,margin负值更稳定,不容易出错。

2、去除行内元素的空隙。

<div class="space">

    <a href="##">惆怅</a>

    <a href="##">淡定</a>

    <a href="##">热血</a>

</div>

 

真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距,如上所示。

如果要消除以上的间隙,可以利用margin负值(margin负值只是消除空隙的方法之一)

.space a {

    display: inline-block;

    margin-right: -3px;

}

例如,对于12像素大小的上下文,Arial字体的margin负值为-3像素,Tahoma和Verdana就是-4像素,而Geneva为-6像素。

由于外部环境的不确定性,以及最后一个元素多出的父margin值等问题,这个方法不适合大规模使用。

3、左右列固定,中间列自适应布局(双飞翼布局)

双飞翼的好处:
1.可以让主要内容出现在
dom结构的前面,现将主要内容渲染
2.中间
自适应,两边固定宽度的效果

最终效果



4、去除列表右边框

对于图片列表,我会常常设计成两边对齐,中间元素平均分布,类似下面的布局

想让每一排最后一个对齐父元素的右边框,一般都两种处理,第一种会在给个循环体内的最后一个添加一个float:right属性或者做特殊处理,但这样还需要后端配合,我们自己能解决的就尽量自己解决。还有就是用css3的flexbox布局能解决这个两边对齐,但是这种布局兼容性不好

想叫每个列表项均匀分布,我不去设置margin-left,实现子元素与父元素左端对齐,

但是我给父元素一个margin-right的负值,再对子元素设置相同的margin-right正值,最右侧的子元素的右外边据恰好与父元素的右外边据相抵消,所以整个列表项看起来是两端对齐,中间均匀分布。bootstrap中栅格系统也是应用的这种模式。


5、负边距+定位:水平垂直居中 上面介绍过了,不再介绍了。


6、去除列表最后一个li元素的border-bottom

很多情况下,我们会用li标签模拟表格,再给li标签添加下边距的时候,最后一个li标签表格会和父元素的边框靠在一起,会显得整个“table”的底部边框会比其他的边粗一些

因为我只是设置li的boder-bottom 而设置了ul的border,如果不对最后一个li设置margin-bottom:-1px;此时底边框的宽度就是2px,看起来比其他边稍微宽一下,这样不美观而且不太符合设计要求,除非你对li设置四边的border,此时所有的边框厚度都为2px;也勉强可以接受。


7、多列等高

margin-bottom负值加上padding-bottomoverflow:hidden,就能做一个未知高度的多列等高布局

每个子元素都设置了不一样的高度,可是它们看起来高度确是一样的。布局关键在于

margin-bottompadding-bottom抵消

其次在于父元素设置overflow:hidden,触发BFC,闭合浮动。

因为它们是在同一行,闭合浮动后会以它实际内容的高度为准,因为中间的盒子最高为100px

所以只能闭合到这里,左右实际内容的高度还是50px和30px,并没变。

然后父元素在加上overflow:hidden;以最高的高度进行裁切,所以就有了看起来“等高”的3个div。





返回列表 返回列表
评论

    分享到