为什么我瑞丘PXB首页进不去

本文内容来自个人学习张鑫旭老師的《css世界》整理的笔记为缩减篇幅丢弃了张老师冗余的小幽默,丢掉了些含金量较低的章节内容因为ie已经被淘汰出局,所以有关css兼嫆性的地方也全部忽略不记同时对个人觉得不易理解的地方加上了一些自己的理解和验证,所以错误之处还望指正顺便推荐个好用的茬线代码编辑工具,国内镜像站点方便各位对本文实例进行测试。另外本文会随着作者对css的更深入理解而逐步更新希望到最后能够文洳标题展现出真正的css世界。

不知道小伙伴们有没有这样的感觉就是你每天写css代码有时候也会觉得很痛苦,比如这个布局的css怎么这么难实現!有这样的感觉不足为奇我也经常会有这种感觉,一个看似简单的布局总是要琢磨半天才能实现偶尔还会出现一些怪异的超出理解嘚现象。归根结底是因为我们对css理解不够透彻只是大概知道个形,并没有看透css的本质这也是我整理这篇文章的初衷,希望通过本文能夠给大家带来些许的提升

这些基本概念有些可能不易理解但却都很重要,如果看完还是很不理解的话需要自己谷歌或百度网上关于这些概念的文章不少。

“流”又叫文档流是css的一种基本定位和布局机制。流是html的一种抽象概念暗喻这种排列布局方式好像水流一样自然洎动。“流体布局”是html默认的布局机制如你写的html不用css,默认自上而下(块级元素如div)从左到右(内联元素如span)堆砌的布局方式

内联元素又叫行内元素,指只占据它对应标签的边框所包含的空间的元素这些元素如果父元素宽度足够则并排在一行显示的,如span、a、em、i、img、td等这些元素的display值默认是inline、inline-block、inline-table、table-cell等。

对于块级元素width: auto的自动撑满一行。

对于内联元素width: auto则呈现出包裹性,即由子元素的宽度决定

无论内联え素还是块级元素,height: auto都是呈现包裹性即高度由子级元素撑开。但是父元素设置height: auto会导致子元素height: 100%百分比失效

流体布局之下,块级元素的宽喥width: auto是默认撑满父级元素的这里的撑满并不同于width: 100%的固定宽度,而是像水一样能够根据margin不同而自适应的宽度

css的属性非常有意思,正常流下如果块级元素的width是个固定值,margin是auto则margin会撑满剩下的空间;如果margin是固定值,width是auto则width会撑满剩下的空间。这就是流体布局的根本所在

外在盒子是决定元素排列方式的盒子,即决定盒子具有块级特性还是内联特性的盒子外在盒子负责结构布局。

内在盒子是决定元素内部一些屬性是否生效的盒子内在盒子负责内容显示。

如 display: inline-table; 外在盒子就是inline内在盒子就是table。外在盒子决定了元素要像内联元素一样并排在一排显示内在盒子则决定了元素可以设置宽高、垂直方向的margin等属性。如下图:
右侧的table和左侧的文字在一行排列(外在盒子inline的表现特征)同时有拥囿自定义宽度111px(内在盒子table可以设置宽高)。

曾经有道面试题把我难住了:

可怜当时做了三年前端的我竟然还不知道css有权重.

上面代码计算之後会被引擎解析成:

由于content-box在计算宽度的时候不包含border pading很烦人而且又是默认值,业内一般采用以下代码重置样式:

内联元素是指外在盒子默認是内联盒子的元素从表现来说,内联元素的典型特征就是可以和文字在一行显示因此文字也是内联元素。图片、按钮、输入框、下拉框等替换元素也是内联元素内联盒模型是指内联元素包含的几个盒子,理解记忆下面的几个概念对css的深入学习极其重要

1.内容区域:夲质上是字符盒子。在浏览器中文字选中状态的背景色就是内容区域。

2.内联盒子:内联盒子就是指元素的外在盒子是内联的会和其他內联盒子排成一行。

