海无涯,不要沉浸在知识的海洋里,迷失自己。
要知道自己想要什么,抓住重点,不忘初心。
这个世界上百分之20的人,掌握着百分之80的财富。
接下来一系列教程,就带领大家抓住重点,一起做那百分之20的人。
往期知识点回顾:
重点属性-media
重点属性-position
重点属性-float
重点属性-flex
重点属性-overflow
重点属性-background
一、重点属性display
display 是CSS中最重要的用于控制布局的属性。每个元素都有一个默认的 display 值,这与元素的类型有关。对于大多数元素它们的默认值通常是 block 或 inline 。一个 block 元素通常被叫做块级元素。一个 inline 元素通常被叫做行内元素。
block
div 是一个标准的块级元素。一个块级元素会新开始一行并且尽可能撑满容器。其他常用的块级元素包括 p 、 form 和HTML5中的新元素: header 、 footer 、 section 等等。
inline
span 是一个标准的行内元素。一个行内元素可以在段落中 <span> 像这样 </span> 包裹一些文字而不会打乱段落的布局。 a 元素是最常用的行内元素,它可以被用作链接。
none
另一个常用的display值是 none 。一些特殊元素的默认 display 值是它,例如 script 。 display:none 通常被 JavaScript 用来在不删除元素的情况下隐藏或显示元素。
它和 visibility 属性不一样。把 display 设置成 none 元素不会占据它本来应该显示的空间,但是设置成 visibility: hidden; 还会占据空间。
其他 display 值
还有很多的更有意思的 display 值,例如 list-item 和 table 。之后我们会讨论到 inline-block 和 flex 。
额外知识点
就像我之前讨论过的,每个元素都有一个默认的 display 类型。不过你可以随时随地的重写它!虽然“人为制造”一个行内元素可能看起来很难以理解,不过你可以把有特定语义的元素改成行内元素。常见的例子是:把 li 元素修改成 inline,制作成水平菜单。
面试题:
1.常用的dispaly属性值有哪些?
block、inline、inline-block、flex、table、list-item........
2.display:none 与visibility: hidden 有什么区别?
把 display 设置成 none 元素不会占据它本来应该显示的空间,但是设置成 visibility: hidden; 还会占据空间。
3.行内元素和块元素的区别?
一般来说,html的元素分为两种,即块级元素和行内元素。
块级元素:块状元素排斥其他元素与其位于同一行,可以设定元素的宽(width)和高(height),块级元素一般是其他元素的容器,可容纳块级元素和行内元素。
行内元素:行内元素不可以设置宽(width)和高(height),但可以与其他行内元素位于同一行,行内元素内一般不可以包含块级元素。行内元素的高度一般由元素内部的字体大小决定,宽度由内容的长度控制。
常见块级元素有:h1,h2,h3,h4,h5,h6,p,div,dl,dt,hr,ol,ul,li,form,pre,table,td,th;
常见内联元素有:em,strong,span,button,input,label,code,select,img,textarea
两者之间的区别:
区别:
1.块级元素占据一整行,内联元素的宽度是其元素内容的宽度,多个内联元素排列会放在同一行里除非放不下,才会挤到新的一行
2.块级元素可以设置宽度width和高度height,而内联元素设置widht和height是无效的
3.块级元素可以包含块级元素和内联元素,而内联元素只能包含文本
4.块级元素可以设置margin和padding属性,行内元素只有margin-left、margin-right、padding-left、padding-right起作用。
需要敲代码练习的地方:
熟悉对块级元素和行内元素
对块级元素和行内元素的区别进行实践练习
对块级元素和行内元素width 和 height 的要求
块级元素和行内元素对设置margin和padding属性的要求
display:none 与visibility: hidden 属性的区别
参考文献:https://developer.mozilla.org/en-US/docs/Web/CSS/display
它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局 ?
Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。
Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。
Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。
<section>
<div>
<p></p>
</div>
<div>
<p></p>
</div>
<div>
<p></p>
</div>
</section>
<!-- 以上代码section为容器、div为项目 (项目不包括p标签) -->
容器里面的水平区域称为"行",垂直区域称为"列"。
行和列的交叉区域,称为"单元格"。
划分网格的线,称为"网格线"。水平网格线划分出行,垂直网格线划分出列。
1、启动网格布局
display:grid
/*
属性值:
grid 为块状网格容器 (容器自上而下排列)
line-grid 为内联网格容器(容器横向排列)
*/
2、划分行和列
grid-template-columns:
grid-template-rows:
grid-template-columns:200px 200px 200px
grid-template-rows:200px 200px 200px
grid-template-columns:repeat(auto-fill,33.33%);
/*
当项目宽高固定,容器不固定的情况下,自动填充网格列数
*/
grid-template-columns:repeat(auto-fill,33.33%);
/*
当项目宽高固定,容器不固定的情况下,自动填充网格列数
*/
grid-template-columns:repeat(auto-fill,33.33%);
/*
当项目宽高固定,容器不固定的情况下,自动填充网格列数
*/
为了方便表示比例关系,网格布局提供了fr关键字(fraction 的缩写,意为"片段")。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。
grid-template-columns:1fr 3fr 1fr;
grid-template-rows:repeat(3,100px);
grid-template-columns: 1fr 1fr minmax(100px, 1fr);
/*
minmax(100px, 1fr)表示列宽不小于100px,不大于1fr
*/
grid-template-columns:30px auto 20px;
grid-template-rows:repeat(3,100px);
grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];
grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
/*
指定网格布局为3行x3列,因此有4根垂直网格线和4根水平网格线。方括号里面依次是这八根线的名字。
*/
3、设置行间距 || 列间距
grid-row-gap:20px /* 行间距 */
grid-column-gap:20px /* 列间距 */
grid-gap:30px 30px /* 复合式写法 */
?
/*注:新版本已经省略 grid- 前缀 row-gap \ column-gap \ gap*/
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
grid-template-areas: 'a b c'
'd e f'
'g h i';
?
/*
将整个网格容器分为9个区域,每个区域对应一个单元格
通过grid-area 指定项目名称。
*/
display:grid;
grid-template-columns:repeat(3,100px);
grid-template-rows:repeat(3,100px);
grid-template-areas: 'a a a'
'. . b'
'. c c';
5、规划子元素放置的顺序(默认为先排行后排列)
grid-auto-flow: column | row;
/*
row dense和column dense。
这两个值主要用于,某些项目指定位置以后,剩下的项目怎么自动放置。
*/
6、设置单元格内容在单元格内 水平 | 垂直 的对齐方式
justify-items: start | end | center | stretch;
align-items: start | end | center | stretch;
place-items: <justify-items> <align-items> /*复合式写法*/
/*
start:对齐单元格的起始边缘。
end:对齐单元格的结束边缘。
center:单元格内部居中。
stretch:拉伸,占满单元格的整个宽度(默认值)。
*/
7、设置整个内容区域在容器里面的水平 | 垂直 对齐方式
justify-content:start | end | center | stretch | space-around | space-between | space-evenly;
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
place-content: <justify-content> <align-content> /* 复合式写法 */
?
/*
start - 对齐容器的起始边框。
end - 对齐容器的结束边框。
center - 容器内部居中。
stretch - 项目大小没有指定时,拉伸占据整个网格容器。
space-around - 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与容器边框的间隔大一倍。
space-between - 项目与项目的间隔相等,项目与容器边框之间没有间隔。
pace-evenly - 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔。
*/
grid-column-start
grid-column-end
grid-row-start
grid-row-end
?
/*
grid-column-start属性:左边框所在的垂直网格线
grid-column-end属性:右边框所在的垂直网格线
grid-row-start属性:上边框所在的水平网格线
grid-row-end属性:下边框所在的水平网格线
*/
grid-column-start:1;
grid-column-end:3;
grid-row-start: 2;
grid-row-end:4;
2、grid-column , grid-row
grid-column属性是grid-column-start和grid-column-end的合并简写形式 grid-row属性是grid-row-start属性和grid-row-end的合并简写形式。
CSS世界中的float属性是一个年代非常久远的属性。虽然最初创造浮动并不是为了用于页面布局,但它在布局方面表现得很出色。然而为了理解浮动,我们首先必须牢记它的设计初衷。Web诞生之初,带宽就那么一点点,我们能够做到的也只是展示文字以及零星图片而已,怎么可能浮动设计的目的就是为了实现各种砖头式的复杂布局呢?那个年代复杂布局都是用<table>实现的。既然这样,那float属性设计的目的究竟是什么呢?
很简单,一句话:浮动的本质就是为了实现文字环绕效果。而这种文字环绕,主要指的就是文字环绕图片显示的效果。所以,大家应该也多少对为什么老IE浏览器与浮动相关的bug一火车都装不下有些了解了吧!人家的功能本来就很单纯,只是让文字可以绕着图片跑,你偏要各种布局,结果撑不住了吧!
所以说:浮动是魔鬼,少砌砖头、少浮动,要更多地去挖掘CSS世界本身的“流动性”和“自适应性”,以构建能够适用于各种环境的高质量的网页布局。好的网页应该如同好的建筑。传统的楼房是典型的“刚”式结构,砖头加楼板,问题不言而喻,一个小小的地震可能就被夷为平地;而好的楼房应该是有“柔”在其中,也就是高质量的钢筋结构,当地震导致房屋摇晃的时候,可以通过钢筋的“柔性”卸力而保障整体结构的稳固。台风袭来,很少见到说柔弱的柳树被吹倒,反而会经常看到坚固的电线杆被风吹倒的消息,道理其实也类似。
浮动有三个关键字可以选择,left为向左浮动,right为向右浮动,none为不浮动。无论是行内元素(inline)还是块级元素(block),设置浮动后都会变成块级元素。但表现得却更像行内块元素(inline-block),因为在没有明确宽度的时候,宽度会随着内容自适应,而不是占据一行。
过去,浮动的行为经常受到浏览器bug的干扰,特别是在IE6和IE7中。幸亏这些浏览器几乎已经淡出市场了,我们不必再担心那些bug了。现在我们可以保证各种浏览器对浮动的处理是一致的。但是浮动仍有一些行为会让你措手不及。这些并不是bug,而是因为浮动严格遵循了标准。让我们来看看浮动如何工作,以及怎样调整浮动的行为来实现理想的布局。
float都有哪些有意思的特性呢?具体如下:
所谓“包裹性”,由“包裹”和“自适应性”两部分组成。包裹假设浮动元素父元素宽度180px,浮动元素子元素是一个120px宽度的图片,则此时浮动元素宽度表现为“包裹”,就是里面图片的宽度120px,代码如下:
.div { width: 180px; }
.float { float: left; }
.float img { width: 120px; }
<div class="div">
<div class="float">
<img src="float.jpg">
</div>
</div>
自适应性,如果浮动元素的子元素不只是一张120px宽度的图片,还有一大波普通的文字,例如:
<div class="father">
<div class="float">
<img src="float.jpg">大家好,我是码农洞见。
</div>
</div>
则此时浮动元素宽度就自适应父元素的180px宽度,最终的宽度表现也是180px。
块状化的意思是,元素一旦float的属性值不为none,则其display计算值就是block或者table。
float通过破坏正常CSS流实现CSS环绕,带来了烦人的“高度塌陷”的问题,然而,凡事都具有两面性,只要了解透彻,说不定就可以变废为宝、化腐朽为神奇。例如。我们可以利用float破坏CSS正常流的特性,实现两栏或多栏的自适应布局。
浮动会影响周围元素,并且还会引发很多意想不到的问题。在CSS中,我们可以使用clear属性来清除浮动带来的影响。clear属性语法如下:
clear: none | left | right | both
在实际开发中,我们几乎不会使用“clear:left”或“clear:right”来单独清除左浮动或右浮动,往往都是直截了当地使用“clear:both”来把所有浮动清除,既简单又省事。也就是说,我们只需要记住“clear:both”就可以了。
通过阅读本文我们了解到浮动的设计初衷是让文字围绕一个元素排列,但有时这种效果并不是我们想要的。使用清除浮动来包含浮动元素。所谓生生相克,既然有破坏,就有保护其他元素不被破坏的属性。总之,只有深入理解浮动的工作原理,勤加练习才有可能避开常见的陷阱。达到选择合适的工具来实现想要的效果。
为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。关注【码农洞见】,一起学习和交流吧!
*请认真填写需求信息,我们会在24小时内与您取得联系。