css style、css color 转 UIColor

        你能看过来,就说明这个问题很好玩!IT开发是一个兴趣,更是一个挑战!兴趣使你工作有热情。挑战使让你工作充满刺激拉满的状态!我们日复一日年复一年的去撸代码,那些普普通通的功能代码,已经厌倦了!要的就是这种充满挑战最终攻克而带来快感!这种快感比那种快感让人感觉更得劲。。错了,可能是我老了吧~

        因为业务开发需求,同样的功能三端(WEB、安卓 、iOS),而web端将数据封装成H5对应的标签方式,需要APP端来解析,将其文本提取出来倒没有什么技术难度,但核心问题是要取出相应的样式表渲染成正确的UI,这才是最困难的!

 如<b><span style="color:orange,font-size:15px;">重要告警</span></b>

 要把它显示成如下的原生页面,怎么办呢?来分析一下这些标签的作用:

<b></b>意思是将里面的文本加粗显示

<span>标签普通的文本显示,但是文本的更多属性是在span的内联样式表中存放,我们要取出来颜色,字体大小来渲染为iOS的UILabel,通过setColor,setTextFont等API设置其显示样式! 

我得到的原始数据为:


<b><a style="color:orange">【重要告警】</a></b>
<b>事件名称:</b>CCE-CPU监控;
<b>发生时间:</b>2023-11-08 09:48:00 GMT+08:00;
<b>事件源:</b>AOM;
<b>资源类型:</b>Application;
<b>指标名称:</b>aom_container_cpu_usage;
<b>最新指标值:  </b>45.95425;
<b>命名空间:</b>third-party;
<b>容器名称:</b>z-canal-test;
<b>告警信息:</b><br />阈值规则 CCE-CPU监控 状态从 “超限阈值” 变为 “正常” 。状态变化详细信息:指标名称为“aom_container_cpu_usage”,最新指标数据取值“45.954”,不满足阈值条件“>90”。;
<b>修复建议:</b>建议进入容器  z-canal-test查看资源使用情况;

最终实现的显示效果为:

 

下面业结合开源的三方库来实现此功能的显示,第三方库:TFHpple 


#if __has_include("TFHpple.h")
#import "TFHpple.h"
#endif
 
@interface CSSStyleMap : NSObject
+ (NSDictionary *)cssColorMap;
 
#if __has_include("TFHpple.h")
+ (UIColor *)colorFromCssText:(NSString *)ctext;
+ (NSMutableArray <NSMutableDictionary *>*)stylesFromElement:(TFHppleElement *)e;
#endif
@end