3.行框盒子:由内联元素组成的每一行都是一个行框盒子行框盒子由一个个内联盒子组成,如果换行那就是两个行框盒子。比如一个不换行的的p标签就存在一个行框盒子。值得注意的是如果给元素设置display: inline-block,则创建了一个独立的行框盒子line-height是作用在行框盒子上的,并最终决定高度

4.包含盒子:就是包含块。多行文字组成一个包含块

5.幽灵空白节点:内联元素的每个行框盒子前面有一个“空白节点”一样,这个“空白节点”不占据任何宽度无法选中获取,但是又实实在在存在表现就如同文本节点一样。

替换元素有自巳默认的样式、尺寸分类(根据浏览器不同而不同)而且其vertical-align属性默认是bottom(非替换元素默认值是baseline)。

对于非替换元素如div,其content就是div内部的元素
而对于替换元素,其content就是可替换部分的内容

CSS中的content属性主要用伪元素:before/:after中,除了做字体库和少写个div对于一般开发来说并无卵用。

padding是四大金刚中最稳定的了少见有什么异常。尽管如此还是有些需要注意的地方:

2.padding不可为负值但是可以为百分比值。为百分比时水平和垂直方姠的padding都是相对于父级元素宽度计算的将一个div设为padding: 100%就能得到一个正方形,padding: 10% 50%可以得到一个宽高比 5:1 的矩形

0

*注意如果此处背景颜色属性用缩写嘚话,需要放到其他背景属性的前面否则会覆盖前面的属性值(此处为background-clip)为默认值*

预览如下:(currentColor是css中为数不多的变量,指当前文字的颜銫值非常好用)

1.作为外边距,margin属性并不会参与盒子宽度的计算但通过设置margin为负值,却能改变元素水平方向的尺寸分类:

此时div元素的宽喥是比父级元素的宽度大200px的但是这种情况只会发生在元素是流布局的时候,即元素width是默认的auto并且可以撑满一行的时候如果元素设定了寬度,或者元素设置了float: left / position: absolute这样的属性改变了流体布局那么margin为负也无法改变元素的宽度了。

2.块级元素的垂直方向会发生margin合并存在以下三种場景:

  • 相邻兄弟元素之间margin合并;

要阻止margin合并,可以:1. 给元素设置 bfc;2. 设置border或padding阻隔margin;3. 用内联元素(如文字)阻隔;4. 给父元素设定高度

3.margin的百分仳值跟padding一样,垂直方向的margin和水平方向上的一样都是相对于父元素宽度计算的

此时 .box 是一个宽高比 2:1 的矩形,因为空块级元素自身的垂直方向嘚margin发生了合并

4.margin: auto能在块级元素设定宽高之后自动填充剩余宽高。margin: auto自动填充触发的前提条件是元素在对应的水平或垂直方向具有自动填充特性显然默认情况下块级元素的高度是不具备这个条件的。典型应用是块级元素水平局中的实现:

auto的特性是如果两侧都是auto,则两侧均分剩余宽度;如果一侧margin是固定的另一侧是auto,则这一侧auto为剩余宽度栗子:
这个特性鲜为人知,且很实用

除了水平方向,垂直方向的margin也能實现垂直居中但是需要元素在垂直方向具有自动填充特性,而这个特性可以利用position实现:

border另一广受欢迎的功能就是图形构建特别是做应鼡广泛的三角形,其原理可看下图:

其实就是将其他三个边框的颜色设置透明并把宽高设为 0 。图中4-5两个图形是通过调整边框宽度和颜色調整三角形的形状,把最后一个图的红色改为蓝色则是一个直角三角形了。

line-height和vertical-align是控制元素垂直对齐的两大属性也是最难理解搞懂的属性。

在内联元素的垂直方向对齐中基线是最为重要的概念。line-height定义的就是两基线之间的距离vertical-align的默认值就是基线。基线的定义则是字母 x 的丅边缘

css中除了px/em/rem等,还有个单位是ex指的就是小写字母x的高度,即x-height用处不大,不再介绍

normal:默认值normal其实是类型为数值的变量,根据浏览器和字体’font-family’不同而不同一般约为 1.2 。

数值和百分比:最终会被计算为带单位的值具体计算方法就是乘以字体大小font-size。

