css基于媒体查询和 rem 的响应式布局实践

yizhihongxing

下面为你详细讲解“CSS基于媒体查询和rem的响应式布局实践”的完整攻略。

一、什么是媒体查询

媒体查询是CSS3比较常用的一个新特性,它可以让CSS样式对不同的设备进行特定的适配。

媒体查询可以根据设备的参数来匹配不同的CSS样式,常见的参数包括屏幕大小、分辨率、设备方向等,例如下面的代码就是一个CSS的媒体查询:

@media screen and (max-width:768px){
    /* 样式代码 */
}

这段代码的意思是,当屏幕宽度小于等于768像素时,应用其中的样式。

二、什么是rem

rem是一种基于根元素fontSize的相对单位,可以很好的适配不同的设备。假设HTML根元素的fontSize为16px,那么1rem等于16px,2rem等于32px,以此类推。

rem的好处是可以适配不同设备的分辨率,避免了需要使用媒体查询来匹配特定的分辨率。

三、使用媒体查询和rem实现响应式布局

使用媒体查询和rem实现响应式布局的步骤如下:

  1. 在HTML的头部加入meta标签,设置viewport的宽度、初始缩放值和最大缩放值。例如:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
  1. 设置HTML根元素的fontSize为屏幕宽度的1/10,即10vw。例如:
html{
    font-size:10vw;
}

这样设置的好处是,当屏幕宽度变化时,HTML根元素的fontSize也会相应变化,实现了适配不同设备的效果。

  1. 使用媒体查询来适配不同设备的屏幕尺寸,例如:
/* 当屏幕宽度小于等于768px时 */
@media screen and (max-width:768px){
    /* 样式代码 */
}

/* 当屏幕宽度在769px到1024px之间时 */
@media screen and (min-width:769px) and (max-width:1024px){
    /* 样式代码 */
}

/* 当屏幕宽度大于1024px时 */
@media screen and (min-width:1025px){
    /* 样式代码 */
}
  1. 使用rem来设置样式,例如:
/* 设置字体大小 */
h1{
    font-size:3rem;
}

/* 设置margin和padding */
p{
    margin:1rem;
    padding:0.5rem;
}

/* 设置width和height */
div{
    width:20rem;
    height:10rem;
}

这样设置的好处是,不必为不同设备设置特定的宽度、高度、字体大小等,实现了快速适配不同设备的效果。

四、示例说明

下面通过两个示例来说明媒体查询和rem的使用:

示例一:响应式导航菜单

这个示例实现了一个响应式导航菜单,当屏幕宽度小于等于768px时,在页面顶部显示一个汉堡菜单,点击后显示下拉菜单。

首先,在HTML中添加导航菜单的代码:

<header>
    <nav>
        <div class="logo">
            <a href="#">Logo</a>
        </div>
        <div class="hamburger">
            <input id="menu" type="checkbox">
            <label for="menu" class="menu">
                <span></span>
                <span></span>
                <span></span>
            </label>
        </div>
        <ul class="menu-items">
            <li><a href="#">Item 1</a></li>
            <li><a href="#">Item 2</a></li>
            <li><a href="#">Item 3</a></li>
            <li><a href="#">Item 4</a></li>
            <li><a href="#">Item 5</a></li>
        </ul>
    </nav>
</header>

然后,在CSS中设置菜单的样式和响应式布局:

/* 设置导航菜单 */
header{
    background-color:#333;
    color:#fff;
    height:4rem;
    display:flex;
    align-items:center;
}

nav{
    display:flex;
    justify-content:space-between;
    align-items:center;
    width:100%;
}

.logo a{
    color:#fff;
    font-size:1.5rem;
}

.hamburger{
    display:none;
}

.menu-items{
    display:flex;
    list-style:none;
    margin:0;
    padding:0;
}

.menu-items li{
    margin:0 1rem;
}

.menu-items li a{
    color:#fff;
    font-size:1rem;
}

/* 设置响应式布局 */
@media screen and (max-width:768px){
    .hamburger{
        display:block;
    }
    .menu-items{
        position:fixed;
        width:100%;
        height:calc(100vh - 4rem);
        top:4rem;
        right:0;
        left:0;
        bottom:0;
        z-index:99;
        background-color:#333;
        flex-direction:column;
        align-items:center;
        justify-content:center;
        transform:translateX(100%);
        transition:transform 0.3s ease-in-out;
    }

    .menu-items.show{
        transform:translateX(0%);
    }

    .menu-items li{
        margin:1rem 0;
    }
}

在这段CSS中,设置了默认的导航菜单样式,以及响应式布局的样式。对于响应式布局,当屏幕宽度小于等于768px时,显示汉堡菜单,并设置下拉菜单样式,同时添加了过渡动画。

最后,在JavaScript中设置汉堡菜单的点击事件:

const hamburger = document.querySelector('.hamburger');
const menuItems = document.querySelector('.menu-items');

hamburger.addEventListener('click', function(){
    menuItems.classList.toggle('show');
})

示例二:响应式图片布局

这个示例实现了一个响应式的图片布局,当屏幕宽度小于等于768px时,图片布局从一列变成两列,保证图片不会被裁剪。

首先,在HTML中添加图片的代码:

