前端的CSS样式表知识提要

news2024/11/13 14:31:31

文章目录

    • 前言
    • 基本概念
      • 屏幕尺寸
      • 屏幕分辨率
      • 屏幕像素密度/像素密度/屏幕密度
      • 视口和浏览器窗口
      • 长度单位:px、em/rem和vh
    • CSS属性的继承与覆盖
    • CSS选择器
    • CSS 布局基础
      • 盒子模型
      • 绝对定位和相对定位
      • display属性
      • 浮动
      • 正常布局流(normal flow)
      • Flexbox 布局
      • 水平和垂直居中
      • Grid 布局
      • 定位技术
      • 表格布局和多列布局
      • 滚动条问题
    • 响应式设计
      • 例子
    • saas/scss和Less
    • Bootstrap
      • bootstrap 类样式中的 mt mb ml mr mx my pt pb pl pr px py 含义
    • Windi CSS
    • 参考

前言

虽然自己搞过web开发很长时间,但对最新的css技术和原理不甚了了,基本是粘贴复制。像helloworld.net这样清新的界面我就做不出来。于是想彻底学习一次样式表的主流技术。

基本概念

屏幕尺寸

指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米。
常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等。

屏幕分辨率

指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素横向像素来表示一个手机的分辨率,如1960 x 1080。(这里的1像素指的是物理设备的1个像素点)。例如iphone6: 7501334。

屏幕像素密度/像素密度/屏幕密度

屏幕上每英寸可以显示的像素点的数量,单位是ppi,即“pixels per inch”的缩写。
屏幕像素密度与屏幕尺寸和屏幕分辨率有关。

注意点:设备像素和CSS像素不同,前者是物理像素,即每个像素,或者叫点,其大小是固定的;而CSS像素是相对的,实际物理尺寸是变化的,一个CSS像素可以包含多个设备像素。

视口和浏览器窗口

在普通的桌面端,视口的默认宽度和浏览器窗口的宽度一致。

在移动端,浏览器厂商面临着一个比较大的问题,他们如何将数以万计甚至可以说是数以亿计的pc端网页完整的
呈现在移动端设备上,并且不会出现横向滚动条?
如果这个时候,视口的宽度还是和浏览器窗口的宽度一致?我们都知道pc端网页一般都为960px或者1024px,
那么要完整的放下它们,我们移动端浏览器必须要有个容器放下它吧,而且只有有了这个容器我们才能很好的规定到底我移动端的浏览器到底能放下多大的页面吧(可能大于960 页可能大于1024)。这个数值最好大于960,而且设备间的这个容器大小是没有太大差异的。而且基于用户体验我们更关心width。

长度单位:px、em/rem和vh

  • px通常被称为绝对单位。em和rem为相对单位。默认的浏览器字体大小为16px。
  • 字体的大小如果采用em或rem,含义是相对对父级字体或根级字体(html)的大小。
    rem适配的本质是参照根元素字体,不管视图多大,在不同机型上,1rem等于视图的宽度,所以,根标签的font-size改成布局视口的大小。
  • vh为视口高度(viewport height),1vh等于1%的当前视口高度。

CSS属性的继承与覆盖

定义:父元素设置了某属性,子元素也会有该属性。属性设为“inherit”,就会继承父元素的样式。
样式的覆盖规则:

  • 根据引入方式确定优先级
    优先级由高到低依次为:“内联属性”——>“写在 style标签里”——>“外部链接”
  • 后写的覆盖先写的(同一级别)
    即就是在文件上代码行号更靠下的优先级更高
  • 加有“!important”的样式,优先级最高
    即无论哪一种情况,只要在样式上加了important,那么该样式的优先级最高。
  • 选择器优先级
    在选择器不同的情况下,给每种选择器制定一个权值,计算命中一个元素的所有选择器的总权值,值高者获胜。

CSS选择器