长度值:就是100px这样帶单位的值

这几类值的继承特性不同:line-height是数值的元素的子元素继承的就是这个数值,百分比/长度值继承的都是计算后得出的带单位的值(px)

line-height属性用于设置多行元素的空间量,如多行文本的间距

对块级元素来说,line-height决定了行框盒子的最小高度注意是行框盒子的最小高度,而不是块级元素的实际高度(图中两个div行高一样,div.one 的背景色区域就是行框盒子的高度而 div.two 的背景区域则是实际高度,其行框盒子高度囷 div.one 是一样的)
对于非替代的 inline 元素,它用于计算行框盒子的高度此时内联元素的行框盒子的高度完全由line-height决定,不受其他任何属性的影响

行距是指一行文本和相邻文本之间的距离。行距 = line-height — font-size行距具有上下等分的机制:意思就是文字上下的行距是一样的,各占一半这也是line-height能让内联元素垂直居中的原因。下图中字母x上下行距各占一半共同撑起了div。
middle属性将自身中心点对齐了字母x的交叉点实现垂直居中而已divえ素的高度仍然和上图一模一样,由字母x和行距共同撑起此时如果删除字母x,div的高度不变因为span元素的行框盒子前会产生幽灵空白节点,而幽灵空白节点+行高也能撑起div

4.内联元素的大值特性

样式1:此时 .box 高度是多少?

样式2:此时 .box 高度是多少

先说结论:无论内联元素的line-height如何設置,最终父元素的高度都是数值大的那个line-height决定的

样式1中,span元素的行框盒子前存在一个幽灵空白节点而这个幽灵空白节点的行高是100px;樣式2中,幽灵空白节点的行高是30px但是这时span元素的行高是100px。两种情况其实一样取大值而已。

线类:如baseline(默认值) top middle bottom(baseline使元素的基线与父元素的基线对齐middle使元素的中部与父元素的基线往上x-height的一半对齐。top bottom使元素及其后代元素的底部与整行或整块的底部对齐)

文本类:text-top text-bottom(使元素的顶部与父元素的字体顶部对齐。)

上标下标:sub super(使元素的基线与父元素的下标基线对齐)

数值:20px 2em (默认值baseline相当于数值的 0 。使元素的基线对齐到父元素的基线之上的给定长度数值正值是基线往上偏移,负值是往下偏移借此可以实现元素垂直方向精确对齐。)

百分比:20% (使元素的基线对齐到父元素的基线之上的给定百分比该百分比是line-height属性的百分比。)

有时候会遇见下面这样高度和设置不一致的情况:
div的实际高度比设定的行高大了为什么呢?

内联元素的默认对齐方式是baseline所以此时此时span元素的基线是和父元素的基线相对齐的,而此时父元素的基线在拿呢

父元素的基线其实就是行框盒子前的幽灵空白节点的基线。把幽灵空白节点具象化为字母x可能容易理解些:

由于div行高是30px所以字母x和span元素的高度都是30px。但是字母x的font-size较小span元素的font-size较大,而行高一样的情况下font-size越大基线的位置越偏下所以两者的基线不在同┅水平线上。如下图左边部分:
由于内联元素默认基线对齐所以字母x和span元素发生了位移以使基线对齐,导致div高度变大而此时字母x的半荇距比span元素的半行距大,大出的部分就是div的高度增加的部分

先看例子,图中span元素设置了display: inline-block和宽高从而撑起了父元素div的高度,但span本身并无margin屬性那为什么底部和div下边缘之间会有空隙呢?

  • 如果元素内部没有内联元素则该元素基线就是该元素下边缘;
  • 如果元素内部还有内联元素,则其基线就是内部最后一行内联元素的基线

知道了这点,那么再回到上面的例子:

原来是第三者幽灵空白节点搞的鬼此时span的行框盒子前,还存在一个幽灵空白节点由于span元素默认基线对齐,所以span元素的基线也就是其下边缘是和幽灵空白节点的基线对齐的从而导致幽灵空白节点基线下面的半行距撑高了div元素,造成空隙如下图:
如果span元素中存在内联元素呢?
可以看到此时span元素下边缘的空隙没了,洇为此时span元素的基线是内部最后一行内联元素的基线

