0基础学前端 day9--css布局

CSS布局概述

一、引言

CSS布局是Web开发中至关重要的一部分,用于控制网页元素的排列和显示方式。不同的布局技术被应用于网页设计中,以确保其在各种设备和屏幕尺寸上都具有良好的用户体验。CSS布局技术包括浮动(float)、定位(position)、盒模型、Flexbox(伸缩盒)、和Grid(网格布局)等。

浮动(Float)

浮动是一种传统的布局方式,最初用于实现文字环绕的功能。浮动元素会脱离正常文档流,并向左或向右移动,允许后续内容围绕它们排列。

代码示例
<html>
<head>
<style>
.container {
  width: 100%;
  border: 1px solid black;
}

.box {
  float: left;
  width: 200px;
  height: 200px;
  margin: 10px;
  border: 1px solid red;
}

.clearfix::after {
  content: "";
  clear: both;
  display: table;
}
</style>
</head>
<body>
  <div class="container clearfix">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
  </div>
</body>
</html>

在上面的示例中,三个红色框被浮动到左侧。在父容器上使用.clearfix来清除浮动的影响。

定位(Position)

CSS的定位允许我们精确地将元素放置在我们需要的地方。有四种主要的定位方式:static、relative、absolute和fixed。

代码示例
<html>
<head>
<style>
.relative {
  position: relative;
  width: 300px;
  height: 300px;
  border: 1px solid blue;
}

.absolute {
  position: absolute;
  top: 50px;
  left: 50px;
  width: 100px;
  height: 100px;
  background-color: lightgreen;
}
</style>
</head>
<body>
  <div class="relative">
    Relative Position
    <div class="absolute">Absolute Position</div>
  </div>
</body>
</html>

在这个例子中,.absolute类的元素相对于.relative类的元素进行定位,即通过topleft精确控制其位置。

盒模型(Box Model)

盒模型是CSS布局的基础,每个元素都由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。

代码示例
<html>
<head>
<style>
.box {
  width: 150px;
  padding: 20px;
  border: 5px solid black;
  margin: 10px;
  background-color: lightcoral;
}
</style>
</head>
<body>
  <div class="box">Box Model</div>
</body>
</html>

在此示例中,.box元素的实际宽度是150px + 2 * 20px (padding) + 2 * 5px (border) = 200px

Flexbox(弹性布局)

Flexbox是一种一维布局模型,非常适合用于需要在单行或单列中高效排列多个元素的场合。

代码示例
<html>
<head>
<style>
.container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 200px;
  border: 1px solid gray;
}

.box {
  width: 60px;
  height: 60px;
  background-color: lightblue;
}
</style>
</head>
<body>
  <div class="container">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
  </div>
</body>
</html>

这个例子中,.container使用flexbox布局,使得内部的.box元素在水平方向上居中对齐,且相互之间有相等的间距。

Grid(网格布局)

Grid是一个二维的布局系统,它使得复杂的网页布局变得更加简单和直观。

代码示例
<html>
<head>
<style>
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  border: 1px solid gray;
}

.box {
  background-color: lightpink;
  padding: 20px;
  border: 1px solid darkred;
}
</style>
</head>
<body>
  <div class="container">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
    <div class="box">4</div>
    <div class="box">5</div>
    <div class="box">6</div>
  </div>
</body>
</html>

在上述代码中,.container被定义为网格容器,使用grid-template-columns属性设置三列布局,并通过gap定义单元格间距,每个.box元素自动分布在网格中。

代码实例

之前的杜兰特介绍

HTML

<!DOCTYPE html>  
<html lang="zh-CN">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>凯文·杜兰特</title>  
    <!-- 使用国内可访问的Bootstrap CSS CDN -->  
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css" rel="stylesheet">  
    <link rel="stylesheet" href="kd.css">  
