什么是网页布局?

        网站布局是一种定义网站结构的模式(或框架)。

        它具有为网站所有者和用户构造网站上存在的信息的作用。它为网页内的导航提供了清晰的路径,并将网站的最重要元素置于网站的正面和中心。

为什么要进行网页布局

        良好的布局可以使用户留在网站上,因为它可以轻松访问重要信息并直观地查找它们。不良的布局会使用户感到失望,然后他们会因为找不到所需的内容而迅速离开网站。

        出于这个原因,最好花尽可能多的时间找到所需的布局,因为用户给你的时间不会超过几秒钟。

        布局与用户对网站的参与度之间有着很强的关系,它确定了他们在网站页面上停留了多长时间,浏览了多少页面以及它们回到网站的频率。

基础布局

网页布局有很多种方式,一般分为以下几个部分:头部区域、菜单导航区域、内容区域、底部区域

头部区域位于整个网页的顶部,一般用于设置网页的标题或者网页的 logo

菜单导航条包含了一些链接,可以引导用户浏览其他页面

内容区域一般有三种形式:

  • 1 列:一般用于移动端。
  • 2 列:一般用于平板设备。
  • 3 列:一般用于 PC 桌面设备。

  底部区域在网页的最下方,一般包含版权信息和联系方式等。

多媒体查询

        CSS3的多媒体查询继承了CSS2多媒体类型的所有思想:取代了查找设备的类型,CSS3根据设置自适应显示。

媒体查询可用于检测很多事情,例如:

  • viewport(视窗)的宽度与高度
  • 设备的宽度与高度
  • 朝向(智能手机横屏,竖屏)。
  • 分辨率

目前很多针对苹果手机,Android手机,平板等设备都会使用到多媒体查询。

多媒体查询语法

        多媒体查询由多种媒体组成,可以包含一个或多个表达式,表达式根据条件是否成立返回true或 false。

        如果指定的多媒体类型匹配设备类型则查询结果返回true,文档会在匹配的设备上显示指定样式效果。除非你使用了not或 only操作符,否则所有的样式会适应在所有设备上显示效果。

@media not| only mediatype and (mediafeature and |or|not mediafeature) {
    #main {
    	width: 200px;
        float: left;
    }
}

弹性布局

flex布局是什么

        Flex是Flexible Box的缩写,意为“"弹性布局",用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为Flex布局。

注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

基本概念

        采用Flex布局的元素,称为Flex容器(flex container),简称""容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。布局原理就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式。

        容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

        项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

容器的属性

以下6个属性设置在容器上:

  • flex-direction:属性决定主轴的方向(即项目的排序方向),默认水平方向。
  • flex-wrap:默认情况下,项目都排在一条线(又称轴线)上,此属性定义如果一条轴线排不下,如何换行。它可能取三个值:
  1. nowrap(默认):不换行
  2. wrap:换行,第一行在上方
  3. wrap-reverse:换行,第一行在下方
  • flex-flow:
  • justify-content:属性定义了项目在主轴上的对齐方式
  • align-items:属性定义项目在交叉轴上如何对齐
  • align-content:属性定义了多根轴线的对齐方式,如果项目只有一根轴线,该属性

项目的属性

  • order属性:定义项目的排列顺序。数值越小,排列越靠前,默认为0 。
  • flex-grow属性:定义项目的放大比例,默认值为0,即如果存在剩余空间,也不放大。
  • flex-shrink属性:定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。
  • flex-basis属性:flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
  • flex属性:flex属性是flex-grow, flex-shrink和flex-basis的简写,默认值为0 1 auto。后两个属性可选。该属性有两个快捷值: auto (1 1 auto)和none (0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
  • align-self属性:align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

Grid布局

        Grid布局即网格布局,是一种新的css 布局模型,比较擅长将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系。号称是最强大的的css布局方案,是目前唯一一种css二维布局。利用Grid布局,我们可以轻松实现类似下图布局

<style>
        .y {
            width: 800px;
            height: 600px;
            border: 1px solid pink;
            display: grid;
            /*设置grid布局*/
            grid-template-columns: 1fr 2fr 1fr;
            /*设置行和列*/
            grid-template-rows: 90px auto 90px;
            margin: 0 auto;
            font-weight: bold;
            text-align: center;
        }
        
        .y1 {
            border: 1px solid red;
            grid-column-start: 1;/*从1列开始*/
            grid-column-end: 4;/*到4列结束*/
        }
        
        .y2 {
            border: 1px solid blue;
            grid-column-start: 1;
            grid-column-end: 2;
        }
        
        .y3 {
            border: 1px solid purple;
            grid-column-start: 2;
            grid-column-end: 4;
        }
        
        .y4 {
            border: 1px solid green;
            grid-column-start: 1;
            grid-column-end: 4;
        }
    </style>
</head>

<body>
    <div class="y">
        <div class="y1">头部</div>
        <div class="y2">左侧菜单栏</div>
        <div class="y3">右侧内容</div>
        <div class="y4">底部</div>
    </div>
</body>

当一个HTML元素将display属性设置为grid或inline-grid后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。

grid-template-columns  和 grid-template-rows用来声明行和列

fr单位

轨道可以使用任何长度单位进行定义。

网格引入了fr单位来帮助我们创建灵活的网格轨道。一个fr单位代表网格容器中可用空间的一等份。以下实例定义了一个网格定义将创建三个相等宽度的轨道,这些轨道会随着可用空间增长和收缩。

网格单元

一个网格单元是在一个网格元素中最小的单位,从概念上来讲其实它和表格的一个单元格很像。

网络线

划分网格的线,称为""网格线"。应该注意的是,当我们定义网格时,我们定义的是网格轨道,而不是网格线。Grid 会为我们创建编号的网格线来让我们来定位每一个网格元素。m列有m +1根垂直的网格线,n行有n +1跟水平网格线。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