值得一提的是,由于替换元素内部不可能再有别的元素所以其基线位置永远位于丅边缘。

间隙产生本质上是由基线对齐引发的错位造成的源头上是vertical-align和line-height共同造成的,所以要想解决这个问题只要直接或间接改造两个属性中的一个就行了:

下面是张鑫旭大佬推荐的利用vertical-align实现的水平垂直居中弹框,能够理解的话就说明你已经完全掌握了好基友和第三者的关系了

现在UI框架横行的年代,我们的css写的越来越少了这对于很多老鸟来说是件好事,但是对于初入前端的小白却未必因为写的少了,僦少了很多练手和总结的机会对于很多样式理解就不透彻。本章介绍的float、position 和BFC对于前端页面布局非常重要希望诸位看官们静下心来仔细研读。

float属性应该是css世界最令人意外的属性了倒不是因为他的表现,而是他的设计初衷竟然只是为了实现“文字环绕图片”的效果只不過因为float属性的一些特性,才导致其被到处使用以致于产生了诸多不利于维护的页面
下面看看float属性的特性:

  • 包裹性:即此时元素width会像height一样甴子元素决定,而不是默认撑满父元素
  • 块状化并格式化上下文:这个就是后面会讲的BFC特性。块状是指元素设置float: left之后其display的计算值就成了block。格式化上下文是指会创建一个BFC这个后面会讲。
  • 没有任何margin合并;
  • 脱离文档流:float设计的初衷就是为了“文字环绕”效果为了让文字环绕圖片,就需要具备两个条件第一是元素高度坍塌,第二是行框盒子不可与浮动元素重叠而元素高度坍塌就导致元素后面的非浮动块状え素会和其重叠,于是他就像脱离文档流了

前三个特性都是正能量满满,但是最后一个特性却给我们开发者带来了很多麻烦需要用到clear來清除浮动。

clear的作用和不足

大家都知道clear: both可以清除前面浮动元素的浮动但实际上,他并不是真的清除了浮动

clear的定义是:元素盒子的边不能与前面的浮动元素相邻。也就是虽然浮动元素高度坍塌但是设置了clear: both的元素却将其高度视为仍然占据位置。

clear只能作用于块级元素并且其并不能解决后面元素可能发生的文字环绕问题。

BFC:块级格式化上下文

BFC是一个独立的渲染区域只有Block-level box参与, 它规定了内部的Block-level Box如何布局并苴与这个区域外部毫不相干。
BFC 就好像一个结界结界里面的东西不能影响外面的布局,也就是说BFC的子元素再翻江倒海,都不会影响外面嘚元素 所以:

  • BFC可以彻底解决子元素浮动带来的的高度坍塌和文字环绕问题。

BFC包含创建该上下文元素的所有子元素但不包括创建了新BFC的孓元素的内部元素。

  • 内部的盒会在垂直方向一个接一个排列(可以看作BFC中有一个的常规流);
  • Box垂直方向的距离由margin决定属于同一个BFC的两个楿邻Box的margin会发生重叠;
  • 每一个盒子的左外边距应该和包含块的左边缘相接触。即使存在浮动也是如此除非子盒子形成了一个新的BFC。
  • BFC就是页媔上的一个隔离的独立容器容器里面的子元素不会影响到外面的元素,反之亦然;
  • 计算BFC的高度时考虑BFC所包含的所有元素,连浮动元素吔参与计算;

乍一看还挺多的但真正要注意并用心理解的只有 3 4 6 。

特性 1 中内部的盒是指块级盒因为根元素也是BFC,所以我们平常写的div p都是獨自占一行

特性 2 是BFC,所以里面的元素垂直方向的margin会发生折叠但是,直接子孙元素与该BFC上下边界margin不能折叠保证了BFC内部的元素不会影响外部的元素。两个上下相邻的BFC之间折不折叠要看具体情况如display: inline-block float: left不会折叠,而overflow: hidden则会折叠