@implementation CSSStyleMap
//将CSS定义的颜色转为十六进制颜色
+ (NSDictionary *)cssColorMap
{
    NSString *k = @"{\
        \"CLEAR\": \"#00000000\",\
        \"TRANSPARENT\": \"#00000000\",\
        \"\": \"#00000000\",\
        \"ALICEBLUE\": \"#F0F8FF\",\
        \"ANTIQUEWHITE\": \"#FAEBD7\",\
        \"AQUA\": \"#00FFFF\",\
        \"AQUAMARINE\": \"#7FFFD4\",\
        \"AZURE\": \"#F0FFFF\",\
        \"BEIGE\": \"#F5F5DC\",\
        \"BISQUE\": \"#FFE4C4\",\
        \"BLACK\": \"#000000\",\
        \"BLANCHEDALMOND\": \"#FFEBCD\",\
        \"BLUE\": \"#0000FF\",\
        \"BLUEVIOLET\": \"#8A2BE2\",\
        \"BROWN\": \"#A52A2A\",\
        \"BURLYWOOD\": \"#DEB887\",\
        \"CADETBLUE\": \"#5F9EA0\",\
        \"CHARTREUSE\": \"#7FFF00\",\
        \"CHOCOLATE\": \"#D2691E\",\
        \"CORAL\": \"#FF7F50\",\
        \"CORNFLOWERBLUE\": \"#6495ED\",\
        \"CORNSILK\": \"#FFF8DC\",\
        \"CRIMSON\": \"#DC143C\",\
        \"CYAN\": \"#00FFFF\",\
        \"DARKBLUE\": \"#00008B\",\
        \"DARKCYAN\": \"#008B8B\",\
        \"DARKGOLDENROD\": \"#B8860B\",\
        \"DARKGRAY\": \"#A9A9A9\",\
        \"DARKGREY\": \"#A9A9A9\",\
        \"DARKGREEN\": \"#006400\",\
        \"DARKKHAKI\": \"#BDB76B\",\
        \"DARKMAGENTA\": \"#8B008B\",\
        \"DARKOLIVEGREEN\": \"#556B2F\",\
        \"DARKORANGE\": \"#FF8C00\",\
        \"DARKORCHID\": \"#9932CC\",\
        \"DARKRED\": \"#8B0000\",\
        \"DARKSALMON\": \"#E9967A\",\
        \"DARKSEAGREEN\": \"#8FBC8F\",\
        \"DARKSLATEBLUE\": \"#483D8B\",\
        \"DARKSLATEGRAY\": \"#2F4F4F\",\
        \"DARKSLATEGREY\": \"#2F4F4F\",\
        \"DARKTURQUOISE\": \"#00CED1\",\
        \"DARKVIOLET\": \"#9400D3\",\
        \"DEEPPINK\": \"#FF1493\",\
        \"DEEPSKYBLUE\": \"#00BFFF\",\
        \"DIMGRAY\": \"#696969\",\
        \"DIMGREY\": \"#696969\",\
        \"DODGERBLUE\": \"#1E90FF\",\
        \"FIREBRICK\": \"#B22222\",\
        \"FLORALWHITE\": \"#FFFAF0\",\
        \"FORESTGREEN\": \"#228B22\",\
        \"FUCHSIA\": \"#FF00FF\",\
        \"GAINSBORO\": \"#DCDCDC\",\
        \"GHOSTWHITE\": \"#F8F8FF\",\
        \"GOLD\": \"#FFD700\",\
        \"GOLDENROD\": \"#DAA520\",\
        \"GRAY\": \"#808080\",\
        \"GREY\": \"#808080\",\
        \"GREEN\": \"#008000\",\
        \"GREENYELLOW\": \"#ADFF2F\",\
        \"HONEYDEW\": \"#F0FFF0\",\
        \"HOTPINK\": \"#FF69B4\",\
        \"INDIANRED\": \"#CD5C5C\",\
        \"INDIGO\": \"#4B0082\",\
        \"IVORY\": \"#FFFFF0\",\
        \"KHAKI\": \"#F0E68C\",\
        \"LAVENDER\": \"#E6E6FA\",\
        \"LAVENDERBLUSH\": \"#FFF0F5\",\
        \"LAWNGREEN\": \"#7CFC00\",\
        \"LEMONCHIFFON\": \"#FFFACD\",\
        \"LIGHTBLUE\": \"#ADD8E6\",\
        \"LIGHTCORAL\": \"#F08080\",\
        \"LIGHTCYAN\": \"#E0FFFF\",\
        \"LIGHTGOLDENRODYELLOW\": \"#FAFAD2\",\
        \"LIGHTGRAY\": \"#D3D3D3\",\
        \"LIGHTGREY\": \"#D3D3D3\",\
        \"LIGHTGREEN\": \"#90EE90\",\
        \"LIGHTPINK\": \"#FFB6C1\",\
        \"LIGHTSALMON\": \"#FFA07A\",\
        \"LIGHTSEAGREEN\": \"#20B2AA\",\
        \"LIGHTSKYBLUE\": \"#87CEFA\",\
        \"LIGHTSLATEGRAY\": \"#778899\",\
        \"LIGHTSLATEGREY\": \"#778899\",\
        \"LIGHTSTEELBLUE\": \"#B0C4DE\",\
        \"LIGHTYELLOW\": \"#FFFFE0\",\
        \"LIME\": \"#00FF00\",\
        \"LIMEGREEN\": \"#32CD32\",\
        \"LINEN\": \"#FAF0E6\",\
        \"MAGENTA\": \"#FF00FF\",\
        \"MAROON\": \"#800000\",\
        \"MEDIUMAQUAMARINE\": \"#66CDAA\",\
        \"MEDIUMBLUE\": \"#0000CD\",\
        \"MEDIUMORCHID\": \"#BA55D3\",\
        \"MEDIUMPURPLE\": \"#9370DB\",\
        \"MEDIUMSEAGREEN\": \"#3CB371\",\
        \"MEDIUMSLATEBLUE\": \"#7B68EE\",\
        \"MEDIUMSPRINGGREEN\": \"#00FA9A\",\
        \"MEDIUMTURQUOISE\": \"#48D1CC\",\
        \"MEDIUMVIOLETRED\": \"#C71585\",\
        \"MIDNIGHTBLUE\": \"#191970\",\
        \"MINTCREAM\": \"#F5FFFA\",\
        \"MISTYROSE\": \"#FFE4E1\",\
        \"MOCCASIN\": \"#FFE4B5\",\
        \"NAVAJOWHITE\": \"#FFDEAD\",\
        \"NAVY\": \"#000080\",\
        \"OLDLACE\": \"#FDF5E6\",\
        \"OLIVE\": \"#808000\",\
        \"OLIVEDRAB\": \"#6B8E23\",\
        \"ORANGE\": \"#FFA500\",\
        \"ORANGERED\": \"#FF4500\",\
        \"ORCHID\": \"#DA70D6\",\
        \"PALEGOLDENROD\": \"#EEE8AA\",\
        \"PALEGREEN\": \"#98FB98\",\
        \"PALETURQUOISE\": \"#AFEEEE\",\
        \"PALEVIOLETRED\": \"#DB7093\",\
        \"PAPAYAWHIP\": \"#FFEFD5\",\
        \"PEACHPUFF\": \"#FFDAB9\",\
        \"PERU\": \"#CD853F\",\
        \"PINK\": \"#FFC0CB\",\
        \"PLUM\": \"#DDA0DD\",\
        \"POWDERBLUE\": \"#B0E0E6\",\
        \"PURPLE\": \"#800080\",\
        \"RED\": \"#FF0000\",\
        \"ROSYBROWN\": \"#BC8F8F\",\
        \"ROYALBLUE\": \"#4169E1\",\
        \"SADDLEBROWN\": \"#8B4513\",\
        \"SALMON\": \"#FA8072\",\
        \"SANDYBROWN\": \"#F4A460\",\
        \"SEAGREEN\": \"#2E8B57\",\
        \"SEASHELL\": \"#FFF5EE\",\
        \"SIENNA\": \"#A0522D\",\
        \"SILVER\": \"#C0C0C0\",\
        \"SKYBLUE\": \"#87CEEB\",\
        \"SLATEBLUE\": \"#6A5ACD\",\
        \"SLATEGRAY\": \"#708090\",\
        \"SLATEGREY\": \"#708090\",\
        \"SNOW\": \"#FFFAFA\",\
        \"SPRINGGREEN\": \"#00FF7F\",\
        \"STEELBLUE\": \"#4682B4\",\
        \"TAN\": \"#D2B48C\",\
        \"TEAL\": \"#008080\",\
        \"THISTLE\": \"#D8BFD8\",\
        \"TOMATO\": \"#FF6347\",\
        \"TURQUOISE\": \"#40E0D0\",\
        \"VIOLET\": \"#EE82EE\",\
        \"WHEAT\": \"#F5DEB3\",\
        \"WHITE\": \"#FFFFFF\",\
        \"WHITESMOKE\": \"#F5F5F5\",\
        \"YELLOW\": \"#FFFF00\",\
        \"YELLOWGREEN\": \"#9ACD32\"\
    }";
    
    NSDictionary *map = [JsonKit jsonObject:k];
    return map;
}
 