</head>  
<body>  
    <!-- Navbar -->  
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">  
        <a class="navbar-brand" href="#">杜兰特主页</a>  
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">  
            <span class="navbar-toggler-icon"></span>  
        </button>  
        <div class="collapse navbar-collapse" id="navbarNav">  
            <ul class="navbar-nav ml-auto">  
                <li class="nav-item active"><a class="nav-link" href="#">首页</a></li>  
                <li class="nav-item"><a class="nav-link" href="#bio">简介</a></li>  
                <li class="nav-item"><a class="nav-link" href="#career">职业生涯</a></li>  
                <li class="nav-item"><a class="nav-link" href="#teams">球队历程</a></li>  
                <li class="nav-item"><a class="nav-link" href="#achievements">成就</a></li>  
                <li class="nav-item"><a class="nav-link" href="#personal-life">个人生活</a></li>  
                <li class="nav-item"><a class="nav-link" href="#gallery">相册</a></li>  
                <li class="nav-item"><a class="nav-link" href="#contact">联系</a></li>  
            </ul>  
        </div>  
    </nav>  

    <header class="header">  
        <h1>凯文·杜兰特</h1>  
    </header>  
  
    <main class="container content mt-4">  
        <div class="row">  
            <div class="col-md-4">  
                <section class="image text-center mb-4">  
                    <img src="https://wxdwuxd.oss-cn-beijing.aliyuncs.com/6fa6ec013f49061e5c313827b6099f2.png" alt="凯文·杜兰特" class="rounded-circle img-fluid">  
                </section>  
            </div>  
            <div class="col-md-8">  
                <section id="bio" class="bio mb-4">  
                    <h2>简介</h2>  
                    <p>凯文·杜兰特(Kevin Durant)是NBA著名篮球运动员,司职小前锋...</p>  
                </section>  
                <section id="career" class="career mb-4">  
                    <h2>职业生涯</h2>  
                    <p>杜兰特的职业生涯始于2007年,他在2007年NBA选秀中被西雅图超音速以第一顺位选中...</p>  
                </section>  
            </div>  
        </div>  
        
        <div class="row">  
            <div class="col-md-6">  
                <section id="teams" class="teams mb-4">  
                    <h2>球队历程</h2>  
                    <ul class="list-group">  
                        <li class="list-group-item">西雅图超音速 (2007-2008)</li>  
                        <li class="list-group-item">俄克拉荷马城雷霆 (2008-2016)</li>  
                        <li class="list-group-item">金州勇士 (2016-2019)</li>  
                        <li class="list-group-item">布鲁克林篮网 (2019-2022)</li>  
                        <li class="list-group-item">菲尼克斯太阳 (2022-至今)</li>  
                    </ul>  
                </section>  
            </div>  
            <div class="col-md-6">  
                <section id="achievements" class="achievements mb-4">  
                    <h2>成就</h2>  
                    <ul class="list-group">  
                        <li class="list-group-item">两届NBA总冠军 (2017, 2018)</li>  
                        <li class="list-group-item">四届NBA得分王 (2010, 2011, 2012, 2014)</li>  
                        <li class="list-group-item">两届总决赛MVP (2017, 2018)</li>  
                        <li class="list-group-item">NBA常规赛MVP (2014)</li>  
                        <li class="list-group-item">2021年东京奥运会金牌</li>  
                        <li class="list-group-item">十届NBA全明星</li>  
                    </ul>  
                </section>  
            </div>  
        </div>  
        
        <section id="personal-life" class="personal-life mb-5">  
            <h2>个人生活</h2>  
            <p>杜兰特在场外也十分活跃,他积极参与慈善和社区活动,成立了「凯文·杜兰特慈善基金会」,旨在帮助年轻人和改善社区生活。此外,他还是投资者,参与了多个初创公司的投资。</p>  
        </section>  

        <!-- 新增内容: 相册 -->
        <section id="gallery" class="gallery mb-5">
            <h2>相册</h2>
            <div class="gallery-grid">
                <img src="https://example.com/image1.jpg" alt="杜兰特比赛画面">
                <img src="https://example.com/image2.jpg" alt="杜兰特与队友">
                <img src="https://example.com/image3.jpg" alt="杜兰特投篮">
                <img src="https://example.com/image4.jpg" alt="杜兰特颁奖">
                <img src="https://example.com/image5.jpg" alt="杜兰特扣篮">
            </div>
        </section>

        <!-- 新增内容: 联系表单 -->
        <section id="contact" class="contact mb-5">
            <h2>联系</h2>
            <form>
                <div class="form-group">
                    <label for="name">姓名</label>
                    <input type="text" class="form-control" id="name" placeholder="输入您的姓名">
                </div>
                <div class="form-group">
                    <label for="email">邮箱</label>
                    <input type="email" class="form-control" id="email" placeholder="输入您的邮箱">
                </div>
                <div class="form-group">
                    <label for="message">留言</label>
                    <textarea class="form-control" id="message" rows="5" placeholder="输入您的留言"></textarea>
                </div>
                <button type="submit" class="btn btn-primary">发送</button>
            </form>
        </section>
    </main>  

    <footer class="footer bg-dark text-white text-center py-2">  
        <p>© 2024 凯文·杜兰特粉丝页面</p>  
    </footer>  

    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.bundle.min.js"></script>