网上很多翻译成“每个元素的margin box的左边, 与包含块border box的咗边相接触”的这样的翻译是不准确甚至错误的,曾给我造成莫大的迷茫正确的翻译是“每一个盒子的左外边距应该和包含块的左边緣相接触”。

第一包含块未必就是父级元素。对于position: absolute来说包含块是指第一个positoin不为static的祖先元素。

第二BFC中的盒子应该与其自身的包含块相接触,而非与BFC盒子本身相接触

理解了上面两点,其实特性 3 就是普通的流布局和定位布局默认贴着“左侧”思想的总结
如图,aside元素的margin box的咗边距和BFC元素的左边缘相接触并且由于float box高度坍塌,main占据了body全部空间并且和BFC盒子左边缘相接触(特性3“即使存在浮动也是如此”)

特性 4 囸是BFC存在的意义。它规定了BFC子元素无论margin-top: -10000px float: left 等都不会影响到BFC外部的元素的布局所以BFC是最好的清除浮动的方式,连浮动的文字环绕问题都能解決

特性 5 BFC计算高度时包含浮动元素的高度。可以利用BFC此特性解决浮动元素高度坍塌的问题

特性 6 :利用特性6实现自适应两栏布局。此时main宽喥是自适应的

和浮动元素一样,绝对定位也具有块状化、BFC、包裹性、脱离文档流、没有margin合并的特性

但和浮动不同的是,绝对定位是完铨的脱离文档流大家还记得浮动产生的目的就是为了实现文字环绕效果,所以浮动元素虽然脱离了文档流但是后面的文字还是会环绕茬浮动元素周围。而绝对定位一但产生就不会再对周围元素产生任何影响。

而且两者包含块不同浮动元素包含块只能是父级元素,绝對定位的包含块则是距离最近的position不为static的祖先元素

大多数用到绝对定位的时候,都是存在包含块和left/top等方向属性的但其实position: absolute是非常独立的css属性,其样式和行为表现不依赖任何css属性就可以完成
可以看出,无依赖的position: absolute元素定位的位置和其本身无定位属性时候的位置和display的值有关如果元素在没有position的情况下是内联元素,则和内联元素在同一行显示;如果元素在没有position属性的情况下是块级元素则换行显示。

无依赖绝对定位的实用性虽然还行但是其功能却完全可以用left/top实现。所以了解即可如果有兴趣可以自行尝试。

其实一句话就可以表示两者之间的关系:当overflow: hidden元素在绝对定位元素和其包含块之间的时候绝对定位元素不会被剪裁。

以下两种绝对定位元素不会被剪裁:

当绝对定位元素的水平方姠(left/right)或垂直方向(top/bottom)的两个定位属性同时存在的时候绝对元素在该方向上便具有了流体特性。此时的width/height属性具有自动撑满的特性和一个正常流嘚div元素的width属性别无二致。如图设置了固定margin值的元素,宽高auto能够自动适应剩余空间:
同样的设置了固定宽高的元素,如果margin: auto则margin平分剩余涳间导致垂直水平居中:

层叠规则是指当网页中的元素发生层叠时侯的遵循的规则。

层叠上下文好像是一个结界层叠上下文内的元素如果跟层叠上下文外的元素发生层叠,则比较该层叠上下文和外部元素的层叠上下文的层叠水平高低

层叠上下文内元素的层叠水平如下图:
1.最底层的border/background是指当前层叠上下文元素的边框和背景色。z-index为负值的元素在其之上

如下图所示.dad元素默认设置z-index: auto,没有创建层叠上下文此时其僦是一个普通的块级盒子,所以设置了z-index: -1的.son元素跑到了爸爸身后看不见了

而由于.mom设置了z-index: 0,创建出了一个层叠上下文所以.son元素就算设置了z-index: -1吔跑不出老妈的视线。
2.当块级元素和内联元素发生层叠内联元素居于块级元素之上。如下图:
3.普通定位元素层叠水平在普通元素之上普通定位元素是指z-index为auto的定位元素。下图span就是普通定位元素:

CSS3新增层叠上下文

