【网页设计】CSS 盒子模型

目标

  • 能够准确阐述盒子模型的 4 个组成部分
  • 能够利用边框复合写法给元素添加边框
  • 能够计算盒子的实际大小
  • 能够利用盒子模型布局模块案例
  • 能够给盒子设置圆角边框
  • 能够给盒子添加阴影
  • 能够给文字添加阴影

1. 盒子模型

        页面布局要学习三大核心, 盒子模型, 浮动 和 定位. 学习好盒子模型能非常好的帮助我们布局页面.

1.1 看透网页布局的本质

        网页布局过程:

  • 先准备好相关的网页元素,网页元素基本都是盒子 Box 。
  • 利用 CSS 设置好盒子样式,然后摆放到相应位置。
  • 往盒子里面装内容.

        网页布局的核心本质: 就是利用 CSS 摆盒子。

1.2 盒子模型(Box Model)组成

        所谓 盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
        CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容

 1.3 边框(border)

        border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色

        语法:

border : border-width || border-style || border-color

        CSS 边框属性允许你指定一个元素边框的样式颜色

        边框样式 border-style 可以设置如下值:

  • none:没有边框即忽略所有边框的宽度(默认值)
  • solid:边框为单实线(最为常用的)
  • dashed:边框为虚线
  • dotted:边框为点线

        边框简写:

border: 1px solid red; 没有顺序

        边框分开写法(复合型写法):

border-top: 1px solid red; /* 只设定上边框, 其余同理 */
border-top
border-bottom
border-left
border-right

        课堂要求:请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色(提示:一定注意边框的层叠性)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>边框的练习</title><style>/* 请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色 */div {width: 200px;height: 200px;/* border-top: 1px solid red;border-bottom: 1px solid blue;border-left: 1px solid blue;border-right: 1px solid blue; *//* border包含四条边 */border: 1px solid blue;/* 层叠性 只是层叠了 上边框啊 */border-top: 1px solid red;}</style>
</head>
<body><div></div>
</body>
</html>

        注意:代码中先对 border 整体,再对 top 个体赋值的操作运用的层叠的特性,从而达到覆盖的目的。 

1.4 表格的细线边框

        border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。

        语法:

border-collapse:collapse;
  • collapse 单词是合并的意思
  • border-collapse: collapse; 表示相邻边框合并在一起

        如何理解这个?即从 “1+1=2” 转变为 “1+1=1”。从而达到表格内外边框宽度一致的结果。

1.5 边框会影响盒子实际大小

        边框会额外增加盒子的实际大小。因此我们有两种方案解决:

  1. 测量盒子大小的时候,不量边框.
  2. 如果测量的时候包含了边框,则需要 width/height 减去边框宽度

1.6 内边距(padding)

        padding 属性用于设置内边距,即边框与内容之间的距离。

         padding 属性(简写属性)可以有一到四个值。

        以上 4 种情况,我们实际开发都会遇到。

        当我们给盒子指定 padding 值之后,发生了 2 件事情:

  1. 内容和边框有了距离,添加了内边距。
  2. padding影响了盒子实际大小。
  3. 也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。

解决方案:

        如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可。

案例:新浪导航案例-padding影响盒子好处

demo