</body>  
</html>

CSS

body {  
    font-family: 'Roboto', sans-serif;  
    color: #f0f0f0;  
    margin: 0;  
    padding: 0;  
    background-color: #121212;  
}  

.header {  
    background: linear-gradient(135deg, #1a1a1a 25%, #000000 100%);  
    color: #f0f0f0;  
    text-align: center;  
    padding: 20px;  
    text-shadow: 2px 2px 5px #000000;  
}  

.content {  
    padding: 0 15px;  
}  

.img-fluid {  
    max-width: 70%;  
    border-radius: 50%;  
    transition: transform 0.5s;  
}  

.img-fluid:hover {  
    transform: rotate(360deg);  
}  

.bio, .career, .achievements, .teams, .personal-life, .contact {  
    background: rgba(34, 34, 34, 0.8);  
    color: #f0f0f0;  
    padding: 20px;  
    border-radius: 8px;  
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);  
    margin-bottom: 20px;
}

.gallery {  
    background: rgba(34, 34, 34, 0.8);  
    padding: 20px;  
    border-radius: 8px;  
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);  
}

.gallery-grid {  
    display: grid;  
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));  
    gap: 10px;  
}

.gallery-grid img {  
    width: 100%;  
    height: auto;  
    border-radius: 8px;  
    transition: transform 0.3s ease-in-out;  
}

.gallery-grid img:hover {  
    transform: scale(1.1);  
}

h1, h2 {  
    margin-top: 0;  
}  

.list-group-item {  
    background: transparent;  
    color: #f0f0f0;  
    border: none;  
}  

.footer {  
    background-color: #1a1a1a;  
    color: #f0f0f0;  
    text-align: center;  
    padding: 10px;  
    box-shadow: 0 -3px 8px rgba(0, 0, 0, 0.3);  
}

解释

  1. Grid布局:相册部分利用CSS Grid布局实现,这允许图片在不同的设备尺寸下自动调整列数,为页面提供更多的灵活性和响应性。
  2. 添加表单:通过新增联系表单,用户能够与网页内容进行更多的互动,增强用户体验。
  3. 视觉增强:图片悬停效果和背景渐变增加了页面的动态感和视觉吸引力。
  4. 结构优化:引入了新的内容区域和网格布局,保持页面现代化和易于浏览。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/885888.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试--文件上传常用绕过方式

文件上传常用绕过方式 1.前端代码&#xff0c;限制只允许上传图片。修改png为php即可绕过前端校验。 2.后端校验Content-Type 校验文件格式 前端修改&#xff0c;抓取上传数据包&#xff0c;并且修改 Content-Type 3.服务端检测&#xff08;目录路径检测&#xff09; 对目…

医院体检管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;体检分类管理&#xff0c;体检套餐管理&#xff0c;体检预约管理&#xff0c;体检报告管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;体检套餐&a…

四、Drf认证组件

四、Drf认证组件 4.1 快速使用 from django.shortcuts import render,HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.authentication import BaseAuthentication from rest_framework.exception…

数据结构:将复杂的现实问题简化为计算机可以理解和处理的形式

整句话的总体意义是&#xff0c;**数据结构是用于将现实世界中的实体和关系抽象为数学模型&#xff0c;并在计算机中表示和实现的关键工具**。它不仅包括如何存储数据&#xff0c;还包括对这些数据的操作&#xff0c;能够有效支持计算机程序的运行。通过这一过程&#xff0c;数…

利用PDLP扩展线性规划求解能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Java项目实战II基于Java+Spring Boot+MySQL的甘肃非物质文化网站设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 甘肃省作为中国历史文化名省&#xff0c;拥有丰富的非物质文化遗产资源&#xff0c;涵盖表演艺术、手…

