前端学习记录~2023.7.17~CSS杂记 Day9

news2024/11/28 14:36:14

  • 前言
  • 一、浮动
    • 1、使盒子浮动起来
    • 2、清除浮动
    • 3、清除浮动元素周围的盒子
      • (1)clearfix 小技巧
      • (2)使用 overflow
      • (3)display: flow-root
  • 二、定位
    • 1、定位有哪些
    • 2、top、bottom、left 和 right
    • 3、定位上下文
    • 4、介绍 z-index
    • 5、滚动索引
  • 三、多列布局
    • 1、column-count
    • 2、column-width
    • 3、给多列增加样式
    • 4、设置 break-inside
  • 四、响应式设计
    • 1、媒介查询
    • 2、灵活网格
    • 3、现代布局技术
      • (1)多个列
      • (2)伸缩盒
      • (3)CSS网格
      • (4)响应式图像
      • (5)响应式排版
      • (6)视口元标签
  • 总结


前言

由于有很多知识非常符合直觉或者和其他语言有通用性,因此个人觉得不需要全部记下来,本篇只记录一些个人觉得需要注意或单独记忆的知识点。

同时为了提高效率和减少对不重要内容的时间投入,会考虑更加精简。

相比前两篇,本篇更详细记录了浮动、定位和多列布局。同时记录了响应式设计


一、浮动

float属性

1、使盒子浮动起来

在 CSS 规则中添加float属性,比如

.box {
    float: left;
    margin-right: 15px;
    width: 150px;
    height: 100px;
    border-radius: 5px;
    background-color: rgb(207,232,220);
    padding: 1em;
}

浮动元素会脱离正常的文档布局流,并吸附到其父容器的左边。在正常布局中位于该浮动元素之下的内容,此时会围绕着浮动元素,填满其右侧的空间

margin-right把其他文字从浮动元素边推走了

我们可以在浮动元素上应用 margin,将文字推开,但不能在文字上应用 margin 将浮动元素推走。这是因为浮动的元素脱离了正常文档流,紧随其后的元素排布在它的“后方”。

2、清除浮动

一个浮动元素会被移出正常文档流,且其他元素会显示在它的下方。如果我们不想让剩余元素也受到浮动元素的影响,我们需要 停止 它;这是通过添加 clear 属性实现的。

例如向浮动元素下方的第二个段落添加 cleared 类,然后向 CSS 文件中添加以下样式:

.cleared {
  clear: left;
}

应该看到,第二个段落已经停止了浮动,不会再跟随浮动元素排布了:
在这里插入图片描述

clear 属性接受下列值:

  • left:停止任何活动的左浮动
  • right:停止任何活动的右浮动
  • both:停止任何活动的左右浮动

3、清除浮动元素周围的盒子

如果存在一个盒子 同时 包含了很高的浮动元素和一个很短的段落,会出现下面的问题

<div class="wrapper">
  <div class="box">Float</div>

  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.</p>
</div>
.wrapper {
  background-color: rgb(79,185,227);
  padding: 10px;
  color: #fff;
}

在这里插入图片描述
这是因为浮动元素处于正常文档流之外,停止紧随其后元素的浮动并不像之前那样奏效。如果你想让盒子联合包住浮动的项目以及第一段文字,同时让紧随其后的内容从盒子中清除浮动,这就是一个问题。

下面有三种方法可以处理这种问题,前两种在所有浏览器中均可以奏效(虽然看上去有点“小技巧”),最后一种是可以处理问题的较新的解决方案。

(1)clearfix 小技巧

传统上,这个问题通常由所谓的 “clearfix 小技巧” 解决,其过程为:先向包含浮动内容及其本身的盒子后方插入一些生成的内容,并将生成的内容清除浮动

.wrapper::after {
  content: "";
  clear: both;
  display: block;
}

这与在浮动盒子后手动添加诸如 div 的 HTML 元素,并设置其样式为 clear:both 是等效的

效果如下
在这里插入图片描述

(2)使用 overflow

一个替代的方案是将包裹元素的 overflow 属性设置为除 visible 外的其他值

.wrapper {
  background-color: rgb(79,185,227);
  padding: 10px;
  color: #fff;
  overflow: auto;
}