#if __has_include("TFHpple.h")
+ (UIColor *)colorFromCssText:(NSString *)val
{
    NSString *cl = [[CSSStyleMap cssColorMap] stringForKey:val];
    UIColor *color = nil;
    if (cl.length > 0)
    {
        color = [UIColor colorFromHex:cl];
    }
    else
    {
        val = [val stringByReplacingOccurrencesOfString:@"rgba(" withString:@""];
        val = [val stringByReplacingOccurrencesOfString:@"rgb(" withString:@""];
        val = [val stringByReplacingOccurrencesOfString:@")" withString:@""];
        
        NSArray *zlist = [val componentsSeparatedByString:@","];
        if (zlist.count >= 3)
        {
            color = [UIColor colorWithRed:[zlist[0] doubleValue]/255.0 green:[zlist[1] doubleValue]/255.0 blue:[zlist[2] doubleValue]/255.0 alpha:zlist.count>3?[zlist[3] doubleValue]:1];
        }
    }
    
    return color;
}
 
 
+ (NSMutableArray <NSMutableDictionary *>*)stylesFromElement:(TFHppleElement *)e
{
    NSString *b = [e content];
    NSArray <TFHppleElement *> *child = [e children];
    NSMutableArray *attributesList = [NSMutableArray arrayWithCapacity:0];
    
    [child enumerateObjectsUsingBlock:^(TFHppleElement * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if (![obj isTextNode])
        {
            /*企管只关注CSS样式中的color,backgroudColor,fontSize这三个属性,其余根据后期要求再解析展示
            CSS对于样式的定义为:color:orange,font-size:16px,background-color:xxx
             */
            NSDictionary *attrMap = [obj attributes];
            [attrMap enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop)
            {
                if (obj && [obj isKindOfClass:[NSString class]])
                {
                    NSArray *plist = [obj componentsSeparatedByString:@","];
                    [plist enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)
                    {
                        NSArray *xlist = [obj componentsSeparatedByString:@":"];
                        if ([xlist.firstObject isEqualToString:@"color"])
                        {
                            NSString *val = [[xlist lastObject] uppercaseString];
                            UIColor *color = [CSSStyleMap colorFromCssText:val];
                            if (color)
                            {
                                [attributesList addObject:@{@"fontColor":color,@"range":[NSValue valueWithRange:NSMakeRange(0, b.length)]}];
                            }
                        }
                        else if ([xlist.firstObject isEqualToString:@"background-color"])
                        {
                            NSString *val = [[xlist lastObject] uppercaseString];
                            UIColor *color = [CSSStyleMap colorFromCssText:val];
                            if (color)
                            {
                                [attributesList addObject:@{@"backgroundColor":color,@"range":[NSValue valueWithRange:NSMakeRange(0, b.length)]}];
                            }
                        }
                        else if ([xlist.firstObject isEqualToString:@"font-size"])
                        {
                            NSInteger val = [[xlist lastObject] integerValue];
                            [attributesList addObject:@{@"fontSize":intToStr(val),@"range":[NSValue valueWithRange:NSMakeRange(0, b.length)]}];
                        }
                    }];
                }
                
            }];
        }
    }];
    
    return attributesList;
}
#endif
@end

 页面使用:

