HTML页面布局与语义化

合理布局的必要性

  1. 有利于功能模块的划分,合理的布局使页面结构清晰明了,利于用户的使用
  2. 对不同的模块语义化有利于浏览器的SEO
  3. 合理的间隔与分割会使页面更美观

常见的布局

  1. 上方为导航栏将页面分为不同的功能区,左边的侧边栏为页面的目录,右侧可以展示广告以及进行补充说明

Vue.js 的官方文档就是这种典型的布局

  1. 上方为页头作为网页标题,其下方为导航栏,而后是可滚动的内容区,最后是显示网站信息的底部栏

学习强国的主页就是此类布局

语义化的作用

  1. 使页面结构清晰,功能明确,有利于后续开发与维护
  2. 有利于浏览器的识别,当用户使用朗读功能时,使用正确的标签能使其朗读出正确的段落
  3. 有利于浏览器的SEO,可以使网站在搜索引擎展示的列表排名靠前,增加访问量

如何进行语义化

  1. 每个html元素都有对应的功能与含义,如<p>标签表示段落,<h>标签表示标题.
  2. 具体的功能应当使用html实现,而不是使用无实际意义的<div>与CSS样式来表示
  3. 同样样式的实现应当交给CSS完成,不应该为了得到某个标签的默认样式而使用它,如为了加粗使用<h>标签,这样会使得页面逻辑混乱.

使用语义化的标签进行布局

通常我们使用<header>标签表示页头,<footer>标签表示页尾,<aside>标签表示侧边栏, 而主要的内容区则是用<article><section> 来表示,而<nav>表示导航

<article><section> 标签的区别

  1. <article> 通常用于表示文章,帖子,评论等大篇幅文字,<section>页面中的某段文字或文章中的某段文字

  2. <article>里可以有多个<section>

  3. <section>强调分段和分块,想将一段内容分为几段的时候可以使用<section>

  4. <article><section>更强调独立性,如果一段内容比较独立完整,使用<article>

使用flex布局轻松完成布局

flex 布局

容器: 在flex弹性布局中,容器的概念就是包裹着要排序的子盒子的父亲。即外层盒子(父盒子)

  1. 未设置flex前,div盒子受块级元素影响纵向排列,设置完后,盒子横向排列;

  2. 未设置flex前,子盒子相加宽或高超过父盒子的时候会溢出,设置之后不会溢出,宽与高也只能在父盒子宽高足够的情况下进行增长, 超过之后则总宽与总高以父盒子大小为准。

  3. 在flex容器中包含两个互相垂直的轴主轴和副轴。默认情况下为主轴对齐,主轴对齐会让元素横向排列。当为父盒子设置了特殊属性值之后,可以将子盒子从原来的主轴对齐变为副轴对齐,副轴对齐会让元素纵向排列,主轴的起始端为左边或者上边.

属性介绍

  1. flex-direction 对齐方式

    • row

      row值是默认值,可以让子盒子成横向排列,左对齐横向顺序排列,使得主轴为水平

    • column column值,可以让盒子成纵向排列,上对齐纵向顺序排列,使得主轴为垂直,会影响wrap和justify-content

    • row-reverse:右对齐反序横向排列

    • column-reverse:下对齐反序纵向排列

  2. flex-wrap 是否换行

    • nowrap nowrap是默认值,设置之后所有子盒子横向排列,当所有子盒子的宽度总和超过父盒子的宽度

    或者高度总和超过父盒子的高度时自动为每个子盒子压缩对应值,使得所有子盒子均匀的在父盒子内排列

    • wrap wrap值为换行,设置之后,子盒子如果宽度占满一行,则会开辟第二行,第二行会在盒子百分之五十处开辟,

    如果超出到第三行,则会把父盒子分为三行进行排列,以此类推

    • wrap-reverse wrap-reverse值为,从低端开始从左向右,如果宽度满了,则会向上均分空间
  3. flex-flow : 写法就是direction和wrap的值都写在这里面,是上面两个的缩写,没有先后顺序。

  4. justify-content:这个属性的作用是设置子容器沿着(主轴)排列元素之间的空间分布。子容器沿着主轴排列。而主轴则会受到flex-direction的影响

    • flex-start: 该值为默认值,其作用为主轴起始端对齐,紧密排列:

    • flex-end: 其作用为主轴末尾端对齐,紧密排列,与reverse不同的是,它不会修改元素排列顺序,只会修改元素对齐方式:

    • center: center会让元素居中紧密排列

    • space-around: 设置之后,每个子元素两侧的间隔都相等,子元素与子元素之间的间隔是子元素与边框间隔的一倍

    • space-between: 子元素首尾与父元素相贴,且子元素间的空隙均匀分布

    • space-evenly: 子元素首尾与父元素距离等于子元素之间的距离

  5. align-items:align-items属性就是副轴对齐

    • flex-start: 起始端对齐
    • flex-end: 末尾端对齐
    • flex-center 居中对齐
  6. align-content:这个属性只有flex-wrap为wrap(换行)时才有效。

    • flex-start: 该值为默认值,其作用为副轴起始端对齐,紧密排列:

    • flex-end: 其作用为副轴末尾端对齐,紧密排列,与reverse不同的是,它不会修改元素排列顺序,只会修改元素对齐方式:

    • center: center会让元素居中紧密排列

    • space-around: 设置之后,每个子元素两侧的间隔都相等

    • space-between: 设置之后,子元素上下两侧紧贴父元素边框中间间隔相等

    • stretch(默认值):轴线占满整个交叉轴。

代码演示

HTML部分:

html 复制代码
<div class="container">
    <header class="header">这是头部栏</header>
    <nav class="nav">这是导航栏</nav>
    <div class="main">
      <aside class="sidebar">这是侧边栏</aside>
      <section class="content">这是内容区域</section>
    </div>
    <footer class="footer">这是底部栏</footer>
  </div>

CSS部分:

css 复制代码
    * {
          margin: 0;
          padding: 0;
          box-sizing: border-box;
        }
        .container {
          display: flex;
          flex-direction: column;
          height: 100vh;
        }
        .header {
          background-color: lightblue;
          height: 50px;
        }
        .nav {
          background-color: lightgreen;
          height: 40px;
        }
        .main {
          display: flex;
          flex-grow: 1;
        }
        .sidebar {
          background-color: lightpink;
          width: 200px;
        }
        .content {
          background-color: lightyellow;
          flex-grow: 1;
        }
        .footer {
          background-color: lightgray;
          height: 50px;
        }

效果展示

相关推荐
天下无贼!11 分钟前
2024年最新版Vue3学习笔记
前端·vue.js·笔记·学习·vue
Jiaberrr11 分钟前
JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
前端·javascript·tree·树形·过滤筛选
赵啸林14 分钟前
npm发布插件超级简单版
前端·npm·node.js
罔闻_spider1 小时前
爬虫----webpack
前端·爬虫·webpack
吱吱鼠叔1 小时前
MATLAB数据文件读写:1.格式化读写文件
前端·数据库·matlab
爱喝水的小鼠1 小时前
Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
前端·javascript·vue.js
WeiShuai1 小时前
vue-cli3使用DllPlugin优化webpack打包性能
前端·javascript
Wandra1 小时前
很全但是超级易懂的border-radius讲解,让你快速回忆和上手
前端
ice___Cpu1 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
JYbill2 小时前
nestjs使用ESM模块化
前端