• 前端基础学习——CSS样式表制作设计基础


    前面还有一章,想了解的朋友可以往前面看看:前端基础学习——你必须掌握的CSS的知识 


    目录

    一. 盒子模型

    1.1.外边距样式

    1.2.边框样式

    1.3.内边距样式

    1.4.总结:盒子模型尺寸

    二. 元素默认样式与CSS重置

    三. 元素分类

    3.1.三种元素

    3.1.1 块级元素(block level)

    3.1.2 内联元素(inline 行内元素)

    3.1.3 块级内联元素

    3.2.块状元素与内联元素的盒子模型

    四. 盒子模型中的其他样式

    4.1.显示与隐藏

    4.2.内容溢出处理

    五. 新盒子模型

    六. 元素定位

    6.1 静态定位(文档流定位)

    6.2 相对定位

    1.3.绝对定位

    1.4.固定定位

    6.5 元素定位总结

    6.6 z-index样式

    七. 页面布局概述

    八. 弹性布局(弹性盒子)

    8.1 重要概念:主轴与侧轴

    8.2 flex-direction样式

    8.3 flex-wrap样式

    8.4 justify-content样式

    8.5 align-items与align-content样式

    8.6 flex样式

    九. 布局实例

    9.1 典型1-3-1布局

    9.2 典型自适应高度后台管理布局

    十. 前端学习专栏


    一. 盒子模型

            每个HTML元素都可以看作一个装了东西的盒子:

    • 宽度、高度:盒子本身具有宽度(width)和高度(height)
    • 内边距:盒子里面的内容到盒子边框之间的距离即内边距(padding)
    • 边框:盒子本身有边框(border)。
    • 外边距:盒子边框外和其他盒子之间,还有外边距(margin)

    标准盒子模型示意图:

    1.1.外边距样式

    外边距实战应用:盒子水平居中

    1. <!-- 注意:居中的元素要设置width属性。否则,元素撑满左右两边,居中就没有意义。 -->
    2. p{
    3. width:200px;
    4. margin:0 auto;
    5. }
    6. <p>这是一个段落</p>

    1.2.边框样式

            边框样式主要有三种:

    • border-width: 设置或检索对象边框宽度。
    • border-style: 设置或检索对象边框样式。
    • border-color: 设置或检索对象边框颜色。

    注意:也可以同时设置边框的宽度、样式、颜色属性: border: #00FF00 4px double; (属性设置没有顺序)

    1.3.内边距样式

    1.4.总结:盒子模型尺寸

    • 盒子模型总尺寸=border(两个边框宽度)+padding(两个内边距宽度)+内容宽度
    • 盒子模型占用空间=margin(两个外边距宽度)+盒子模型总尺寸

    二. 元素默认样式与CSS重置

            常用元素默认样式:

    1. 标签的margin为8px
    2. p标签的上下外边距为16px
    3. h1标签的上下外边距为21.440px
    4. ul标签的上下外边距也为16px,左内边距也为40px

    CSS重置:在实际开发中,为了兼容性,也为了开发者更好的设置自己想要的样式,那么凡是浏览默认的样式,都不会使用,这就是CSS重置。

    1. /********************** 这是一个最简单的CSS重置 **********************/
    2. body,div,ul,ol,li,p,h1,h2,h3,h4,h5,h6,span,a,img,form{
    3. margin: 0;
    4. padding: 0;
    5. }
    6. ul{
    7. list-style: none;
    8. }
    9. a{
    10. text-decoration: none;
    11. }

    三. 元素分类

    3.1.三种元素

    元素分类有三种:行级元素(内联元素)、块级元素、行内块级元素

    3.1.1 块级元素(block level)

    1. <div></div>
    2. <p></p>
    3. <ul></ul>
    4. <h1></h1>
    5. ... ...

    3.1.2 内联元素(inline 行内元素)

    1. <span></span>
    2. <a></a>
    3. <strong>
    4. 一段文字(匿名内联元素)
    5. ... ...

    3.1.3 块级内联元素

    1. <img>
    2. <table></table>
    3. <form></form>
    4. ... ...

    3.2.块状元素与内联元素的盒子模型

    • 内联元素从左到右横向排列,到最右端自动折行,即不独占一行 块级以块状显现,并和同级块依次垂直排列,左右撑满,即独占一行。
    • 块级元素可以包含内联元素和块级元素(P标签不能包含P标签)。 但内联元素不能包含块级元素。
    • 内联元素与块级元素属性的不同,还主要体现在盒模型属性上。
    1. 内联元素它的宽度和高度是自动的、也就是由内容撑开的。因此设置width无效,height无效。但可以设置line-height。
    2. 内联元素的border无效,margin上下无效,padding上下无效。也就是padding和margin的left和right是可以设置的 。
    • img比较特殊,它的border,margin,padding是有效的。

    四. 盒子模型中的其他样式

    4.1.显示与隐藏

            display样式有两个功能:

    • 控制元素的显示和隐藏
    • 块级元素与行级(内联)元素的转变

    display样式的值有如下几种:

    4.2.内容溢出处理

    如果块的尺寸是固定的,而内容却有可能超出其尺寸时,可以使用overflow。

    overflow属性:设置当对象的内容超过其指定的高度或宽度时如何处理内容。


    五. 新盒子模型

            CSS3之前的盒子模型,可以说是content-box型盒子,即宽和高为内容,我们通常称为内容盒子。如果一个盒子有边框、或内边距等设置,那么就要注意了,内容盒子的总体宽和高就会比width与height的实际尺寸要大。这种现象给我们在网页布局中造成了一定的困扰。

            CSS3之后新增了一种盒子模型,可以说是border-box型盒子,即宽和高为边框,我们通常称为边框盒子。边框盒子的总体尺寸不会受到边框、或内边距的影响,总体尺寸始终等于width与height的设置。

            那么,可以使用box-sizing属性来设置盒子模型类型,此属性值有两个:

    • border-box:边框盒子。
    • content-box:内容盒子(默认)。
    1. div{
    2. width: 200px;
    3. height: 200px;
    4. /*值有两个: border-box:边框盒子; content-box:内容盒子(默认)*/
    5. box-sizing: border-box;
    6. padding: 30px;
    7. background-color: orange;
    8. border: solid 30px blue;
    9. margin: 50px;
    10. }

    总结:使用了边框盒子,就可以任意设置内边距、边框了,而且不用担心会改变盒子的总体尺寸。


    六. 元素定位

            为了实现网页整体布局,我们先要知道,一个元素,是如何定位到页面上的某个位置的,这就是元素定位。

            元素定位有四种,可以使用position样式来设置元素定位,所以此属性值有四种:

    • static:静态定位(默认)。依据文档流定位。
    • relative:相对定位。以自身为基准,设置坐标(left、top、right、bottom),不脱离文档流。
    • absolute:绝对定位。以父元素为基准,设置坐标(left、top、right、bottom),脱离文档流。
    • fixed:固定定位。以浏览器窗口为基准,设置坐标(left、top、right、bottom),脱离文档流。

    6.1 静态定位(文档流定位)

    静态定位:默认。依据文档流定位。

            特点:

    • 将页面上的元素,按照html的书写顺序,从上到下,从左到右,依次排列。
    • 内联元素不独占一行,块级元素独占一行。

    1. <p>这是一个p标签</p>
    2. <a href="">跳转百度</a>
    3. <span>这是一个内联的span标签</span>
    4. <ul>
    5. <li>html</li>
    6. <li>css</li>
    7. <li>javascript</li>
    8. </ul>

    6.2 相对定位

    相对定位:以自身为基准,设置坐标(left、top、right、bottom),不脱离文档流。

            特点:

    1. 以自身为基准定位。
    2. 不脱离文档流。也就是说:相对定位元素仍然会被文档流中的其它元素所影响。
    3. 根据坐标定位到新位置之后,并不回收原位置空间。

    1. <style>
    2. .one{
    3. width: 200px;
    4. height: 100px;
    5. background-color: red;
    6. position: relative;
    7. left: 100px;
    8. top:50px;
    9. }
    10. </style>
    11. <p>这是一个p标签</p>
    12. <p>这是一个p标签</p>
    13. <p>这是一个p标签</p>
    14. <div class="one"></div>

    1.3.绝对定位

    绝对定位:以父元素为基准,设置坐标,脱离文档流。

            特点:

    1. 脱离文档流。也就是说:绝对定位元素将不在被文档流中的其它元素所影响。
    2. 根据坐标定位到新位置之后,原位置空间会被回收。
    3. 如果父元素也为relative或absolute定位,那么就以父元素为基准。
    4. 如果父元素不是relative定位,也不是absolute定位,那么一律以body为基准。

    1. <style>
    2. .one{
    3. width: 200px;
    4. height: 100px;
    5. background-color: red;
    6. position: absolute;
    7. left: 100px;
    8. top:50px;
    9. }
    10. </style>
    11. <p>这是一个p标签</p>
    12. <p>这是一个p标签</p>
    13. <p>这是一个p标签</p>
    14. <div class="one"></div>

    1.4.固定定位

    固定定位:以浏览器窗口为基准,设置坐标(left、top、right、bottom),脱离文档流。

            特点:

    • 元素始终固定在某个坐标位置,body以及body中的任何元素都不会对其产生任何影响。

    1. <style>
    2. .one{
    3. width: 100%;
    4. height: 60px;
    5. background-color: red;
    6. position: fixed;
    7. left: 0;
    8. top:0;
    9. }
    10. </style>
    11. <div class="one">header</div>
    12. <p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p>
    13. <p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p>
    14. <p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p>
    15. <p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p>
    16. <p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p>
    17. <p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p>

    6.5 元素定位总结

    • 绝对定位不能有效扩展和维护。只能应用在某个局部。
    • 相对定位只限制自身,只能应用在某个局部。
    • 固定定位只限制自身,只能应用在某个局部。
    • 所以在实际开发中,都使用文档流定位来进行页面布局,就是静态定位(默认)。它能够随着页面元素的变化而自动调节。

    6.6 z-index样式

            绝对定位元素与固定定位元素脱离了文档流,可以把它想象为:此元素漂浮在网页上方。 那么,当这些元素位置有重叠时,就会出现:元素之间如何覆盖的问题。此问题可以使用z-index样式来解决。

    z-index样式的值是一个整形数,就表示元素所在的层级。

    1. <style>
    2. .one{
    3. width: 200px;
    4. height: 200px;
    5. background-color: red;
    6. position: absolute;
    7. left: 0;
    8. top:0;
    9. z-index: 2;
    10. }
    11. .two{
    12. width: 200px;
    13. height: 200px;
    14. background-color: blue;
    15. position: absolute;
    16. left: 100px;
    17. top:100px;
    18. z-index: 1;
    19. }
    20. </style>
    21. <div class="one"></div>
    22. <div class="two"></div>

    七. 页面布局概述

            网页布局方式有很多,各有各的特点:

    • 传统的 DIV+CSS+float(浮动) 布局方式,适用于PC端。
    • 自适应布局方式,要开发多套页面,服务器根据不同的客户端返回不同的页面。
    • 响应式布局方式,开发一套页面,根据媒体查询返回的结果,跳转布局以适用不同的客户端。
    • 多列布局方式,类似报纸排版的样式。
    • 弹性布局,适用与PC端与移动端。
    • ... ...

    八. 弹性布局(弹性盒子)

            一个元素的display属性值设置为flex,那么这个元素中的子元素,就会遵循弹性布局的规则。

    display:flex  /*flex是flexible box的缩写*/

            此时,这个元素就可以称为是一个弹性布局容器(弹性容器),它内部的子元素,将只按照弹性布局的规则来排列和对齐,以前的float、clear、块状与内联、vertical-align属性都不能用了。

    8.1 重要概念:主轴与侧轴

    弹性布局中的一个重要概念:主轴与侧轴:

    弹性盒子中默认存在两根轴,一个是水平方向的主轴,一个是垂直方向的侧轴。

            注意点:

    1. 主轴的开始位置叫做 main start、 结束位置叫做 main end;
    2. 侧轴的开始位置叫做cross start、结束位置叫做cross end;
    3. 侧轴永远垂直于主轴;

    8.2 flex-direction样式

    flex-direction属性就是用来设置主轴方向的。

    flex-direction:row        /*子元素沿主轴方向排列,也就是水平方向。 row为默认值*/
    flex-direction:column     /*子元素沿侧轴方向排列,也就是垂直方向。*/

    一个完整的例子:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <style>
    7. body{
    8. display: flex; /*将body设置为弹性布局*/
    9. flex-direction: column; /*这里设置为侧轴方向排列*/
    10. }
    11. .son{
    12. width: 100px;
    13. height: 100px;
    14. border: solid 2px #f90;
    15. background-color: yellow;
    16. }
    17. </style>
    18. </head>
    19. <body>
    20. <div class="son">1</div>
    21. <div class="son">2</div>
    22. <div class="son">3</div>
    23. <div class="son">4</div>
    24. <div class="son">5</div>
    25. </body>
    26. </html>

            总结:

    • 在弹性容器中,子元素想要水平方向排列,那就在弹性盒子中设置:flex-direction:row
    • 在弹性容器中,子元素想要垂直方向排列,那就在弹性盒子中设置:flex-direction:column
    • 在弹性容器中,以前的“块状元素独占一行”,“内联元素不独占一行”,“元素水平排列时需要浮> 动”等等规则,一律不再有效。

    8.3 flex-wrap样式

            由于弹性布局中的子元素能自动伸缩,所以,当父容器此次小于子元素整体尺寸时,子元素不会自动换行,而是自动收缩。

    1. body{
    2. display: flex;
    3. }

    那么,如果想要让子元素自动换行,可以使用flex-wrap:wrap

    1. body{
    2. display: flex;
    3. flex-wrap: wrap; /*当弹性布局容器尺寸小于所以子元素尺寸时,子元素会自动换行*/
    4. }

            总结:

    1. 在弹性盒子中,默认子元素不换行,即使是容器宽度不够时,子元素也不换行,只是宽度缩小。
    2. 如果在父容器宽度不够时想要自动换行,那么设置:flex-wrap:wrap

    8.4 justify-content样式

            以主轴方向为例:子元素水平方向排列后,默认依次靠左排列。如果想让子元素居中、居右等,那么就可以设置justify-content样式。值有五种:

    • flex-start(默认):左对齐。
    • flex-end:右对齐。
    • center:居中。
    • space-between:两端对齐,子元素之间间距都相等。
    • space-around:每个子元素两侧的间距相等。所以子元素之间间距比子元素到边框 间距大一倍。
    1. body{
    2. display: flex;
    3. justify-content: space-between; /*两端对齐,子元素之间间距都相等。*/
    4. }

    总结:在弹性盒子中,子元素主轴对齐方式使用justify-content来设置

    8.5 align-items与align-content样式

            以主轴方向为例:子元素水平方向排列后,如果想让子元素垂直居中,那么就可以设置align-items样式。常用值有三种:

    • flex-start(默认):上对齐。
    • flex-end:下对齐。
    • center:居中。
    1. html,body{
    2. height: 100%; /*html与body的高度默认为0,所以要设置高度*/
    3. }
    4. body{
    5. display: flex;
    6. flex-wrap: wrap; /*如果允许换行,那么换行后,多行元素中的每一行也会垂直居中*/
    7. justify-content: center;
    8. align-items: center; /*不论是一行,还是多行,都会垂直居中*/
    9. }

            再来看align-content样式:align-content样式对单行没有效果,对多行有效果,而且是将多行整体作为一个整体附加效果的。

            总结:在弹性盒子中,子元素侧轴对齐方式可以使用align-items或align-content

    • align-items对单行和多行都有效,align-content对单行无效。
    • 在多行中,align-items让每一行都在各自范围内垂直居中。 align-content将多行作为一个整> 体,然后居中。

    8.6 flex样式

            如果想让每个子元素所占空间不一致,那么可以使用flex给子元素分配空间。 使用flex时要注意一下两点:

    • flex样式是设置在子元素上的。
    • 如果设置了flex,那就说明要给子元素按比例分配空间,因此width与height就失效了。

    实例1:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <style>
    7. html,body{
    8. height: 100%;
    9. }
    10. body{
    11. display: flex;
    12. }
    13. .son{
    14. width: 100px;
    15. height: 100px;
    16. border: solid 2px #f90;
    17. background-color: yellow;
    18. }
    19. </style>
    20. </head>
    21. <body>
    22. <div class="son" style="flex:1;">1</div>
    23. <div class="son" style="flex:1;">2</div>
    24. <div class="son" style="flex:2;">3</div>
    25. <div class="son" style="flex:2;">3</div>
    26. </body>
    27. </html>

            上面实例中:flex样式后跟1个值:表示子元素所占空间的比例。三个div的宽度分别是窗口宽度的:1/4、1/2、1/4

    实例2:

    1. <!-- 第一个div的宽度是400px,是不变的。第二个和第三个div将剩下宽度按比例分配:1/3、2/3 -->
    2. <body>
    3. <div class="son" style="flex:0 0 400px;">1</div>
    4. <div class="son" style="flex:1;">2</div>
    5. <div class="son" style="flex:2;">3</div>
    6. </body>

            上面实例中:flex样式后跟3个值:

    1. 第一个值:子元素尺寸自动放大值
    2. 第二个值:子元素尺寸自动缩小值
    3. 第三个值:子元素尺寸("auto"或"%"、"px"、"em" 或任何其他长度单位的数字。)

    例如:

    • 0 1 auto(默认):父元素尺寸变化时,子元素不放大,只缩小,尺寸自动充满。
    • 1 1 auto: 父元素尺寸变化时,子元素自动放大缩小,尺寸自动充满。
    • 0 0 300px: 父元素尺寸变化时,子元素不放大缩小,尺寸固定。

    总结:可以使用flex让一行内的所有子元素自动撑满窗口宽度。而且每个子元素的宽度可以按比例> 进行分配。


    九. 布局实例

    9.1 典型1-3-1布局

    1. <style>
    2. header,nav,article,section,aside,footer{
    3. background-color: #666;
    4. }
    5. p{
    6. line-height: 50px;
    7. }
    8. .container{
    9. width: 1200px;
    10. margin: 0 auto;
    11. }
    12. .container header{
    13. width: 100%;
    14. height: 60px;
    15. margin-bottom: 10px;
    16. }
    17. .container nav{
    18. width: 100%;
    19. height: 60px;
    20. margin-bottom: 10px;
    21. }
    22. /*网页主要内容部分不能设置高度*/
    23. .container .main{
    24. width:100%;
    25. display: flex;
    26. margin-bottom: 10px;
    27. }
    28. .container .main article{
    29. flex: 0 0 200px;
    30. }
    31. .container .main section{
    32. flex: 1;
    33. margin: 0 10px;
    34. }
    35. .container .main aside{
    36. flex: 0 0 200px;
    37. }
    38. .container footer{
    39. width: 100%;
    40. height: 60px;
    41. }
    42. </style>
    43. <!-- 总容器 -->
    44. <div class="container">
    45. <header></header>
    46. <nav></nav>
    47. <!-- 网页主要内容部分 -->
    48. <div class="main">
    49. <article></article>
    50. <section>
    51. <p>内容部分</p><p>内容部分</p><p>内容部分</p><p>内容部分</p>
    52. </section>
    53. <aside></aside>
    54. </div>
    55. <footer></footer>
    56. </div>

            注意点:

    1. 由于PC端屏幕尺寸相对固定,所以采用定宽不定高的原则。
    2. 所有页面元素都放在一个总容器中,然后就可以使总容器水平居中了。
    3. 网页主要内容部分不能设置高度,而应该是由内容撑开的。

    9.2 典型自适应高度后台管理布局

    1. <style>
    2. html,body,.container {
    3. width: 100%;
    4. height: 100%;
    5. margin: 0;
    6. padding: 0;
    7. display: flex;
    8. flex-direction: column;
    9. }
    10. .container header {
    11. flex:0 0 60px;
    12. width: 100%;
    13. background-color: #B3C0D1;
    14. }
    15. /*撑满header与footer剩余的高度*/
    16. .container .main {
    17. flex:1;
    18. width: 100%;
    19. display: flex;
    20. }
    21. .container .main aside {
    22. flex: 0 0 200px;
    23. background-color: #D3DCE6;
    24. }
    25. .container .main section {
    26. flex: 1;
    27. background-color: #E9EEF3;
    28. }
    29. .container footer {
    30. flex:0 0 60px;
    31. width: 100%;
    32. background-color: #B3C0D1;
    33. }
    34. </style>
    35. <!-- 总容器 -->
    36. <div class="container">
    37. <header></header>
    38. <!-- 网页主要内容部分 -->
    39. <div class="main">
    40. <aside></aside>
    41. <section></section>
    42. </div>
    43. <footer></footer>
    44. </div>

            注意点:

    • 后台管理页面布局的宽度和高度,一般都会自动撑满整个窗口。
    • header和footer的高度可以固定,中间内容部分撑满剩余高度。

    十. 前端学习专栏

    https://blog.csdn.net/weixin_53919192/category_11897910.html?spm=1001.2014.3001.5482icon-default.png?t=M5H6https://blog.csdn.net/weixin_53919192/category_11897910.html?spm=1001.2014.3001.5482

  • 相关阅读:
    UWB 定位技术方案选择
    【MindSpore】【训练】图模式训练过程中出现问题
    【自动驾驶】ROS小车系统
    大数据技术之 Kafka
    包管理工具npm和Yarn的区别,我们该如何选择?
    案例分享|生产环境MQ集群一个非常诡异的消费延迟排查
    中心经纬度计算周边8宫格GeoHash编码
    基于python+django+vue+MySQL的酒店推荐系统
    第十九章 文件操作
    C++实战-Linux多线程(入门到精通)
  • 原文地址:https://blog.csdn.net/weixin_53919192/article/details/125613395