这个例子之所以能够生效,是因为创建了所谓的 块格式化上下文(BFC)。可以把它看作页面内部包含所需元素的一小块布局区域。如此设置可以让浮动元素包含在 BFC 及其背景之内。大部分情况下这种小技巧都可以奏效,但是可能会出现莫名其妙的滚动条或裁剪阴影,这是使用 overflow 带来的一些副作用。

(3)display: flow-root

一个较为现代的方案是使用 display 属性的 flow-root 值。它可以无需小技巧来创建块格式化上下文(BFC),在使用上没有副作用

.wrapper {
  background-color: rgb(79,185,227);
  padding: 10px;
  color: #fff;
  display: flow-root;
}

二、定位

定位允许你从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置。本节解释的是定位 (position) 的各种不同值,以及如何使用它们。

position属性

1、定位有哪些

  • 静态定位(position: static):元素默认属性,指放在文档布局流的默认位置
  • 相对定位(position: relative):允许我们相对于元素在正常的文档流中的位置进行移动,包括将两个元素叠放在页面上。这对于微调和精准设计非常有用
  • 绝对定位(position: absolute):将元素完全从页面的正常布局流中移除,类似将它单独放在一个图层中。我们可以将元素相对于页面的<html>元素边缘固定,或相对于该元素的最近被定位祖先元素。绝对定位在创建复杂布局效果时非常有用,例如通过标签显示和隐藏的内容面板或者通过按钮控制滑动到屏幕中的信息面板
  • 固定定位(position: fixed):与绝对定位类似,但它是将一个元素相对浏览器视口固定,而不是相对于另外一个元素。这在创建类似在整个页面滚动过程中总是处于屏幕的某个位置的导航菜单时非常有用
  • 粘性定位(position: sticky ):一种新的定位方式,它会让元素先保持和 position: static 一样的定位,当它的相对视口位置达到某一个预设值时,它就会像 position: fixed 一样定位

2、top、bottom、left 和 right

top, bottom, left, 和 right 来精确指定要将定位元素移动到的位置。

需要注意的是,在相对定位中,这些值相当于向反方向给定一个推力,比如指定 top: 30px,会像是有一个力推动框的顶部使它向下移动 30px

绝对定位中,他们指定元素应距离每个包含元素的边的距离,而不是指定元素应该移入的方向。所以在这种情况下, 指定top: 30px,我们说的绝对定位元素应该位于从“包含元素”的顶部 30px

3、定位上下文

如果所有的父元素都没有显式地定义 position 属性,那么所有的父元素默认情况下 position 属性都是 static。结果,绝对定位元素会被包含在初始块容器中。这个初始块容器有着和浏览器视口一样的尺寸,并且<html>元素也被包含在这个容器里面。简单来说,绝对定位元素会被放在<html>元素的外面,并且根据浏览器视口来定位。

可以通过改变定位上下文来更改绝对定位的元素的相对位置元素。做法就是设置其中一个父元素的定位属性 —— 也就是包含绝对定位元素的那个元素(如果要设置绝对定位元素的相对元素,那么这个元素一定要包含绝对定位元素)

4、介绍 z-index

当元素开始重叠,可以通过z-index属性更改堆叠顺序。

默认情况下,定位的元素都具有 z-indexauto,实际上为 0。较高的值将高于较低的值,比如设置为 1 就会在更上面

需要注意,z-index 只接受无单位索引值

5、滚动索引

position: sticky 的另一种有趣且常用的用法,是创建一个滚动索引页面。在此页面上,不同的标题会停留在页面顶部。

这个需要用的时候再去专门查询吧。


三、多列布局

多列布局声明提供了一种多列组织内容的方式,正如你在一些报纸中看到的那样本节记录怎么使用这一特性。

1、column-count

使用column-count 将创建指定数量的列

.container {
  column-count: 3;
}

2、column-width

使用column-width,浏览器将按照你指定的宽度尽可能多的创建列;任何剩余的空间之后会被现有的列平分。这意味着你可能无法期望得到你指定宽度,除非容器的宽度刚好可以被你指定的宽度除尽。

3、给多列增加样式

这样创建的列无法单独的设定样式。不存在让单独某一列比其他列更大的方法,同样无法为某一特定的列设置独特的背景色、文本颜色。

有两种方式更改列的样式:

  • column-gap:改变列间间隙
  • column-rule:在列间加入一条分割线

column-rulecolumn-rule-colorcolumn-rule-style的缩写,接受同 border 一样的单位

例如:

.container {
  column-count: 3;
  column-gap: 20px;
  column-rule: 4px dotted rgb(79, 185, 227);
}

效果如下:
在这里插入图片描述
值得一提的是这条分割线本身并不占用宽度。它置于用 column-gap 创建的间隙内。

4、设置 break-inside

break-inside属性定义页面、列或区域发生中断时候的元素该如何表现。

  • break-inside: auto;元素可以中断
  • break-inside: avoid;元素不能中断

四、响应式设计

这节会涉及到,在建立响应式站点的时候,你可能会用到的各式 Web 平台的特色功能。

1、媒介查询

媒介查询允许我们运行一系列测试,例如用户的屏幕是否大于某个宽度或者某个分辨率,并将 CSS 选择性地适应用户的需要应用在样式化页面上。媒介查询也是响应式设计新兴起来的原因。

例如,下面的媒体查询进行测试,以知晓当前的 Web 页面是否被展示为屏幕媒体(也就是说不是印刷文档),且视口至少有 800 像素宽。用于.container选择器的 CSS 将只会在这两件前提存在的情况下应用。

@media screen and (min-width: 800px) {
	.container {
		margin:1em 2em;
	}
}

可以在一张样式表上加入多条媒体查询,调整整个页面或者部分页面以达到适应各式屏幕尺寸的最佳效果。

媒体查询,以及样式改变时的点,被叫做断点(breakpoints)。

使用媒体查询时的一种通用方式是,为窄屏设备(例如移动设备)创建一个简单的单栏布局,然后检查是否是大些的屏幕,在你知道你有足够容纳的屏幕宽度的时候,开始采用一种多栏的布局。这经常被描述为移动优先设计。

2、灵活网格

响应式站点不只是在断点之间改变它们的布局,它们是建立在灵活网格上的。一个灵活网格意味着你不需要适配每个可能使用的设备尺寸。

早年间进行响应式设计的时候,我们唯一的实现布局的选项是使用float。灵活浮动布局是这样实现的,让每个元素都有一个作为宽度的百分数,而且确保整个布局的和不会超过 100%。在他对于液态网格文章的原文中,Marcotte 详细描述了一种布局的法则,通过使用像素并把布局转化为百分数的方式设计。

target / context = result

例如如果我们的预期栏尺寸为 60 像素,而且它所在的上下文(或者容器)为 960 像素,我们在将零点二的空间移动到右边以后,用 960 去除 60,得到我们能够使用在我们的 CSS 上的值

.col {
  width: 6.25%; /* 60 / 960 = 0.0625 */
}

3、现代布局技术

(1)多个列

也就是之前提到的column-countcolumn-width

(2)伸缩盒

也就是弹性盒子 flex 相关内容

(3)CSS网格

也就是 grid 网格相关内容

(4)响应式图像

最简单的一个是诸如设定图像max-width: 100%,但弊端就是图像有可能会显示得比原始尺寸少很多,浪费带宽。或希望在移动端更小尺寸时展示不同的图片,也无法实现。

使用<picture>元素和<img> srcsetsizes 特性,解决了这两个问题

可以在 HTML 章节的响应式图片一节仔细看

(5)响应式排版

例如我们只想在大些的屏幕上有个超大的标题,那我们先弄个小点的标题,再使用媒体查询,在我们知道用户使用至少1200px的屏幕的时候,拿大些的尺寸覆写它。

@media (min-width: 1200px) {
  h1 {
    font-size: 4rem;
  }
}

一个有趣的方式是使用视口单位vw来实现响应式排版。1vw等同于视口宽度的百分之一,即如果你用vw来设定字体大小的话,字体的大小将总是随视口的大小进行改变。

问题在于,当做上面的事情的时候,因为文本总是随着视口的大小改变大小,用户失去了放缩任何使用vw单位的文本的能力。所以你永远都不要只用 viewport 单位设定文本。

这里有一个解决方法,它使用了calc(),如果你将vw单位加到了使用固定大小(例如em或者rem)的值组,那么文本仍然是可放缩的。基本来说,是vw加在了放缩后的值上。

h1 {
  font-size: calc(1.5rem + 3vw);
}

(6)视口元标签

如果你看看一张响应式页面的 HTML 源代码,你通常将会在文档的<head>看到下面的<meta>标签。

<meta name="viewport" content="width=device-width,initial-scale=1">