code

        padding内边距可以撑开盒子,我们可以做非常巧妙的运用.
        因为每个导航栏里面的字数不一样多,我们可以不用给每个盒子宽度了,直接给padding最合适.

        当然,对于这种处理就是仁者见仁智者见智了,喜欢盒子大小一致则给盒子宽度;喜欢盒子宽度跟随字数就给 padding 值即可。(一般来说,第二种更常见)

        相关取值:

  1. 上边框为3像素, 颜色为 #ff8500
  2. 下边框为1像素 颜色为 #edeef0
  3. 盒子高度为 41像素, 背景颜色为 #fcfcfc
  4. 文字颜色为 #4c4c4c
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>新浪导航</title><style>.nav {height: 41px;border-top: 3px solid #ff8500;border-bottom: 1px solid #edeef0;background-color: #fcfcfc;line-height: 41px;}.nav a {/* a属于行内元素 此时必须要转换 行内块元素 */display: inline-block;height: 41px;padding: 0 20px;font-size: 12px;color: #4c4c4c;text-decoration: none;}.nav a:hover {background-color: #eee;color: #ff8500;}</style>
</head>
<body><div class="nav"><a href="#">新浪导航</a><a href="#">手机新浪网</a><a href="#">移动客户端</a><a href="#">微博</a><a href="#">三个字</a></div>
</body>
</html>

        要注意的是,a 本身是行内元素,设置不了高度,这时候要先转换为块元素。同时再给一个左右的 padding 值,达到不同字数的盒子边距相同。 

案例:小米导航案例修改-padding影响盒子大小计算

        padding内边距可以撑开盒子, 有时候,也会让我们去修改宽度

demo

 code

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>简单版小米侧边栏</title><style>/* 1. 把a转换为块级元素 */a {display: block;width: 200px;height: 40px;background-color: #55585a;font-size: 14px;color: #fff;text-decoration: none;padding-left: 30px;line-height: 40px;}/* 2 鼠标经过链接变换背景颜色 */a:hover {background-color: #ff6700;}</style>
</head><body><a href="#">手机 电话卡</a><a href="#">电视 盒子</a><a href="#">笔记本 平板</a><a href="#">出行 穿戴</a><a href="#">智能 路由器</a><a href="#">健康 儿童</a><a href="#">耳机 音响</a>
</body></html>

        如果盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小. (这个的应用一般是写儿子的时候会出现的,为了使孩子不比父亲长,同时有有 padding,此时就采用不给 width 的方式)

1.7 外边距(margin)

        margin 属性用于设置外边距,即控制盒子和盒子之间的距离。

        margin 简写方式代表的意义跟 padding 完全一致。

1.8 外边距典型应用 

外边距可以让块级盒子水平居中,但是必须满足两个条件:

  1. 盒子必须指定了宽度(width)。
  2. 盒子左右的外边距都设置为 auto 。
.header{ width:960px; margin:0 auto;}

常见的写法,以下三种都可以:

  • margin-left: auto; margin-right: auto;
  • margin: auto;
  • margin: 0 auto;

        注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。(即把行内元素当做普通的文字来看)(从这里可以发现,要灵活结合使用,这些就是编码经验)

1.9 外边距合并

        使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。
        主要有两种情况:

  1. 相邻块元素垂直外边距的合并
  2. 嵌套块元素垂直外边距的塌陷

1.9.1 相邻块元素垂直外边距的合并

        当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并

解决方案:
        尽量只给一个盒子添加 margin 值

1.9.2 嵌套块元素垂直外边距的塌陷

        对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

解决方案:

  1. 可以为父元素定义上边框。
  2. 可以为父元素定义上内边距。
  3. 可以为父元素添加 overflow:hidden。

        其中第三种的优势在于,不会撑大盒子。
        还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题,后面咱们再总结。

1.10 清除内外边距

        网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。

* {padding:0; /* 清除内边距 */margin:0; /* 清除外边距 */
}

        这也是 CSS 中的第一行代码(先清除默认,再自己设计) 

        注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了

2. PS 基本操作

        因为网页美工大部分效果图都是利用 PS(Photoshop)来做的,所以以后我们大部分切图工作都是在 PS 里面完成。

  • 文件\rightarrow打开 :可以打开我们要测量的图片
  • Ctrl+R:可以打开标尺,或者 视图 \rightarrow 标尺
  • 右击标尺,把里面的单位改为像素
  • Ctrl+ 加号(+)可以放大视图, Ctrl+ 减号(-)可以缩小视图
  • 按住空格键,鼠标可以变成小手,拖动 PS 视图
  • 选区拖动 可以测量大小
  • Ctrl+ D 可以取消选区,或者在旁边空白处点击一下也可以取消选区

3. 综合案例

案例1:产品模块

demo

code

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>综合案例-产品模块</title><style>* {margin: 0;padding: 0;}body {background-color: #f5f5f5;}a {color: #333;text-decoration: none;}.box {width: 298px;height: 415px;background-color:#fff;/* 让块级的盒子水平居中对齐 */margin: 100px auto;}.box img {/* 图片的宽度和父亲一样宽 */width: 100%;}.review {height: 70px;font-size: 14px;/* 因为这个段落没有 width属性 所有 padding不会撑开盒子的宽度 */padding: 0 28px;margin-top: 30px;}.appraise {font-size: 12px;color: #b0b0b0;margin-top: 20px;padding: 0 28px;}.info {font-size: 14px;margin-top: 15px;padding: 0 28px;}.info h4 {display: inline-block;font-weight: 400;}.info span {color: #ff6700;    }.info em {font-style: normal;color: #ebe4e0;margin: 0 6px 0 15px;}</style>
</head>
<body><div class="box"><img src="images/img.jpg" alt=""><p class="review">快递牛,整体不错蓝牙可以说秒连。红米给力</p><div class="appraise">来自于 117384232 的评价</div><div class="info"><h4> <a href="#">Redmi AirDots真无线蓝...</a></h4><em>|</em><span> 99.9元</span></div></div>
</body>
</html>

        一个小细节,为了对中间的小细线赋予颜色和左右 padding,所以这里将竖线放入一个标签中,从而能够操作。 

一些总结:

1. 布局为啥用不同盒子,我只想用div?
        标签都是有语义的, 合理的地方用合理的标签。比如产品标题 就用 h, 大量文字段落就用p

2. 为啥用辣么多类名?
        类名就是给每个盒子起了一个名字,可以更好的找到这个盒子, 选取盒子更容易,后期维护也方便。

3. 到底用 margin 还是 padding?
        大部分情况两个可以混用,两者各有优缺点,但是根据实际情况,总是有更简单的方法实现。

4. 自己做没有思路?
        布局有很多种实现方式,同学们可以开始先模仿老师的写法,然后再做出自己的风格。
        最后同学们一定多运用辅助工具,比如屏幕画笔,ps等等

案例2:快报模块

demo

code

暂未练习,162

新知识点: 去掉 li 前面的 项目符号(小圆点)

语法:

list-style: none;

4. 圆角边框

        在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。
        border-radius 属性用于设置元素的外边框圆角。

        语法:

border-radius:length;
  • 参数值可以为数值(比如 px百分比的形式
  • 如果是正方形,想要设置为一个圆(实际上为正方形的内切圆),把数值修改为高度或者宽度的一半即可,或者直接写为 50%
  • 同上一点,想要圆角矩形(两侧为圆),把数值设置为 50% 即可
  • 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角(典型应用是对角形状相同)
  • 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和 border-bottom-left-radius
  • 兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用.

原理:

        所以从感性讲,参数值越大,弧度越明显。 

5. 盒子阴影

        CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。

        常见的情况是鼠标移动到标签上,该模块显示阴影

        语法:

box-shadow: h-shadow v-shadow blur spread color inset;

 

注意:

  1. 默认的是外阴影(outset), 但是不可以写这个单词,否则造成阴影无效
  2. 盒子阴影不占用空间,不会影响其他盒子排列。
  3. 一般来说,阴影不会是纯色,常常采用之前讲过的透明,如 rgba(0, 0, 0, .3)

那么,如何达成一下效果呢?

        原先盒子没有影子,当我们鼠标经过盒子就添加阴影效果

div:hover {box-shadow: 10px 10px 10px -4px rgba(0, 0, 0, .3);
}

         不过直接这么写阴影的产生比较生硬,后续学习 CSS 的过渡后可以优化

6. 文字阴影

        在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。

语法:

text-shadow: h-shadow v-shadow blur color;


        目前比较大的感受是,其实 html 和 CSS 也是一种语言,想要熟练运用的前提,依旧是大量的代码

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring6梳理15——Bean的作用域

目录 15.1 引入 15.1.1 Orders类 15.1.2 bean-scope.xml 15.1.3 OrdersTest类 15.1.4 运行截图 15.1 引入 在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围&#xff0c;各取值含义参加下表&#xff1a; 取值含义创建对象的时机singleton&#x…

拥抱趋势,洞察智慧!创客匠人「创始人IP创新增长班」圆满收官!

拥抱未来趋势&#xff0c;打造创始人IP&#xff0c;建立长期品牌价值。10月15日-17日&#xff0c;由创客匠人主办、创客匠人创始人&CEO老蒋担任主讲人的「创始人IP创新增长班」线下大课在成都生物城凯悦嘉轩酒店圆满收官。 本次大课&#xff0c;强大的势能吸引了来自全国各…

你知道吗?这个岗位只招2人,但HR那边却收到了1w份简历

引言 在当前经济环境下&#xff0c;求职者面临的挑战越来越大。互联网行业尤其如此&#xff0c;许多人挤破头都想进入大厂&#xff0c;但竞争异常激烈。如今的就业市场确实变得异常艰难。然而&#xff0c;随着AI大模型技术的兴起&#xff0c;对于那些掌握了相关技能的专业人才…

作业车间调度优化算法

作业车间调度优化算法 题目来源代码实现输出结果 题目来源 题目来源于葛英飞《智能制造技术基础》书中175页的题目&#xff0c;基余分配率的作业车间调度优化算法。书中这部分有程序流程图&#xff0c;但是没有代码&#xff0c;课后闲暇之余通过Python对其进行了简单的实现&am…

西南交通大学计算机软件专业上岸难度分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南交通大学计算机科学与技术2024届考研难度整体呈现"稳中有升"的态势。学硕实际录取33人&#xff0c;复试分数线362分&#xff0c;复试录取率71.74%&#xff1b;专硕&#xff08;计算机技术&#xff09;实际…

“2+1拼团:电商新风尚,驱动增长革新“

在当前经济环境下&#xff0c;商品供应过剩与同质化问题日益凸显&#xff0c;传统电商模式正面临严峻考验&#xff0c;难以有效应对消费者不断升级的需求。为此&#xff0c;一种新颖的21拼团购物模式应运而生&#xff0c;借助其别具一格的运营理念和吸引人的激励机制&#xff0…

企业文件怎么管控?这几个软件你一定要知道!

企业文件管控是确保数据安全、提高工作效率和满足合规要求的关键措施。它有助于保护敏感信息&#xff0c;防止数据泄露&#xff0c;同时提高文件的查找效率&#xff0c;减少重复工作&#xff0c;促进团队协作&#xff0c;支持决策制定&#xff0c;并维护企业的知识产权 。通过实…

[枚举坤坤]二进制枚举基础

我们都知道数据是以二进制形式存储在计算机中的。当我们使用十进制数进行编程时&#xff08;如a10&#xff09;实际上计算机要先进行一步转码&#xff0c;将其化为二进制的形式进行计算。如果在编程的过程中我们可以直接越过转码这一步去操纵二进制形式进行运算&#xff0c;程序…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是@gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全 限制 尝试一下!…

深度学习面试笔试之循环神经网络(RNN)、门控循环单元(GRU)、长短期记忆(LSTM)

深度学习面试笔试之循环神经网络RNN、门控循环单元GRU、长短期记忆LSTM 循环神经网络(RNN)1. 什么是RNN1.1 RNN的应用1.2 为什么有了CNN&#xff0c;还要RNN?1.3 RNN的网络结构1.4 双向RNN1.5 BPTT算法 2. 其它类型的RNN3. CNN与RNN的区别4. 为什么RNN 训练的时候Loss波动很大…

CLion和Qt 联合开发环境配置教程(Windows和Linux版)

需要安装的工具CLion 和Qt CLion下载链接 :https://www.jetbrains.com.cn/clion/ 这个软件属于直接默认安装就行&#xff0c;很简单&#xff0c;不多做介绍了 Qt:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ window 直接点exe Linux 先c…

Python | Leetcode Python题解之第491题非递减子序列

题目&#xff1a; 题解&#xff1a; class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:def dfs(i, tmp):if i len(nums):if len(tmp) > 2:res.append(tmp[:]) # 拷贝&#xff0c;tmp[:]而非tmpreturn# 选 nums[i]if not tmp or nu…

我们可以用微服务创建状态机吗?

大家好&#xff0c;我是锋哥。今天分享关于【我们可以用微服务创建状态机吗&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 我们可以用微服务创建状态机吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 是的&#xff0c;微服务架构可…

Java | Leetcode Java题解之第496题下一个更大元素I

题目&#xff1a; 题解&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Map<Integer, Integer> map new HashMap<Integer, Integer>();Deque<Integer> stack new ArrayDeque<Integer>();for (int i num…

19.面试算法-树的深度优先遍历(一)

1. 深入理解前中后序遍历 深度优先遍历有前中后三种情况&#xff0c;大部分人看过之后就能写出来&#xff0c;很遗憾大部分只是背下来的&#xff0c;稍微变换一下就废了。 我们再从二叉树的角度看递归&#xff0c;每次遇到递归&#xff0c;都按照前面说的四步来写&#xff0c…

STM32_实验3_控制RGB灯

HAL_Delay 是 STM32 HAL 库中的一个函数&#xff0c;用于在程序中产生一个指定时间的延迟。这个函数是基于系统滴答定时器&#xff08;SysTick&#xff09;来实现的&#xff0c;因此可以实现毫秒级的延迟。 void HAL_Delay(uint32_t Delay); 配置引脚&#xff1a; 点击 1 到 IO…

wordpress 子比主题美化 四宫格 多宫格 布局插件

wordpress 主题美化 四宫格 多宫格 布局插件&#xff08;只在子比主题上测试过&#xff0c;其它主题没测试&#xff09; A5资源网四宫格布局插件是一个功能丰富的WordPress插件,专为创建自适应的四宫格布局而设计。这个插件具有以下主要特点: 灵活的布局: 支持1到8个宫格的自定…

Apache Paimon Catalog

Paimon Catalog可以持久化元数据,当前支持两种类型的metastore: 文件系统(默认):将元数据和表文件存储在文件系统中。hive:在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。2.2.1 文件系统 CREATE CATALOG fs_catalog WITH ( type = paimon, warehouse = h…

Yolo目标检测:实时性与准确性的完美结合

在目标检测领域&#xff0c;Yolo&#xff08;You Only Look Once&#xff09;算法无疑是一颗璀璨的明星。自2016年由Joseph Redmon等人提出以来&#xff0c;Yolo凭借其出色的实时性和准确性&#xff0c;迅速在多个应用场景中崭露头角。本文将详细介绍Yolo目标检测的基本原理、优…

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日&#xff0c;财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…