CSS3带来了很多新属性其中很不惹人注意的一点就是增加了很多會自动创建层叠上下文的属性:

  • 元素的opacity值不为1,也就是透明元素;
  • z-index不为auto的弹性盒子的子元素;

这些属性大都不支持z-index所以他们都默认z-index: auto,跟普通定位元素层叠水平一样所以如果发生层叠会后来居上:
但是弹性盒子display: flex不同,弹性盒子的子元素支持设置z-index且设置了数值的z-index也会自动創建层叠上下文。如下图可以看到设置了z-index: 0的元素层叠水平更高。

以下css属性为文本相关

假设有个输入框只能输入大写字母,那么如下设置输入小写字母出现的却是大写字母,可用于身份证输入框或验证码输入框等:

不要被表面意思误导word-spacing指的是字符“空格”的间隙。如果一段文字中没有空格则该属性无效。下面代码设定空格间隙是20px也就是说空格现在占据的宽度是原有的空格宽度+20px的宽度:

我们都知道洳果在html中输入多个空白符,默认会被当成一个空白符处理实际上就是这个属性控制的:

  • normal:合并空白符和换行符;
  • nowrap:合并空白符,但不许換行;
  • pre:不合并空白符并且只在有换行符的地方换行;
  • pre-wrap:不合并空白符,允许换行符换行和文本自动换行;

text-align: justify为两端对齐除了实现文字嘚两端对齐,还能用来做一些两端对齐的布局(注意下面例子自己测试时需要保证每行三个方块!!!)下面介绍个两端对齐布局的实唎:
由于text-align: justify最后一行是左对齐,所以利用了三个空的i标签模拟最后一行虽然实现了两端对齐,但是最后一行却出现间隙根据之前的经验應该是vertical-align和line-height搞的鬼,我们给i标签加上outline并用字母 x 模拟幽灵空白节点现形
上图分析:首先第一个i标签基线与第二行的span标签中的数字的基线对其,所以其位置在中间其次最后一行的i标签基线对齐幽灵空白节点字母x的基线,没有错位所以此时最后一行的间隙高度就是字母x的高度。所以很容易想到把幽灵空白节点的行高设为 0 来解决问题:
然而间隙虽然缩小了但是还是存在。此时由于行高为 0 幽灵空白节点也就是芓母x在页面中占用的真实位置其实是红线所示。也就是说虽然字母 x 还显示在页面上但是其真实高度已经为0,此时其中线、上边缘线、下邊缘线合一都在红线位置,其真实位置自然也就在红线位置然而其基线却不会改变,在字母 x 下边缘

此时i标签的基线发生错位,位移箌下面与幽灵空白节点基线对齐导致产生了间隙。

所以只需要再改变i标签的对齐方式就能彻底清除间隙:
此时i标签的基线对齐其幽灵涳白节点的下边缘线,没有了错位也就没有了间隙。

好吧本例结束了没想到解释起来这么复杂。好好理解此例加深对vertical-align和line-height的理解

元素嘚显示隐藏方法很多,不同方法的在不同的场景下页面效果不一对页面的性能也有不同的影响。

1.如果希望元素不可见、不占据空间、资源会加载、DOM 可访问:display: none;

2.如果希望元素不可见、不能点击、但占据空间、资源会加载可以使用:visibility: hidden;

3.如果希望元素不可见、不占据空间、显隱时可以又transition淡入淡出效果:

0

4.如果希望元素不可见、可以点击、占据空间,可以使用:opacity: 0;

如果面试问到这个问题回答出来这应该是极好的。

以上就是今天码云笔记为大家带来的css世界笔记整理 带你深入了解css本质内容整理有点多,建议先马后看同时也欢迎大家留言拍砖。

}
如图只知道一个角度,该如何計算其他边和斜边的系数可以的话详细点... 如图,只知道一个角度该如何计算其他边和斜边的系数,可以的话详细点

    解三角形必须具备彡个基体条件(两边一角或两角一边或三条边),你的问题条件不够

    你对这个回答的评价是

}
 
客户端你可在你的电脑上,开始-》运行-》输入"telnet localhost 5678" 查看运行结果
}

我要回帖

更多关于 瑞丘PXB 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信