TypeScript 封装 Axios 1.7.7

随着Axios版本的不同&#xff0c;类型也在改变&#xff0c;以后怎么写类型&#xff1f; 1. 封装Axios 将Axios封装成一个类&#xff0c;同时重新封装request方法 重新封装request有几个好处&#xff1a; 所有的请求将从我们定义的requet请求中发送&#xff0c;这样以后更换…

Golang | Leetcode Golang题解之第441题排列硬币

题目&#xff1a; 题解&#xff1a; func arrangeCoins(n int) int {return sort.Search(n, func(k int) bool { k; return k*(k1) > 2*n }) }

【Unity服务】如何使用Unity Version Control

Unity上的线上服务有很多&#xff0c;我们接触到的第一个一般就是Version Control&#xff0c;用于对项目资源的版本管理。 本文介绍如何为项目添加Version Control&#xff0c;并如何使用&#xff0c;以及如何将项目与Version Control断开链接。 其实如果仅仅是对项目资源进…

09_OpenCV彩色图片直方图

import cv2 import numpy as np import matplotlib.pyplot as plt %matplotlib inlineimg cv2.imread(computer.jpeg, 1) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.show()plot绘制直方图 plt.hist(img.ravel(), 256) #ravel() 二维降一维 256灰度级…

学习记录:js算法(五十):二叉树的右视图

文章目录 二叉树的右视图我的思路网上思路 总结 二叉树的右视图 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 图一&#xff1a; 示例 1:如图一 输入: [1,2,3,null,5,null,4] …

C++面向对象基础

目录 一.函数 1.内联函数 2.函数重载 3.哑元函数 二.类和对象 2.1 类的定义 2.2 创建对象 三. 封装&#xff08;重点&#xff09; 四. 构造函数 constructor&#xff08;重点&#xff09; 4.1 基础使用 4.2 构造初始化列表 4.3 构造函数的调用方式&#xff08;掌握…

解决方法:PDF文件打开之后不能打印?

打开PDF文件之后&#xff0c;发现文件不能打印&#xff1f;这是什么原因&#xff1f;首先我们需要先查看一下自己的打印机是否能够正常运行&#xff0c;如果打印机是正常的&#xff0c;我们再查看一下&#xff0c;文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

秋招内推--招联金融2025

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

数据结构-LRU缓存(C语言实现)

遇到困难&#xff0c;不必慌张&#xff0c;正是成长的时候&#xff0c;耐心一点&#xff01; 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…

SigmaStudio控件Cross Mixer\Signal Merger算法效果分析

衰减与叠加混音算法验证分析一 CH2:输入源为-20dB正弦波1khz CH1叠加混音&#xff1a;参考混音算法https://blog.csdn.net/weixin_48408892/article/details/129878036?spm1001.2014.3001.5502 Ch0衰减混音&#xff1a;外部多个输入源做混音时&#xff0c;建议参考该算法控件&…

在VMware虚拟机上部署polardb

免密登录到我们的虚拟机之后&#xff0c;要在虚拟机上部署polardb数据库&#xff0c;首先第一步要先克隆源码&#xff1a; 为了进SSH协议进行传输源码需要先进行下面的步骤&#xff1a; 将宿主机上的私钥文件复制到虚拟机上 scp "C:\Users\waitw\.ssh\id_rsa" ann…

Azkaban:大数据任务调度与编排工具的安装与使用

在当今大数据时代&#xff0c;数据处理和分析任务变得越来越复杂。一个完整的大数据分析系统通常由大量任务单元组成&#xff0c;如 shell 脚本程序、mapreduce 程序、hive 脚本、spark 程序等。这些任务单元之间存在时间先后及前后依赖关系&#xff0c;为了高效地组织和执行这…

Leetcode 每日一题:Crack The Safe

写在前面&#xff1a; 学期真的忙起来了&#xff0c;我的两个社团也在上一周终于完成了大部分招新活动。虽然后面有即将到来的期中考试和求职&#xff0c;但希望能有时间将帖子的频率提上去吧&#xff08;真的尽量因为从做题思考到写博客讲解思路需要大量的时间&#xff0c;在…

当人工智能拥抱餐饮业,传统与创新的交融

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 今天我们要聊一个充满烟火气的行业&#x…