NSData *tdata = [cnt dataUsingEncoding:NSUTF8StringEncoding];
TFHpple *doc = [[TFHpple alloc] initWithHTMLData:tdata];
TFHppleElement *e = [[doc searchWithXPathQuery:@"//b"] firstObject];
 
//包含解析出来的样式数据列表
NSMutableArray <NSMutableDictionary *>*styleList = [CSSStyleMap stylesFromElement:e];

 


//加粗
NSMutableArray <NSValue *>*btagList = [rMap arrayForKey:@"bTag"];
//a标签,跳转
NSMutableArray <NSDictionary *>*atagList = [rMap arrayForKey:@"aTag"];
//CSS样式
NSMutableArray <NSDictionary *>*styleList = [rMap arrayForKey:@"style"];
 
//textView是定义的UITextView的实例对象
 
NSMutableAttributedString *mtext = [[NSMutableAttributedString alloc] initWithAttributedString:textView.attributedText];
NSString *textStr = mtext.string;
//        NSArray *ranges = [self mutableRangeOfString:@"®[^\\s]+" targetString:textStr];
 
 
[btagList enumerateObjectsUsingBlock:^(NSValue *a, NSUInteger idx, BOOL * _Nonnull stop)
{
    [mtext addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:imTextFont(16)] range:a.rangeValue];
}];
 
[atagList enumerateObjectsUsingBlock:^(NSDictionary * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)
{
    NSRange range = [(NSValue *)[obj objectForKey:@"range"] rangeValue];
    [mtext addAttribute:NSForegroundColorAttributeName value:[UIColor colorFromHex:@"#0000ee"] range:range];
    
    [mtext addAttribute:NSLinkTag value:[obj stringForKey:@"href"] range:range];
}];
 
