MyBlog¶
CSS 的复合选择器
什么是复合选择器
在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。
- 复合选择器可以更准确、更高效的选择目标元素(标签)
- 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
- 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等
后代选择器(重要)
后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。
Bash | |
---|---|
上述语法表示选择元素 1 里面的所有元素 2
(后代元素)。
例如:
Bash | |
---|---|
- 元素1 和 元素2 中间用空格隔开
- 元素1 是父级,元素2 是子级,最终选择的是元素2
- 元素2 可以是儿子,也可以是孙子等,只要是元素1 的后代即可
- 元素1 和 元素2 可以是任意基础选择器
子选择器(重要)
子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。简单理解就是选亲儿子元素
.
语法:
Bash | |
---|---|
上述语法表示选择元素1 里面的所有直接后代(子元素) 元素2。
例如:
Bash | |
---|---|
- 元素1 和 元素2 中间用 大于号 隔开
- 元素1 是父级,元素2 是子级,最终选择的是元素2
- 元素2 必须是
亲儿子
,其孙子、重孙之类都不归他管. 你也可以叫他 亲儿子选择器
并集选择器 (重要)
并集选择器
是各选择器通过英文逗号(,)连接而成,任何形式的选择器都可以作为并集选择器的一部分。
例如:
Bash | |
---|---|
- 元素1 和 元素2 中间用逗号隔开
- 逗号可以理解为和的意思
- 并集选择器通常用于集体声明
伪类选择器
伪类选择器书写最大的特点是用冒号(:)表示,比如 :hover 、 :first-child 。
因为伪类选择器很多,比如有链接伪类、结构伪类等,所以这里先给大家讲解常用的链接伪类选择器。
链接伪类选择器
链接伪类选择器注意事项
- 为了确保生效,请按照 LVHA 的循顺序声明 :link-:visited-:hover-:active。
- 记忆法:love hate 或者 lv 包包 hao 。
- 因为 a 链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。
链接伪类选择器
链接伪类选择器实际工作开发中的写法:
HTML | |
---|---|
:focus 伪类选择器
:focus 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标,一般情况 类表单元素才能获取,因此这个选择器也主要针对于表单元素来说。
复合选择器总结
选择器 | 作用 | 特征 | 使用情况 | 隔开符号及用法 |
---|---|---|---|---|
后代选择器 | 用来选择后代元素 | 可以是子孙后代 | 较多 | 符号是空格.nav a |
子代选择器 | 选择最近一级元素 | 只能选亲儿子 | 较少 | 符号是大于 .nav >p |
并集选择器 | 选择某些相同样式的元素 | 可以用于集体申明 | 较多 | 符号是逗号 .nav,.header |
链接伪类选择器 | 选择不同状态的链接 | 选择不同状态的链接 | 较多 | 重点记住a{}和a:hover 实际开发的写法 |
:focus选择器 | 选择获得光标的表单 | 选择获得光标的表单 | 较少 | input:focus 记住这个写法 |
ftp上传下载文件
libcurl从ftp上获取文件列表信息,包含中文
C++ | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
|
CPP
具体调用函数为:
CPP
从ftp下载文件
ftpmanage.h
CPP
ftpmanage.cpp
C++ | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
|
css第03天
浮动
1、传统网页布局的三种方式
CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序):
-
普通流(标准流)
-
浮动
-
定位
这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。
注意:实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式) 。
2、标准流(普通流/文档流)
所谓的标准流: 就是标签按照规定好默认方式排列
- 块级元素会独占一行,从上向下顺序排列。常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
- 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em 等
以上都是标准流布局,我们前面学习的就是标准流,标准流是最基本的布局方式。
3、为什么需要浮动?
总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式.
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。
4、什么是浮动?
float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:
CSS | |
---|---|
5、浮动特性
加了浮动之后的元素,会具有很多特性,需要我们掌握的.
1、浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置)
2、浮动的元素会一行内显示并且元素顶部对齐
注意:
浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。
3、浮动的元素会具有行内块元素的特性
浮动元素的大小根据内容来决定
浮动的盒子中间是没有缝隙的
6、浮动元素经常和标准流父级搭配使用
为了约束浮动元素位置, 我们网页布局一般采取的策略是:
先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧
常见网页布局
浮动布局注意点
1、浮动和标准流的父盒子搭配。
先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置
2、一个元素浮动了,理论上其余的兄弟元素也要浮动。
一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动,以防止引起问题。
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.
案例1
案例2 小米手机页面
四、清除浮动
1、为什么需要清除浮动?
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。
2、清除浮动本质
清除浮动的本质是清除浮动元素造成的影响:浮动的子标签无法撑开父盒子的高度
注意:
- 如果父盒子本身有高度,则不需要清除浮动
- 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。
- 父级有了高度,就不会影响下面的标准流了
3、清除浮动样式
语法:
CSS | |
---|---|
我们实际工作中, 几乎只用 clear: both;
清除浮动的策略是: 闭合浮动.
4、清除浮动的多种方式
4.1、额外标签法
额外标签法也称为隔墙法,是 W3C 推荐的做法。
使用方式:
额外标签法会在浮动元素末尾添加一个空的标签。
HTML | |
---|---|
优点: 通俗易懂,书写方便
缺点: 添加许多无意义的标签,结构化较差
注意: 要求这个新的空标签必须是块级元素。
总结:
1、清除浮动本质是?
清除浮动的本质是清除浮动元素脱离标准流造成的影响
2、清除浮动策略是?
闭合浮动. 只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子.
3、额外标签法?
隔墙法, 就是在最后一个浮动的子元素后面添
4、加一个额外标签, 添加 清除浮动样式.
实际工作可能会遇到,但是不常用
4.2、父级添加 overflow 属性
可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。
例如:
CSS | |
---|---|
优点:代码简洁
缺点:无法显示溢出的部分
注意:是给父元素添加代码
4.3、父级添加after伪元素
:after 方式是额外标签法的升级版。给父元素添加:
CSS | |
---|---|
优点:没有增加标签,结构更简单
缺点:照顾低版本浏览器
代表网站: 百度、淘宝网、网易等
4.4、父级添加双伪元素
给父元素添加
CSS | |
---|---|
优点:代码更简洁
缺点:照顾低版本浏览器
代表网站:小米、腾讯等
总结
为什么需要清除浮动?
- 父级没高度。
- 子盒子浮动了。
- 影响下面布局了,我们就应该清除浮动了。
五、PS 切图
1、图层切图
HTML | |
---|---|
2、切片切图
2.1、利用切片选中图片
Text Only | |
---|---|
2.2、导出选中的图片
HTML | |
---|---|
3、PS插件切图
Cutterman 是一款运行在 Photoshop 中的插件,能够自动将你需要的图层进行输出,以替代传统的手工 "导出 web 所用格式" 以及使用切片工具进行挨个切图的繁琐流程。
官网:http://www.cutterman.cn/zh/cutterman
注意:Cutterman 插件要求你的 PS 必须是完整版,不能是绿色版,所以大家需要安装完整版本。
将子目录中的所有文件拷贝到子目录中并添加-
先遍历子目录中所有符合要求的文件
将目录和文件名获取后进行拆解
将信息写入json
Python | |
---|---|
完整的代码如下所示
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
|
VC获取时间
获取当前时间
Plain text
计算两个时间的时间差
Plain text
获取文件的修改时间
Nginx部署VUE项目到本地
下载nginx
下载链接:http://nginx.org/en/download.html
随便找一个,目前安装的是1.16.1
修改nginx配置
进入nginx的 conf/nginx.conf
修改Location的值,设为vue的路径
新建bat脚本,本地启动服务
江河批量装换测试江河批量装换测试
具体代码
Windows 编译libcurl,添加openssl和zlib支持
编译zlib
编译win32
使用CMake编译程序
选中zlibstatic项目,构建zlib的静态库。(win32 release)
在E:\Gitee\Tool\zlib-1.2.13\build\Release下生成了zlibstaticd.lib
文件,修改名为zlib.lib
。
将zlib.h
、zconf.h
文件复制到E:\Gitee\Tool\include
目录下
编译x64
E:\Gitee\Tool\include\zlib ├─x64 │ ├─include │ │ zconf.h │ │ zlib.h │ └─lib │ zlib.lib └─x86 ├─include │ zconf.h │ zlib.h └─lib zlib.lib
编译openssl
- perl下载地址
- 下载strawberry perl,可以选择ZIP edition版,解压即可用,免安装。
- 下载5.16.3,这版本有完整的信息,不需要从网上再下,国内下载太慢了
- 下载openssl源码
- 一份给x86用,一份给x64用,两份代码目录不同,不然编译的时候会冲突
编译步骤:
CPP
打开x86 Native Tools Command Prompt for VS 2017
工具,切换到openssl源码目录
perl Configure VC-WIN64A --release no-asm no-shared --prefix="E:\Gitee\Tool\include\openssl\x86"
- nmake
- nmake install
- 新建安装目录
E:\Gitee\Tool\include\openssl\x86
。
打开x64 Native Tools Command Prompt for VS 2017
工具,切换到openssl源码目录
- 新建安装目录
E:\Gitee\Tool\include\openssl\x64
。 perl Configure VC-WIN64A --release no-asm no-shared --prefix="E:\Gitee\Tool\include\openssl\x64"
- nmake
- nmake install
- 与X86操作类似,不再演示
编译libcurl
编译32位
打开x86 Native Tools Command Prompt for VS 2017
工具,切换到E:\Gitee\Tool\curl\winbuild
目录。
问题
Text Only | |
---|---|
回退到目录:E:\Gitee\Tool\curl
,运行buildconf.bat
Text Only | |
---|---|
选项说明:
mode=<static/dll>
:编译静态/动态库VC=<10/11/12/14/15/16>
:VisualStudio版本MACHINE=<x86/x64>
:生成32/64位库DEBUG=<yes/no>
:生成debug/release版本WITH_SSL=<static/dll>
:openssl的库类型WITH_ZLIB=<static/dll>
:zlib的库类型WITH_PREFIX=<path>
:编译结果输出路径。必须以反斜杠\结尾SSL_PATH=<path>
:openssl路径ZLIB_PATH=<path>
:zlib路径
VC版本 | _MSC_VER宏的值 | VS版本 | MSVC toolset version |
---|---|---|---|
VC6.0 | 1200 | VS 6.0 | |
VC7.0 | 1300 | VS2002 | |
VC7.1 | 1310 | VS2003 | |
VC8.0 | 1400 | VS2005 | 80 |
VC9.0 | 1500 | VS2008 | 90 |
VC10.0 | 1600 | VS2010 | 100 |
VC11.0 | 1700 | VS2012 | 110 |
VC12.0 | 1800 | VS2013 | 120 |
VC14.0 | 1900 | VS2015 | 140 |
VC15.0 | [ 1910 , 1916 ] | VS2017 | 141 |
VC16.0 | [ 1920 , 1929 ] [][1920,1929] | VS2019 | 142 |
VC17.0 | [1930,) | VS2022 | 143 |
编译64
打开x64 Native Tools Command Prompt for VS 2017
工具,切换到E:\Gitee\Tool\curl\winbuild
目录。
问题
Text Only | |
---|---|
回退到目录:E:\Gitee\Tool\curl
Text Only | |
---|---|
合并多个库
代码中使用libcurl库,编译的时候,需要同时链接libcurl.lib
,zlib.lib
,libssl.lib
,libcrypto.lib
4个库。
可以将这4个库文件合并为1个libcurl.lib
。
编译32位
新建文件夹E:\Gitee\Tool\include\curl\x86\lib_merge
。
打开x86 Native Tools Command Prompt for VS 2017工具,切换到E:\Gitee\Tool\include\curl\x86\lib_merge
目录。
Text Only | |
---|---|
编译64位
新建文件夹E:\Gitee\Tool\include\curl\x64\lib_merge
。
打开x64 Native Tools Command Prompt for VS 2017
工具,切换到E:\Gitee\Tool\include\curl\x64\lib_merge
目录。
Text Only | |
---|---|
测试代码
添加如下lib
- ws2_32.lib
- wldap32.lib
- crypt32.lib
- Normaliz.lib
- –
- libcurl.lib (如果已经合并,就不需要下面3个了)
- libcrypto.lib
- libssl.lib
- zlib.lib 编译运行程序,输出百度首页的html说明测试通过。 ———————————————— 版权声明:本文为CSDN博主「Leopard-C」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_41701847/article/details/131300414
问题
问题一
- 通过在测试程序的“CPP ---> 预处理”中增加 BUILDING_LIBCURL(或者CURL_STATICLIB),问题得以解决。
问题二
需要添加Ws2_32.lib和Wldap32.lib。
问题3
Text Only | |
---|---|
需要添加Normaliz.lib
问题4
Text Only | |
---|---|
在 项目属性 - 链接器 - 输入 - 附加依赖项 中加入: Crypt32.lib
How to Build OpenSSL, zlib, and cURL libraries on Windowshttps://developers.refinitiv.com/en/article-catalog/article/how-to-build-openssl--zlib--and-curl-libraries-on-windows)