这个元标签告诉移动端浏览器,它们应该将视口宽度设定为设备的宽度,将文档放大到其预期大小的 100%,在移动端以你所希望的为移动优化的大小展示文档。

你应该在你的文档头部总是包含上面那行 HTML!

和视口元标签一起,你可以使用另外几个设定,但大体说来,上面那行就是你想要使用的:

  • initial-scale:设定了页面的初始缩放,我们设定为 1
  • height:特别为视口设定一个高度
  • minimum-scale:设定最小缩放级别
  • maximum-scale:设定最大缩放级别
  • user-scalable:如果设为no的话阻止缩放

应该避免使用minimum-scalemaximum-scale,尤其是将user-scalable设为no。用户应该有权力尽可能大或小地进行缩放,阻止这种做法会引起访问性问题。


总结

只记录了 CSS 的部分内容

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jupyter notebook更换虚拟环境(内核)

jupyter notebook更换虚拟环境&#xff08;内核&#xff09; 创建一个新的虚拟环境 # stk_env 虚拟环境的名字&#xff0c;任取。 conda create -n stkenv python3.9激活虚拟环境 conda activate stkenv安装ipykernel # 为该虚拟环境&#xff0c;安装内核。 conda install -c a…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时&#xff0c;使用的是spring-cloud微服务构架&#xff0c;mq消息消费模块是单独一个模块&#xff0c;但启动这个模块一直报如下错误&#xff1a; java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错&#xff0c;刚开…

FCOS 论文学习

1. 解决了什么问题&#xff1f; 之前的目标检测器如 RetinaNet、SSD、YOLOv3 都依赖于 anchors。基于 anchors 的检测器有如下三个缺点&#xff1a; 检测表现对于 anchors 的大小、宽高比和数量等超参数很敏感&#xff1b;即使精心设计了 anchors&#xff0c;但由于大小和宽高…

架构训练营学习笔记:4-2 存储架构模式之复制架构

高可用的关键指标 问题&#xff1a;分为故障跟灾难。不是有了多活架构就不在用复制架构 &#xff0c;还是之前的合适原则&#xff1a;多活架构的技术复杂度 跟成本都比复制架构高。 高可用的关键指标 恢复时间目标(RecoveryTimeObjective&#xff0c;RTO)指为避免在灾难发生后…

rabbitmq部署(docker方式)

前言&#xff1a;rabbitmq一旦有漏洞&#xff0c;版本升级麻烦&#xff0c;于是改为docker部署 环境&#xff1a;centos7 #停掉之前的服务 systemctl stop rabbitmq-server systemctl disable rabbitmq-server 查了官网&#xff0c;当前3.11.x 最高版本是3.11.19, 虽然3.12…

【开源分享】在线客服系统源代码-thinphp网站在线客服系统源码(附源码完整搭建教程)...

本文的核心是一个多国语言在线客服聊天系统源码。我们将在这里保持非常简单。 这是一款旧版本的PHP客服源码。 基于ThinkPHP5 workerman&#xff0c;整体架构比较老&#xff0c;PHP客服端以及界面等需要在php-fpm下运行&#xff0c;即时通讯websocket服务端需要命令行执行。 源…

N-gram模型学习

网上有很多比较细节比较复杂比较清晰的介绍&#xff0c;我这里就不再细细的描述了&#xff0c;之前看文献的时候看到了这个模型&#xff0c;脑子里又没有印象&#xff0c;结果发现是python的学习范畴。 总的来说&#xff0c;这是一种文字&#xff0c;甚至可以上升到符号关联性…

基于Python的工业图像异常检测基础技术详解

引言 博文字数7000&#xff0c;建议阅读时间20分钟。 这篇博客对当前几种典型的图像异常检测算法进行了比较&#xff0c;包括Kmeans、Kmeans以及大津法&#xff08;OTSU&#xff09;&#xff0c;并给出了相关的代码实现与测试方法。总结的比较结果如下表所示&#xff1a; 方…

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android

cocosCreator3.6以上接入Bugly上报其实很简单&#xff0c;不需要网上那么多弯弯绕&#xff0c;三须三步走。 1. 按照官网方式接入android的bugly 2. android端写一个Bugly上报管理类 3. 修改你工程目录下native\engine\common\Classes\目录下的Game.h, Game.cpp两个文件&…

发电厂主厂房智能照明控制系统的设计和应用