[styleList enumerateObjectsUsingBlock:^(NSDictionary * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)
{
    UIColor *fcolor = [obj objectForKey:@"fontColor"];
    NSRange range = [(NSValue *)[obj objectForKey:@"range"] rangeValue];
    [mtext addAttribute:NSForegroundColorAttributeName value:fcolor range:range];
}];
 
[textView setAttributedText:mtext];

 

这个示例只是展示其中一部分逻辑,你可以进行二次开发,扩展其功能,支持更多的属性的展示!

对了,肯定会有人说使用Webview直接加载就行了嘛,兄弟,我使用的场景是会话页面,你使用webview加载,就会存在性能体验问题!如果你全页面只有一个这样的消息,当然首选就是Webview,而我的页面如下,就不得不考虑用户体验!

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

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

相关文章

2023_11_6 每日半小时 SQL 刷题

文章目录 1. 查询所有列题目描述SQL 语句编写 2. 查询多列题目描述SQL 语句编写 3. 查询结果去重题目描述SQL 语句编写 4. 查询结果限制返回行数题目描述SQL 语句编写 5. 将查询后的列重新命名题目描述SQL 语句编写 语法小总结 1. 查询所有列 题目链接&#xff1a;SQL1 查询所…

SpringCloud——服务注册——Eureka

1.Eureka概述 2.Eureka架构&#xff1a; Eureka中80服务要实现对8001和8002服务访问的负载均衡&#xff0c;需要在80服务的RestTemplate上面加LoadBalanced注解&#xff0c;默认采用的是轮询的策略。 3.Eureka自我保护 当一个EurekaClient注册进EurekaServer&#xff0c;Eurek…

每日一题 2258. 逃离火灾(手撕困难!!!)

火会扩散&#xff0c;但是我们可以看作火不会扩散到已经着火的格子&#xff0c;这样我们就可以记录每一个为草地的格子的着火时间在代码中&#xff0c;因为数字 2 已经表示墙了&#xff0c;所以我们把当时间为 0 时着火的格子在 gird 中的值设为 3&#xff0c;时间为 1 时着火的…

2023年开发语言和数据库排行

2023年开发语言和数据库排行 一、开发语言相关1. Python1.1 Python优点1.2 Python缺点1.3 Python应用领域 2. C 语言2.1 C 语言优点2.2 C 语言缺点2.3 C语言应用领域 3. Java3.1 Java 优点3.2 Java缺点3.3 Java应用场景 4. C4.1 C 优点4.2 C 缺点4.3 C 应用场景 5. C#5.1 C# 优…

(附源码)基于Springboot智慧园区管理系统-计算机毕设 88160

Springboot智慧园区管理系统的开发 摘要 随着互联网趋势的到来&#xff0c;互联网概念越来越盛行&#xff0c;园区管理最好方式就是建立自己的互联网系统。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Springboot框架建设智慧园区管理系统。 本设计主…

