当前位置: 首页 > article >正文

HTML+CSS - 网页布局之多列布局定位

1. 多列布局

CSS中多列布局处理文本内容,特别适合对于长段落或者大量文本进行自动分栏显示

类似于grid分布,但相较之下更加简洁明了

基本语法

<div class="container">
  <p>
    这是一些示例文本,当我们使用 column-count 属性时,文本会被自动分成多列显示。无论是新闻文章、书籍段落,还是其他长段落内容,这种布局方式都非常实用。
  </p>
</div>

以下CSS代码都是通过上述HTML文档举例

 

1.1 定义文本分栏 

• column-count

指定文本分为几列

.container
{
    column-count: 3; /*将文本分为3列*/
}

• column-width

指定每一列的宽度,浏览器根据可用空间和指定宽度自动调整列数

.container
{
    column-gap: 20px; /*每一列之间的间隔*/
}

• column-gap

设置列之间的间距,如下代码所示,每一列之间的间距为20px

.container
{
    column-count:3;
    column-gap:20px;
}

• column-rule

为列之间添加分割线,创建方式与border相同,涵盖粗细,线段形式,颜色

这条分割线本身并不占用宽度,它置于用 column-gap 创建的间隙内。如果需要更多空间,你需要增加 column-gap 的值。

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

1.2 实例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
		body{
			width:90%;
			max-width:900px;
			margin:2em auto;
			font:.9em/1.2 Arial, Helvetica, sans-serif;
		}
		.container{
			column-count:2;
			column-width:200px;
			column-gap:20px;
			column-rule:4px dotted rgb(79,185,227); /*这条分割线本身并不占用宽度。
			它置于用 column-gap 创建的间隙内。如果需要更多空间,你需要增加 column-gap 的值*/
		}
		.card{
			break-inside:avoid;
			background-color: #808080;
			border: 5px solid rgb(79,185,227);
			padding :10px
		}
		</style>
	</head>
	<body>
		<h1>Simple multicol example</h1>
		<div class='container'>
			<div class='card'>
			<p>
				Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.
				Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus
				laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra
				egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam
				erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare
				egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum
				sapien.
			</p>
			</div>
			
			<div class='card'>
			<p>
				Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere
				sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus
				tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu
				urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque
				penatibus et magnis dis parturient montes, nascetur ridiculus mus.
			</p>
			</div>
		</div>
	</body>
</html>

2. 定位

2.1 静态定位

静态定位是每个元素获取的默认值——它只是意味着“将元素放入它在文档布局流中的正常位置——这里没有什么特别的。

.positioned {
  position: static;
  background: yellow;
}

2.2 相对定位

相对定位定义元素的位置根据其默认位置相对得来

		.positioned{
			position:relative; /*根据初始位置进行调整*/
			background:yellow;
			top:30px;

使用top,bottom,left,right进行定位,对于相对位置而言,具体位置与所设定元素为反方向,像一双无形的手推了过去。

这些属性的值可以采用逻辑上期望的任何单位——px、mm、rem、% 等。

2.3 绝对定位

它们指定元素应距离每个包含元素的边的距离,而不是指定元素应该移入的方向。

绝对定位的元素不再存在于正常文档布局流中。相反,它坐在它自己的层独立于一切。

.positioned {
  position: absolute;
  top:10px;
  left:10px;
  background: yellow;
}

2.4 元素重叠处理

当元素开始重叠,我们需要考虑各个元素的层级结构。

让我们想象整个网页是三维空间,网页内容代表X,Y轴,Z轴表示高度

z-index参数应运而生

值影响定位元素位于该轴上的位置;正值将它们移动到堆栈上方,负值将它们向下移动到堆栈中。默认情况下,定位的元素都具有 z-index 为 auto,实际上为 0。

z-index: 1; /*元素向上*/

2.5 固定定位

绝对定位将元素固定在相对于其位置最近的祖先。(如果没有,则为初始包含它的块)而固定定位固定元素则是相对于浏览器视口本身。使用鼠标滚动,该定位将会一直保持

		h1{
			position:fixed;
			top:0;
			width:500px;
			margin:0 auto;
			background:white;
			padding:10px;
		}

为了使得首行文本可以看见,定义top-margin即可

2.6 sticky定位

类似于相对位置与固定定位的混合体

它允许被定位的元素表现得像相对定位一样,直到它滚动到某个阈值点(例如,从视口顶部起 10 像素)为止,此后它就变得固定了。

		.positioned{
			position:sticky;
			top:1px;
			left:30px;
		}

top与left表示滑动界面时的固定位置

3. 参考资料

弹性盒子 - 学习 Web 开发 | MDN


http://www.kler.cn/news/306493.html

相关文章:

  • 网络安全应急响应概述
  • 用STM32做一个USB-TTL工具吧
  • JavaScript Promise 异步编程的一些代码分享
  • 远程桌面内网穿透是什么?有什么作用?
  • openssl下载和创建证书
  • 如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?
  • C++:opencv多边形逼近二值图轮廓--cv::approxPolyDP
  • Java集合进阶--双列集合
  • R与机器学习系列|15.可解释的机器学习算法(Interpretable Machine Learning)(下)
  • HarmonyOS开发5.0【rcp网络请求】
  • ChatGPT+2:修订初始AI安全性和超级智能假设
  • L298N电机驱动方案简介
  • JAVA:Nginx(轻量级的Web服务器、反向代理服务器)--(1)
  • JAVA学习-练习试用Java实现“串联所有单词的子串”
  • 物联网——USART协议
  • 揭开OpenAI草莓模型神秘面纱——重塑大语言模型的逻辑能力
  • np.argpartition 是 NumPy 库中的一个非常有用的函数,具体用法如下:
  • 力扣周赛:第415场周赛
  • 黑神话悟空+云技术,游戏新体验!
  • Using OpenAI API from Firebase Cloud Functions in flutter app
  • uniapp(H5)设置反向代理,设置成功后页面报错
  • 前端网络请求库:Axios
  • C++初阶学习——探索STL奥秘——vector的模拟实现
  • 20Kg载重30分钟续航多旋翼无人机技术详解
  • 微服务下功能权限与数据权限的设计与实现
  • 差分进化算法(DE算法)求解实例---旅行商问题 (TSP)
  • C语言自定义类型-联合与枚举
  • 无人机视角下落水救援检测数据集
  • Vue学习:props验证的一个小细节“Prop 名字格式”
  • 本专题大纲