CSS组合选择符包括各种简单选择符的组合方式。在 CSS3 中包含了四种组合方式:

  • 后代选择器(以空格 分隔)
  • 子元素选择器(以大于 > 号分隔)
  • 相邻兄弟选择器(以加号 + 分隔)
  • 普通兄弟选择器(以波浪号 ~ 分隔)

CSS 布局基础

盒子模型

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
在这里插入图片描述

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

注意:padding是对容器而言的,margin是对元素而言的,margin是距离容器、或同一容器内兄弟组件的边距。

绝对定位和相对定位

CSS position 属性可以是relative或absolute。元素的定位与文档流无关,所以它们可以覆盖页面上的其它元素
绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于。absolute 定位使元素的位置与文档流无关,因此不占据空间。absolute 定位的元素和其他元素重叠。
z-index属性指定了一个元素的堆叠顺序。

display属性

常见的值:block, inline,inline-block,table-cell, flex,grid。

描述
none此元素不会被显示。
block此元素将显示为块级元素,此元素前后会带有换行符。
inline默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block行内块元素。(CSS2.1 新增的值)
list-item此元素会作为列表显示。
run-in此元素会根据上下文作为块级元素或内联元素显示。
compactCSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
markerCSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
table此元素会作为块级表格来显示(类似 table,表格前后带有换行符。
inline-table此元素会作为内联表格来显示(类似 table),表格前后没有换行符。
table-row-group此元素会作为一个或多个行的分组来显示 ,类似 tbody
table-header-group此元素会作为一个或多个行的分组来显示(类似 thead
table-footer-group此元素会作为一个或多个行的分组来显示(类似 tfoot
table-row此元素会作为一个表格行显示(类似 tr
table-column-group此元素会作为一个或多个列的分组来显示(类似 colgroup
table-column此元素会作为一个单元格列显示(类似 col
table-cell此元素会作为一个表格单元格显示(类似 td 和 th
table-caption此元素会作为一个表格标题显示(类似 caption
inherit规定应该从父元素继承 display 属性的值

浮动

把一个元素“浮动”(float) 起来,会改变该元素本身和在正常布局流(normal flow)中跟随它的其他元素的行为。这一元素会浮动到左侧或右侧,并且从正常布局流 (normal flow) 中移除,这时候其他的周围内容就会在这个被设置浮动 (float) 的元素周围环绕。

float 属性有四个可能的值:

  • left — 将元素浮动到左侧。
  • right — 将元素浮动到右侧。
  • none — 默认值,不浮动。
  • inherit — 继承父元素的浮动属性。

正常布局流(normal flow)

是指在不对页面进行任何布局控制时,浏览器默认的 HTML 布局方式。

Flexbox 布局

采用flexbox布局,能解决之前需要**“浮动+负边距”**才能解决的布局问题。
父级display:flex之后,子元素会变成 “inline-flex”,表现为非块级元素, 不具有主动换行的特性,div 默认的块级元素特征会丢失。

水平和垂直居中

经常在一个容器中需要让文字和子元素保持水平和垂直居中,可以这样设置:

display: flex;
align-items: center;
justify-content: center;

text-align是设置或检索对象中文本的左中右对齐方式。
vertical-align是用于指定元素的上下垂直对齐方式。

Grid 布局

定位技术

定位 (positioning) 能够让我们把一个元素从它原本在正常布局流 (normal flow) 中应该在的位置移动到另一个位置。
有五种主要的定位类型需要我们了解:

  • 静态定位(Static positioning)是每个元素默认的属性——它表示“将元素放在文档布局流的默认位置——没有什么特殊的地方”。
  • 相对定位(Relative positioning)允许我们相对于元素在正常的文档流中的位置移动它——包括将两个元素叠放在页面上。这对于微调和精准设计(design pinpointing)非常有用。
  • 绝对定位(Absolute positioning)将元素完全从页面的正常布局流(normal layout flow)中移出,类似将它单独放在一个图层中。我们可以将元素相对于页面的 元素边缘固定,或者相对于该元素的最近被定位祖先元素(nearest positioned ancestor element)。绝对定位在创建复杂布局效果时非常有用,例如通过标签显示和隐藏的内容面板或者通过按钮控制滑动到屏幕中的信息面板。
  • 固定定位(Fixed positioning)与绝对定位非常类似,但是它是将一个元素相对浏览器视口固定,而不是相对另外一个元素。这在创建类似在整个页面滚动过程中总是处于屏幕的某个位置的导航菜单时非常有用。
  • 粘性定位(Sticky positioning)是一种新的定位方式,它会让元素先保持和 position: static 一样的定位,当它的相对视口位置(offset from the viewport)达到某一个预设值时,它就会像 position: fixed 一样定位。

表格布局和多列布局

用得少了,不讲了。

滚动条问题

TODO

响应式设计

1.外部引入:

2. 内部引入: @media screen and (min-width:0px) and (max-width:400px){ //style样式 }

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>响应式布局</title>
    <style>
        /*基本样式*/
        body {
            margin: 0;
            padding: 0;
            background-color: #ddd;
        }
        .side {
            height: 300px;
            background-color: #4eb3b9;
        }
        .main {
            height: 300px;
            background-color: #ff0097;
        }
        /*device-width: >= 1000px*/
         @media screen and (min-width: 1000px) {
            .parent {
                width: 960px;
                margin: 0 auto;
            }
            .side {
                width: 300px;
                height: 300px;
                background-color: #4eb3b9;
                float: left;
            }
            .main {
                width: 650px;
                height: 300px;
                margin-left: 10px;
                background-color: #ff0097;
                float: left;
            }
         }
        /*device-width:400px-1000px*/
        @media screen and (min-width: 400px) and (max-width: 1000px) {
            .parent {
                display: flex;
            }
            .side {
                width: 300px;
            }
            .main {
                flex: 1;
                margin-left: 10px;
            }
        }
        /*device-width: <= 400px*/
        @media screen and (max-width: 400px) {
            .parent {
                display: flex;
                flex-flow: column wrap;
            }
            .side {
                flex: 1;
                margin-bottom: 10px;
            }
            .main {
                flex: 1;
            }
        }
    </style>
</head>
<body>
    <div class="parent">
        <div class="side"></div>
        <div class="main"></div>
    </div>
</body>
</html>

saas/scss和Less

Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,函数等),更容易阅读。

Sass的缩排语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此Sass语法进行了改良,Sass 3就变成了Scss(Sassy CSS)。SCSS(Sassy CSS)是CSS语法的扩展。这意味着每一个有效的CSS也是一个有效的SCSS语句,与原来的语法兼容,只是用{}取代了原来的缩进。

Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数. Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行 (借助 Node.js)。

主要差别:

  • Sass是在服务端处理的,而Less是需要引入less.js来处理Less代码输出CSS到浏览器,也可以在服务端处理。
  • 变量符不一样,Less是@,而Scss是$。
  • 输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。
  • Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持
  • scss可以采用@import引用的外部文件,如果不想编译时多生成同名的.css文件,命名必须以_开头, 文件名如果以下划线_开头的话,Sass会认为该文件是一个引用文件,不会将其编译为同名css文件。scss还可以用@use引入外部文件

Bootstrap

bootstrap为我们解决了什么?

bootstrap 类样式中的 mt mb ml mr mx my pt pb pl pr px py 含义

内边距(pading)外边距(margin)

m - for classes 代表 margin

p - for classes 代表 padding

t - for classes that set margin-top or padding-top 设置margin-top或padding-top

b - for classes that set margin-bottom or padding-bottom 设置margin-bottom或padding-bottom

l - for classes that set margin-left or padding-left 设置margin-left或padding-left

r - for classes that set margin-right or padding-right 设置margin-right或padding-right

x - for classes that set both -left and -right 设置padding-left和padding-right或margin-left和margin-right

y - for classes that set both -top and -bottom 设置padding-top和padding-bottom或margin-top和margin-bottom

空白 – 在元素的所有4个边上设置边距或填充

0 – 将边距或填充设置为0

1 – 将边距或填充设置为.25rem(如果font-size为16px则为4px)

2 – 将边距或填充设置为.5rem(如果字体大小为16px则为8px)

3 – 将边距或填充设置为1rem(如果字体大小为16px,则为16px)

4 – 将边距或填充设置为1.5rem(如果字体大小为16px,则为24px)

5 – 将边距或填充设置为3rem(如果font-size为16px则为48px)

mt-3 设置上边距3rem

Windi CSS

Windi CSS 是下一代工具优先的 CSS 框架。

CSS
.p-1 {
  padding: 0.25rem;
}
@media (min-width: 1024px) {
  .lg\:m-2 {
    margin: 0.5rem;
  }
  .lg\:p-2 {
    padding: 0.5rem;
  }
  .lg\:text-red-400 {
    --tw-text-opacity: 1;
    color: rgba(248, 113, 113, var(--tw-text-opacity));
  }
}

参考

  • mozilla开发者

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

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

相关文章

【Python表白代码】 2.14“Valentine‘s Day”“没别的意思 就是借着特殊日子说声喜欢你”你在哪儿?我去见你~(各种玫瑰源码合集)

导语 Valentines Day Every man is a poet when he is in love 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 哈喽&#xff01;我是你们的木木子吖~ 情人节又到了&#xff0c;礼物备好了没&am…

k8s部署Prometheus+Grafana

1.prometheus简介 Prometheus是一个开源的系统监控和警报工具包&#xff0c;最初由SoundCloud开发的&#xff0c;社区活跃&#xff0c;2016年加入了云原生计算基金会成为继Kubernetes之后的第二个托管项目&#xff1b;普罗米修斯以时间序列数据的形式收集并存储度量值&#xff…

python爬虫--xpath模块简介

一、前言 前两篇博客讲解了爬虫解析网页数据的两种常用方法&#xff0c;re正则表达解析和beautifulsoup标签解析&#xff0c;所以今天的博客将围绕另外一种数据解析方法&#xff0c;它就是xpath模块解析&#xff0c;话不多说&#xff0c;进入内容&#xff1a; 一、简介 XPat…

2023年谷歌蜘蛛池最全指南

本文主要是2023年关于谷歌蜘蛛池的一系列疑问&#xff0c;我们逐一提供解答。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 首先最常见的新手问题是“什么叫谷歌蜘蛛池&#xff1f;” 答案是&#xff1a;谷歌蜘蛛池是一个深度研究谷…

微服务网关(九)负载均衡底层详细

微服务网关&#xff08;九&#xff09;负载均衡 四大负载均衡策略 随机负载 随机挑选目标服务器IP 轮询负载 ABC三台服务器&#xff0c;以ABCABC的顺序依次轮询 加权轮询 给目标服务器设置访问权重值&#xff0c;按照权重轮询负载 一致性哈希轮询 固定的一个客户端IP请求访…

图文解答之最短路径||

最短路径|| 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为“Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

rust过程宏 proc-macro-workshop解题-0-介绍

名字版本号rust1.69.0OSubuntu22.04proc-macro-workshop是一个学习rust过程宏非常好的工程。里边包含五大类题目。并且每种题目都有实际价值,可以应用在企业级项目中。我们在这里先介绍一下这个项目如何运行如何测试,如何验证过程宏的正确性以及如何调试。 本文只围绕以下几个…

2月编程语言排行榜出炉,第一名势头强劲

近日&#xff0c;TIOBE公布了2023年2月编程语言排行榜&#xff0c;本月各个语言表现如何&#xff1f;谁又摘得桂冠&#xff1f; TIOBE 2月Top15编程语言&#xff1a; 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴们都知道&#xff0c;编程…

Linux入门篇(一)

Linux前言Linux初探Linux内核GNU实用工具shellLinux发行版bash shell 基础Linux文件系统Linux文件操作命令前言 在阅读诸如docker之类的书的时候&#xff0c;经常碰到Linux的知识。同时&#xff0c;大部分的盲区也是在Linux方面。因此就想稍微了解一下这个广为人使用的操作系统…

docker-入门到精通

docker知识总结 参考文档 https://jiajially.gitbooks.io/dockerguide/content/chapter_fastlearn/docker_run/–volumes-from.html 1、什么是docker ​ 容器技术、虚拟化技术已经成为一种被大家广泛认可的服务器资源共享方式&#xff0c;容器技术可以在按需构建操作系统实例…

vue3 Proxy响应式原理分析(面试题)

在开始正文前&#xff0c;先理一下vue2 Object.defineProperty 和 vue 3 Proxy 区别&#xff1a; Object.defineProperty&#xff1a;数据劫持 Proxy&#xff1a;数据代理 注意&#xff1a; 响应式原理和双向数据绑定原理是两回事&#xff0c;一般面试官会先问响应式原理再问双…

内网渗透(二十三)之Windows协议认证和密码抓取-Mimikatz介绍和各种模块使用方法

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

ShardingSphere-Proxy 数据库协议交互解读

数据库协议对于大部分开发者来说算是比较冷门的知识&#xff0c;一般的用户、开发者都是通过现成的数据库客户端、驱动使用数据库&#xff0c;不会直接操作数据库协议。不过&#xff0c;对数据库协议的特点与流程有一些基本的了解&#xff0c;有助于开发者在排查数据库功能、性…

Fabric磁盘扩容后数据迁移

线上环境原来的磁盘比较小&#xff0c;随着业务数据的增多&#xff0c;磁盘需要扩容&#xff0c;因此需要把原来docker数据转移至新的数据盘。 数据迁移 操作系统&#xff1a; centOS 7   docker默认的数据目录为/var/lib/docker   创建一个新的目录/opt/dockerdata&…

Halcon转OpenCV实例--OCR字符识别(附源码)

导 读 本文主要介绍Halcon转OpenCV实例--OCR字符识别(附源码)。 实例来源 实例来源于51Halcon论坛的帖子,原贴地址: https://www.51halcon.com/forum.php?mod=viewthread&tid=889 Halcon实现 测试图: 实现代码与效果: read_image (Image, ET.png)decompose3…

智慧园区解决方案

智慧园区解决方案 智慧园区是以互联网为载体&#xff0c;“互联网产业”融合产业模式为手段&#xff0c;面向园区提供全产业链支撑服务的解决方案。能够帮助园区在信息化方面建立统一的组织管理协调架构&#xff0c;业务管理平台和对内对外服务运营平台。将相关资源形成紧密联…

Java最新学习路线

Java语言是目前流行的互联网等企业的开发语言&#xff0c;是市面上很多程序员喜欢并且在用的程序设计语言。关于学习java&#xff0c;有一部分人是为了就业或自己创业&#xff0c;而大多数人是希望使用java这个开发语言用来工作&#xff0c;开发出计算机后端系统&#xff0c;利…

python带你采集回车桌面高清写真壁纸

前言 大家早好、午好、晚好吖 ❤ ~ 壁纸嘛~大家都在用&#xff0c;每个人喜欢的壁纸类型也不同 那今天来教大家怎么批量保存一批高质量壁纸~ 开发环境: Python 3.8 Pycharm 模块使用: requests >>> pip install requests 数据请求 parsel >>> pip instal…

soapui + groovy 接口自动化测试

1.操作excel的groovy脚本 package pubimport jxl.* import jxl.write.Label import jxl.write.WritableWorkbookclass ExcelOperation {def xlsFiledef workbookdef writableWorkbookdef ExcelOperation(){}//设置xlsFile文件路径def ExcelOperation(xlsFile){this.xlsFile x…

景联文科技:您的模型性能问题需要标注数据来解决

为什么需要重新考虑模型开发当人们想到人工智能时&#xff0c;他们的脑海中常常充满对未来世界幻想的画面&#xff0c;在这个世界中&#xff0c;算法为机器人提供动力&#xff0c;这些机器人负责处理他们的日常职责。他们的虚拟助手为他们提供建议并管理他们的日程安排&#xf…