C语言 做一个学生信息管理系统

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct person {char name[30];char sex[10];int num;struct person *next; }stu; stu *head NULL; void printf_link(stu *head) {stu *pd head;while(pd ! NULL){printf("姓名&a…

深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图&#xff0c;有很多训练形成了一个训练log文件&#xff0c;于是需要读取log文件中的内容并绘制成曲线图。 如下实例&#xff0c;有一个log文件的部分截图&#xff0c;需要将其读取出来并绘制曲线图 废话不多说&…

物联网AI MicroPython学习之语法 ucollections集合和容器类型

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; ucollections 介绍 ucollections 模块用于创建一个新的容器类型&#xff0c;用于保存各种对象。 接口说明 namedtuple - 创建一个新namedtuple容器类型 函数原型&#xff1a; 创建一个具有特定名称和一组…

QT QStackedWidget

QStackedWidget是一个特殊的布局容器&#xff0c;它可以管理多个页面&#xff0c;并且只能显示其中一个页面。这些页面是QWidget或其派生类的实例&#xff0c;并通过调用addWidget()函数添加到堆栈中。 例如&#xff1a; #include <QWidgets> #include <QStackedWid…

一文掌握 Apache SkyWalking

Apache SkyWalking SkyWalking是一个开源可观测平台&#xff0c;用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图&#xff0c;甚至跨云。它是一种现代APM&#xff0c;专为云原生、基于容器的分布式系…

绿联DX4600 AList部署及挂载阿里云盘

写在前面 ​ 因为云盘总是封禁已经转存的文件&#xff08;珍惜影片&#xff09;&#xff0c;实在受不了了&#xff0c;就像购买个NAS构建私人云存储&#xff0c;正好趁着双11购入了绿联的DX4600&#xff0c;本来想购入群晖或者威联通等专业NAS&#xff0c;因为不想折腾&#x…

SQL Server SSIS ETL job执行相关操作

创建SSIS项目 Excel导入SQL Server 构建Excel源 配置Excel源信息 配置SQL Server目标 双击“ADO NET目标” job执行 新建job 右键“SQL Server代理”的“作业”&#xff0c;点击“新建作业”&#xff0c;弹出“新建作业”的选项页 首先是“常规”选项页&#xff0c;…

RRC configured BWP

TS 38.822有UE BWP 相关能力 IE的详细介绍,如下图。 举例说明,对于UE上报bwp-SameNumerology=upto2时,根据上图中的描述,UE支持能力情况如下:每个carrier最多支持2 个UE specific RRC configured DL/UL BWPs;可以通过DCI和BWP-InactivityTimer主动切换BWP;每个carrier的…

聚焦谋发展,筑梦新征程——云起无垠乔迁新址

2021年7月&#xff0c;网络安全新锐企业北京云起无垠科技有限公司&#xff08;以下简称&#xff1a;云起无垠&#xff09;注册成立。云起无垠致力于研究漏洞挖掘尖端技术和打造卓越漏挖工具&#xff0c;并在业界迅速崭露头角&#xff0c;受到了广泛瞩目。 发展至今&#xff0c…

CSS中calc(80vw - 100px)为什么不加空格会不生效?

问题起因 今天再使用calc时发现无法生效&#xff0c;我的写法是&#xff1a; width: calc(100%-100px);页面无效果&#xff0c;加空格后就发现有效果了&#xff1a; width: calc(100% - 100px);有亿点疑惑&#xff0c;这是为什么&#xff1f; calc是什么&#xff1f; css3的…

Java用Jsoup库实现的多线程爬虫代码

因为没有提供具体的Python多线程跑数据的内容&#xff0c;所以我们将假设你想要爬取的网站是一个简单的URL。以下是一个基本的Java爬虫程序&#xff0c;使用了Jsoup库来解析HTML和爬虫ip信息。 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nod…

[python 刷题] 437 Path Sum III

[python 刷题] 437 Path Sum III 之前有写过 Path Sum I & II, leetcode 112 & 113&#xff0c;虽然使用 JS 写的&#xff0c;不过 python 的实现也更新了一下 题目如下&#xff1a; Given the root of a binary tree and an integer targetSum, return the number o…

1-前端基本知识-CSS

1-前端基本知识-CSS 文章目录 1-前端基本知识-CSS总体概述什么是CSS&#xff1f;CSS引入方式行内式内嵌式连接式/外部样式表 CSS选择器元素选择器id选择器class选择器&#xff08;使用较广&#xff09; CSS浮动CSS定位静态定位&#xff1a;static绝对定位&#xff1a;absolute相…

【Linux】:文件系统

文件系统 一.认识硬件-磁盘1.磁盘的物理构成2.磁盘的存储构成3.逻辑结构 二.文件系统1.基本概念2.硬链接2.软链接 文件内容属性&#xff0c;前面我们所说的文件操作都是针对以打开的文件&#xff0c;那么未打开的文件呢&#xff1f;当然是在磁盘上储存着&#xff0c;接下来谈谈…

管理驾驶舱这么做,领导都点赞(附方案下载)

你是否知道你的企业是否充分利用了可用的数据资源&#xff1f; 著名的著名的质量管理专家&#xff0c;威廉爱德华德莱克&#xff08;William Edwards Deming&#xff09;曾说过&#xff1a;"数据不是权力&#xff0c;能够理解数据的能力才是真正的权力。" 企业在经营…