iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用CSS怎么实现一个响应式布局系统
  • 648
分享到

使用CSS怎么实现一个响应式布局系统

2023-06-08 06:06:40 648人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关使用CSS怎么实现一个响应式布局系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是csscss是一种用来表现html或XML等文件样式的计算机语言,主要是用

这篇文章将为大家详细讲解有关使用CSS怎么实现一个响应式布局系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

什么是css

css是一种用来表现html或XML等文件样式的计算机语言,主要是用来设计网页的样式,使网页更加美化。它也是一种定义样式结构如字体、颜色、位置等的语言,并且css样式可以直接存储于HTML网页或者单独的样式单文件中,而样式规则的优先级由css根据这个层次结构决定,从而实现级联效果,发展至今,css不仅能装饰网页,也可以配合各种脚本对于网页进行格式化。

响应式布局系统,在现在流行的 CSS 框架中已经非常常见了。它主要由容器类和约定一行列数的栅格系统组成,组成了一个框架的骨架。

在流行的前端框架 Bootstrap 和 Bulma CSS 中,就有体现。像 Bootstrap 的 .container 、 .row 、 .col ;还有 Bulma CSS 的 .container 、 columns 、 column 都是表示这类布局系统。虽然名称不一样,但原理都是相同的。

随着 Flex 布局的普及,几乎现代的栅格系统的实现都选择使用这一灵活的布局方式。

现在就来看一下,怎样实现一个最小的 CSS 响应式布局系统吧。

首先从容器说起。

为了保证实现代码的简洁,本文将使用 SCSS 来写。如果你对 SCSS 还不熟悉,没有关系,行文中会对使用到的知识点做介绍。

容器

容器主要用来包裹网页的主要内容,常见效果就是将内容居中地显示在屏幕中间。

我们使用 .container 来约定容器。

首先,容器是水平居中的,这一块样式较为容易:

.container {    margin-left: auto;    margin-right: auto;}

所谓的响应式容器,就是根据不同的断点(breakpoints),也就是当前的视口宽度,来决定容器使用的 max-width 值。

这里我们借鉴了 Bootstrap 中对断点的定义,根据视口宽度,分为以下几类设备:
 

[0, 576px)[576px, 768px)[768px, 992px)[992px, 1200px)[1200px, +∞)

针对断点定义,声明一个变量 $breakpoints :