摘要&#xff1a;当前&#xff0c;电厂主厂房的照明规模较大&#xff0c;而且具有许多回路&#xff0c;增加了电厂照明负荷&#xff0c;导致照明过程中的能源消耗较高。对此&#xff0c;电厂需要合理设计智能照明系统&#xff0c;运用智能技术提高电厂照明的运行管理水平&#…

如何在化工行业运用IPD?

化工行业作为国民经济的重要基础性行业&#xff0c;包含数以万计的产品种类&#xff0c;各具有不同的物理化学特性。化工产品的消费同国民经济状况联系非常紧密&#xff0c;主要去向广泛分布于基建、房地产、农业、汽车、服装等国民经济各个领域。按应用领域划分&#xff0c;典…

PCA与SVD

PCA流程&#xff1a; 当数据维度大时&#xff0c;构建协方差矩阵并求其特征值、特征向量会导致计算量大。所以可以利用SVD求解。 PCA算法的优化目标就是: ①降维后同一维度的方差最大。 ②不同维度之间的相关性为0。 根据线性代数&#xff0c;我们可以知道同一元素的协方差就…

Django项目开发快速入门

Django项目开发快速入门 生成Django项目编写module后台管理系统admin自定义管理页面视图函数使用Django模板 生成Django项目 现在cmd中使用命令安装Django框架 pip install django3.2使用命令生成项目 django-admin startproject DjStore使用命令生成应用 python .\manage.…

管道模型--Asp.Net MVC篇 Http请求

管道模型–Asp.Net MVC篇 Http请求 我们自己写的程序,是怎样进行处理的?一个完整的HTTP请求流程: 一. 请求大致流程 拿一个实例了解整个流程的步骤: 用户浏览器输入地址 例如 http://www.csdn.net DNS解析(域名供应商) 将输入的网址解析成IP+端口 请求到达服务器Server I…

ChatGPT的应用场景和局限性,以及发展前景

目录 导语 ChatGPT的应用场景 ChatGPT的局限性 ChatGPT的发展前景 总结 导语 作为一款基于人工智能的自然语言处理(NLP)​​聊天机器人​​程序&#xff0c;ChatGPT通过大量来自互联网的文本进行训练&#xff0c;并使用深度学习和机器学习算法来理解用户的问题并提供回答。…

[RocketMQ] Broker CommitLogDispatcher 异步构建ConsumeQueue和IndexFile源码解析 (十四)

CommitLogDispatcherBuildConsumeQueue: 异步构建ConsumerQueue。CommitLogDispatcherBuildIndex: 异步构建IndexFile。 文章目录 1.CommitLogDispatcherBuildConsumeQueue构建ConsumeQueue1.1 putMessagePositionInfo写入消息位置信息1.2 findConsumeQueue查找ConsumeQueue1.2…

Windows Docker部署springboot微服务

Windows Docker部署springboot微服务 前言 偶然的机会让我能够实操在Windows server 2019版本的服务器上进行springCloud服务的部署 过程中深刻的体会到了为什么Docker要推荐使用Linux系列的系统进行操作 遇到的问题 springboot镜像打包微服务启动后nacos连不上使用的基础…

zabbix企业级监控(监控win10主机)---接小白到大神之路运维第63天

第三阶段基础 zabbix企业级监控监控win10主机 目录 Wind10配置&#xff1a; Web图形操作&#xff1a; Wind10配置&#xff1a; 服务器相关信息&#xff1a; 关闭防火墙、IP地址为192.168.59.128 1.首先在C盘根目录下创建zabbix的文件夹 2.将需要的文件拖到该文件夹内&…

CRM排名前三的的系统有哪些特点?

crm经过多年的发展&#xff0c;不仅可以管理好客户关系还是企业重要的战略武器。让企业的销售、市场营销和客服服务部门建立密切联系&#xff0c;在crm一个平台上处理商机&#xff0c;简化业务流程&#xff0c;为组织降本增效。国内crm系统排名哪些技术商更靠前&#xff1f; 1…

CISCN2023国赛复现

[CISCN 2023 初赛]被加密的生产流量 下载附件打开 他的题目叫modbus modbus是一种协议 在这些流量里都找不到有用信息&#xff0c;但是发现了有tcp的追踪流 打开看看 发现两个一组的这几行数字组合像是base编码 MMYMMX3GNEYMOXZRGAYDA 放到base家族解一下密 最后在base32解…