<div class="container">
    <img src="./img/image-1.jpg" alt="">
    <img src="./img/image-2.jpg" alt="">
    <img src="./img/image-3.jpg" alt="">
    <img src="./img/image-4.jpg" alt="">
    <img src="./img/image-5.jpg" alt="">
    <img src="./img/image-6.jpg" alt="">
    <img src="./img/image-7.jpg" alt="">
    <img src="./img/image-8.jpg" alt="">
</div>

然后,在CSS中设置图片的样式和响应式布局:

/* 设置图片样式 */
.container{
    display:grid;
    grid-template-columns:repeat(auto-fit, minmax(20rem, 1fr));
    grid-gap:2rem;
    margin:2rem 0;
}

img{
    width:100%;
    height:auto;
}

/* 设置响应式布局 */
@media screen and (max-width:768px){
    .container{
        grid-template-columns:repeat(auto-fit, minmax(45%,1fr));
        grid-gap:1rem;
    }
}

在这段CSS中,设置了默认的图片样式和响应式布局的样式。对于响应式布局,当屏幕宽度小于等于768px时,图片布局变为两列,并设置了间距。

五、总结

以上就是使用媒体查询和rem实现响应式布局的完整攻略,通过这样的方式可以快速适配不同设备的分辨率和屏幕尺寸。如果想要进一步完善这个技术,可以结合JavaScript实现更加灵活的响应式布局。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:css基于媒体查询和 rem 的响应式布局实践 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • PHP根据传入参数合并多个JS和CSS文件的简单实现

    以下是“PHP根据传入参数合并多个JS和CSS文件的简单实现”的完整攻略: 1. 前置条件 在开始实现之前,需要先确保以下前置条件已满足: 网站已部署在PHP环境中,并且可以使用PHP的相关函数库; 需要合并的CSS和JS文件已经存在于服务器中,并且可以被脚本访问到; 网站的页面模板中使用了相应的CSS和JS文件,并且可以通过传入参数来指定需要合并的文件。 …

    css 2023年6月9日
    00
  • 小影怎么删除视频?小影app删除我发布的视频方法介绍

    小影怎么删除视频?小影app删除我发布的视频方法介绍 如果您想删除在小影app中发布的视频,可以按照以下步骤操作: 打开小影app并登录您的账户,进入主页。 点击主页下方的“我的”选项,进入个人中心页面。 在个人中心页面中,您可以看到发布的视频列表。选中您想要删除的视频,点击视频下方的删除按钮。 在弹出的提示框中,确认删除操作。 删除成功后,该视频将不再在小…

    css 2023年6月11日
    00
  • ui组件之input多选下拉实现方法(带有搜索功能)

    下面是详细的攻略过程: UI组件之Input多选下拉实现方法(带有搜索功能) 在前端开发中,多选下拉框是十分常见的一种UI组件。那么如何实现这样一个组件呢?接下来我们将使用HTML、CSS和JavaScript来实现一个具有搜索的多选下拉框。 1. HTML结构 首先,在HTML中,我们需要一个输入框和一个下拉框。下拉框中可以用列表展示选项。基本的HTML结…

    css 2023年6月9日
    00
  • jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题

    下面就是关于“jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题”的完整攻略。 animate()的使用方法 在jQuery中,animate()是一个非常常用的方法,它用于执行动画效果,能够实现元素从一个状态到另一个状态的平滑过渡。animate()方法的基本…

    css 2023年6月10日
    00
  • 6种非常炫酷的CSS3按钮边框动画特效

    下面是详细讲解“6种非常炫酷的CSS3按钮边框动画特效”的完整攻略: 简介 本攻略将介绍6种使用CSS3实现的炫酷按钮边框动画特效,通过学习这些特效,可以让你的网站更具有吸引力和交互性。 准备工作 在学习本攻略前,需要有一定的HTML和CSS基础,并且需要有一个代码编辑器,如Sublime Text等。 示例1:缩放边框 该特效可以让按钮的边框在被点击后缩放…

    css 2023年6月10日
    00
  • Laravel实现用户注册和登录

    我会详细讲解一下Laravel实现用户注册和登录的完整攻略。 环境准备 首先,我们需要准备好Laravel开发环境,包括PHP、Composer等。具体的安装过程可以参考Laravel的官方文档。 创建用户模型和数据库表 在Laravel中,可以使用Artisan命令来快速生成用户模型和数据库迁移文件: php artisan make:model User…

    css 2023年6月10日
    00
  • jQuery选择器之基本选择器用法实例分析

    jQuery选择器之基本选择器用法实例分析 什么是jQuery选择器? jQuery选择器是用于选择和操作HTML文档中的元素的一种jQuery方法,可以通过id、class、标签名等多种方式来获取元素,从而实现对页面元素的操作。 基本选择器有哪些? jQuery提供了丰富的选择器,许多常用的选择器都是基于CSS选择器进行扩展实现的。基本选择器包括: 定位元…

    css 2023年6月9日
    00
  • openlayers6之地图覆盖物overlay详解

    OpenLayers6之地图覆盖物Overlay详解 什么是地图覆盖物Overlay? 地图覆盖物指的是放置在地图表面的图形元素,例如标注、弹框、图标等。OpenLayers6中的Overlay类可以用来创建和管理地图覆盖物。 创建Overlay 要创建一个Overlay,必须先定义它的位置、大小以及所包含的图形元素。下面是一个简单的示例: // 定义标注的…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部