$breakpoints: (    // Extra small screen / phone    xs: 0,    // Small screen / phone    sm: 576px,    // Medium screen / tablet    md: 768px,    // Large screen / desktop    lg: 992px,    // Extra large screen / wide desktop    xl: 1200px);

$breakpoints 称为“列表”,是 SCSS 提供给我们的数据结构。由一个个 key: value 键值对组成。上例中的 key 表示的是设备有效范围的起始点。

不同的设备下,容器有不同的 max-width 值。所以,这里我们再声明一个表示容器宽度的变量 $container-max-widths :
 

$container-max-widths: (    xs: none,    sm: 540px,    md: 720px,    lg: 960px,    xl: 1140px);

这里的 $container-max-widths 也是个列表,这里的 key 表示某个设备下容器的最大宽度。比如,在超大屏设备下,容器的最大宽度是 1140px ,而在平常手机下,不设置容器的最大宽度,为默认值 none 。

有了实现的思路,接下来就着手实现。

我们就可以借助媒体查询指令 @media ,依据视口宽度的范围,给予 .container 不同的 max-width 值。

@each $device, $breakpoint in $breakpoints {    @media only screen and (min-width: $breakpoint) {        .container {            max-width: map-get($container-max-widths, $device);        }    }}

7 行代码搞定!

下面解释下上面的代码。

我们对列表遍历,使用的是 @each...in 语法,每一次遍历取出对应的 key、value,得到当前的 $device 、 $breakpoint 。 map-get 是 SCSS 提供的用来操作列表的方法:根据 key 取出 value。比如,当 $device 值为 xs 的时候, map-get($container-max-widths, $device) 对应值为 none ;当 $device 值为 sm 的时候, map-get($container-max-widths, $device) 对应值为 540px ,以此类推。

@media only screen and (min-width: $breakpoint) { ... } 中包含的代码,表示从当前设备断点开始处,应用的 CSS 样式。 当我们同时按照从小到大的顺序设置两个断点的媒体查询时,后者会覆盖前者的样式 ,这是实现不同视口下,具有不同宽度容器的核心原理。

接下来,将得到的宽度值赋给容器的 max-width 属性就可以了。

到现在为止,我们就写出了一个响应式容器了,我们总揽下代码:

$breakpoints: (    // Extra small screen / phone    xs: 0,    // Small screen / phone    sm: 576px,    // Medium screen / tablet    md: 768px,    // Large screen / desktop    lg: 992px,    // Extra large screen / wide desktop    xl: 1200px);$container-max-widths: (    xs: none,    sm: 540px,    md: 720px,    lg: 960px,    xl: 1140px);.container {    margin-left: auto;    margin-right: auto;}@each $device, $breakpoint in $breakpoints {    @media only screen and (min-width: $breakpoint) {        .container {            max-width: map-get($container-max-widths, $device);        }    }}

点击这里,查看效果。

下面再来介绍 12 列栅格布局。

12 列栅格布局

先使用 Flex 布局,写一个最简的等宽布局。

.row {    display: flex;        .col {        flex-grow: 1;        flex-basis: 0;    }}

没错,这就是使用 Flex 布局实现一个等宽布局的所有代码了。如果不考虑中间的空白行,只需要 7 行代码。

这里的原理是,我们将所有 Flex 项目的 flex-basis 设置为 0 了,就是说这些 Flex 项目在 grow 或 shrink 之前都没有宽度,是一样长的。这样最终计算出来的主轴空间会平均地分配给了每个 Flex 项目,这样它们就等宽了。

到这里,我们所写的这个简易栅格布局有两个局限:

不能布局非等宽项目。
2.不支持换行。

换行的话很好弄,为 Flex 容器加个 flex-wrap: wrap 就可以了。那怎样处理“非等宽项目”排列布局呢。

为了能实现非等宽项目的布局,我们的思路是:  禁用 Flex 项目的伸缩特性,使用百分比 width 指定宽度  。

首先,禁用 Flex 项目的伸缩特性,使用到的属性如下:

flex-shrink: 0;flex-grow: 0;flex-basis: 0;

这三个属性等价的快捷写法是:

flex: none;

然后就是使用百分比 width 指定宽度了。

我们实现的是一行最多 12 列的栅格布局。也就是说把一行划分成 12 列,每一列的宽度大约占总宽度的 8.33% 。我们用 .is-列数 指定一个项目占据的列数:

.is-1
.is-2
.is-3
.is-4
.is-5
.is-6
.is-7
.is-8
.is-9
.is-10
.is-11
.is-12

根据这个规律,我们可以很容易地写出栅格布局代码:

$columns: 12;.row {    display: flex;        .col {        flex-grow: 1;        flex-basis: 0;                @for $i from 1 through 12 {            &.is-#{$i} {                flex: none;                width: percentage($i / 12);            }        }    }}

这里我们使用 @for 指令的 @for $var from <start> through <end> 语法,从 1 递增到 12,定义了 .is-* 这一系列类名,原理就是我们说过的禁用了 Flex 项目的伸缩特性,指定给它百分比宽度。怎么样,很简单吧。

接下来再加上折行( .row.is-multiline )和 Flex 项目偏移( .is-offset-* )的支持。

我们总揽下代码:

$columns: 12;.row {    display: flex;        &.is-multiline {        flex-wrap: wrap;       }        .col {        flex-grow: 1;        flex-basis: 0;                @for $i from 1 through 12 {            &.is-#{$i} {                flex: none;                width: percentage($i / 12);            }            &.is-offset-#{$i} {                margin-left: percentage($i / 12);            }        }    }}

.is-multiline 是跟随 .row 一起使用的,得到的就是 flex-wrap: wrap 的效果;项目偏移则借助 margin-left
属性实现。

到这里,我们的 12 列栅格布局就写完了 ヾ(◍&deg;&nabla;&deg;◍)ノ゙

完整代码

我们把上面两部分的代码整合起来,就能得到一个最小的响应式布局系统了~ O(&cap;_&cap;)O

$breakpoints: (    // Extra small screen / phone    xs: 0,    // Small screen / phone    sm: 576px,    // Medium screen / tablet    md: 768px,    // Large screen / desktop    lg: 992px,    // Extra large screen / wide desktop    xl: 1200px);$container-max-widths: (    xs: none,    sm: 540px,    md: 720px,    lg: 960px,    xl: 1140px);.container {    margin-left: auto;    margin-right: auto;}@each $device, $breakpoint in $breakpoints {    @media only screen and (min-width: $breakpoint) {        .container {            max-width: map-get($container-max-widths, $device);        }    }}$columns: 12;.row {    display: flex;    &.is-multiline {        flex-wrap: wrap;       }    .col {        flex-grow: 1;        flex-basis: 0;        @for $i from 1 through 12 {            &.is-#{$i} {                flex: none;                width: percentage($i / 12);            }            &.is-offset-#{$i} {                margin-left: percentage($i / 12);            }        }    }}

关于使用CSS怎么实现一个响应式布局系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 使用CSS怎么实现一个响应式布局系统

本文链接: https://www.lsjlt.com/news/252269.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用CSS怎么实现一个响应式布局系统
    这篇文章将为大家详细讲解有关使用CSS怎么实现一个响应式布局系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是csscss是一种用来表现HTML或XML等文件样式的计算机语言,主要是用...
    99+
    2023-06-08
  • CSS怎么实现响应式布局
    小编给大家分享一下CSS怎么实现响应式布局,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!用CSS实现响应式布局响应式布局感觉很高大上,很难,但实际上只用CSS也能实现响应式布局要用的就是CSS中的没接查询,下面就介绍一下怎...
    99+
    2023-06-08
  • 怎么在css中实现响应式布局
    今天就跟大家聊聊有关怎么在css中实现响应式布局,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。响应式布局的四种方式总的html代码<body>  &n...
    99+
    2023-06-15
  • 怎么用纯CSS实现表格响应式布局
    这篇文章主要讲解了“怎么用纯CSS实现表格响应式布局”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用纯CSS实现表格响应式布局”吧!布局效果:简单解析一...
    99+
    2024-04-02
  • 如何使用HTML和CSS实现一个响应式导航框架布局
    导航栏是网页中非常重要的一部分,它可以帮助用户快速导航到网站的各个页面。为了适应不同设备的屏幕尺寸,我们需要使用HTML和CSS来创建一个响应式的导航框架布局。下面我将详细介绍如何实现这一目标,并提供相应的代码示例。HTML结构首先,我们需...
    99+
    2023-10-21
    响应式 CSS html
  • 如何使用HTML和CSS实现响应式布局
    在今天的移动设备普及的时代,响应式布局成为了必须掌握的前端开发技能。借助HTML和CSS,我们可以轻松地实现一个适应不同屏幕尺寸和窗口大小的网页布局。本文将详细介绍如何使用HTML和CSS实现响应式布局,并提供一些具体的代码示例。使用媒体查...
    99+
    2023-10-21
    CSS html 响应式布局
  • 实用指南:如何使用CSS实现响应式布局
    实用指南:如何使用CSS实现响应式布局 一、引言在现代互联网的时代里,越来越多的人使用移动设备来浏览网页。为了提供更好的用户体验,开发人员需要通过实现响应式布局来适应不同尺寸的屏幕。本...
    99+
    2024-02-22
    css 响应式布局 实用指南 弹性布局 网页布局
  • 使用CSS实现响应式表格布局的指南
    使用CSS实现响应式表格布局的指南引言:随着移动设备的普及,现代网页设计已经摆脱了固定布局的限制,而转向响应式布局。响应式布局可以使网页在不同的设备上自动适应,并提供更好的用户体验。在本文中,我们将介绍如何使用CSS来实现响应式表格布局,并...
    99+
    2023-11-21
    响应式 CSS 表格布局
  • 怎么用CSS创建响应式布局
    本篇内容介绍了“怎么用CSS创建响应式布局”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!现如今在Web前端...
    99+
    2024-04-02
  • bootstrap怎么实现响应式布局
    这篇文章主要介绍“bootstrap怎么实现响应式布局”,在日常操作中,相信很多人在bootstrap怎么实现响应式布局问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”boot...
    99+
    2024-04-02
  • 如何使用CSS Grid布局制作一个响应式柱状图
    这篇文章主要介绍了如何使用CSS Grid布局制作一个响应式柱状图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先上效果图:第一个简单版本第一眼看上去可能会有点不知道怎么开始...
    99+
    2023-06-08
  • 如何使用HTML和CSS创建一个响应式图库布局
    引言:随着移动设备的普及,响应式设计成为了网页设计的重要考虑因素之一。而在开发一个图库网站时,如何设计一个兼具美观和响应式布局的页面,将成为重要的问题。本文将详细讨论如何使用HTML和CSS来创建一个响应式图库布局,并且提供具体的代码示例。...
    99+
    2023-10-21
    响应式 CSS html
  • 如何使用HTML和CSS创建一个响应式博客布局
    在当今互联网时代,博客已经成为人们分享知识、经验和故事的重要平台。设计一个吸引人且具有响应式布局的博客,可以让你的内容更好地展示在不同尺寸和设备上,提升用户体验。本文将介绍如何使用HTML和CSS来创建一个响应式博客布局,同时提供具体的代码...
    99+
    2023-10-21
    CSS html 响应式布局
  • 如何使用HTML和CSS创建一个响应式表格布局
    如何使用HTML和CSS创建一个响应式表格布局HTML是一种用于构建网页结构的标记语言,而CSS则用于设置网页的样式和布局。在网页设计中,表格是一种常见的元素,用于以表格形式展示数据。本文将介绍如何使用HTML和CSS来创建一个响应式的表格...
    99+
    2023-10-27
    CSS html 响应式布局
  • 使用CSS实现响应式卡片瀑布流布局的技巧
    使用CSS实现响应式卡片瀑布流布局的技巧随着移动设备的普及和网页内容的多样化,响应式设计已经成为现代web开发的基本要求之一。其中,卡片式布局和瀑布流布局都逐渐成为广受欢迎的设计风格。本文将介绍如何使用CSS实现一个响应式的卡片瀑布流布局,...
    99+
    2023-11-21
    响应式 CSS 瀑布流布局
  • 使用CSS实现响应式瀑布流卡片布局的技巧
    使用CSS实现响应式瀑布流卡片布局的技巧,需要具体代码示例在当今移动设备普及的时代,响应式设计已经成为现代网站的必备要素之一。而响应式瀑布流卡片布局作为一种流行的布局方式,可以在不同屏幕尺寸下实现流畅的展示效果。本文将介绍如何使用CSS实现...
    99+
    2023-11-21
    响应式 CSS 瀑布流布局
  • CSS3响应模式布局怎么实现
    这篇文章主要介绍了CSS3响应模式布局怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS3响应模式布局怎么实现文章都会有所收获,下面我们一起来看看吧。REM方法calc()从字面我们可以把他理解为一个...
    99+
    2023-07-04
  • 实现一个响应式布局的原理与方法
    页面响应式布局的原理与实现方法 随着移动设备的普及和互联网的快速发展,越来越多的用户开始使用手机、平板等移动设备浏览网页。而传统的固定布局往往无法适应不同屏幕尺寸的设备,导致用户体验不佳。为了解决这个问题,响应式布局应运而生。 ...
    99+
    2024-01-29
    原理 实现方法 响应式布局
  • 如何使用HTML和CSS创建一个响应式卡片瀑布流布局
    如何使用HTML和CSS创建一个响应式卡片瀑布流布局在当今的网页设计中,响应式设计已经成为一种必需品。随着越来越多的用户在各种设备上访问互联网,我们需要确保网页能够良好地适应不同的屏幕尺寸和设备类型。本文将向您介绍如何使用HTML和CSS创...
    99+
    2023-10-24
    响应式 CSS html
  • 使用css怎么实现一个n宫格布局
    使用css怎么实现一个n宫格布局?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。设计目标在scss环境下, 通过mixin实现n宫格, 并且可以支持"有无边框"...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作