首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,329 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
10,944 阅读
3
gradle-5.4.1-all.zip下载
8,841 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
7,830 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,870 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
624
篇文章
累计收到
615
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
449
篇与
的结果
2020-02-26
python爬虫之selenium记录
Chrome浏览器驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/基础代码:browser = webdriver.Firefox() //选择浏览器 browser.find_element_by_id().send_keys() //寻找控件通过ID,且发送值selenium browser.find_element_by_id().click() //搜索的按钮的id 叫su ,且点击 browser.quit() //退出并关闭窗口的每一个相关的驱动程序 browser.close() //关闭窗口 browser.implicitly_wait(10) //隐式等待无窗口模式:#selenium:3.12.0 #webdriver:2.38 #chrome.exe: 65.0.3325.181(正式版本) (32 位) from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--no-sandbox')#解决DevToolsActivePort文件不存在的报错 chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率 chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面 chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度 chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败 chrome_options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe" #手动指定使用的浏览器位置 driver=webdriver.Chrome(chrome_options=chrome_options) driver.get('https://www.baidu.com') print('hao123' in driver.page_source) driver.close() #切记关闭浏览器,回收资源键盘操作:selenium.webdriver.common.keys Keys browser = webdriver.Chrome() browser.get() browser.find_element_by_id().send_keys() browser.find_element_by_id().send_keys(Keys.SPACE) browser.find_element_by_id().send_keys(Keys.CONTROL) browser.find_element_by_id().send_keys(Keys.CONTROL) browser.find_element_by_id().send_keys(Keys.CONTROL) browser.find_element_by_id().send_keys(Keys.ENTER)鼠标操作:selenium.webdriver ActionChains driver = webdriver.Chrome() driver.get() driver.find_element_by_id().send_keys() driver.find_element_by_id().click() element = driver.find_element_by_name() ActionChains(driver).move_to_element(element).perform() driver.find_element_by_link_text().click()截屏定位location = img.location (location) size = img.size left = location[] = location[] = left + size[]保存cookie,以及调用cookie保存cookies cookies = driver.get_cookies()with open("cookies.txt", "w") as fp: json.dump(cookies, fp) selenium读取cookies def read_cookies(): # 设置cookies前必须访问一次百度的页面 driver.get("http://www.baidu.com") with open("cookies.txt", "r") as fp: cookies = json.load(fp) for cookie in cookies: # cookie.pop('domain') # 如果报domain无效的错误 driver.add_cookie(cookie) cookies_dict = dict() with open('cookies.txt','r')as f: cookies = json.load(f) for cookie in cookies: cookies_dict[cookie['name']] = cookie['value']
2020年02月26日
628 阅读
0 评论
0 点赞
2020-02-25
免费申请office365 A1 和 a1p 带OneDrive 5T 网盘
打开临时邮箱网址:http://msoffice.tv 方便以后实时更新遂采取此方式,注意支持自定义前缀!点击申请邮箱,可以手动输入自己想要的邮箱前缀,注意账号只有十分钟,请在十分钟之内操作完毕。打开网址:https://products.office.com/en-us/student?tab=students ,填入刚才的临时邮箱,点击GetStartd。A1账号申请地址3产品:5T网盘+网页版Office 365是否支持RaiDrive:是是否免费对外开放申请:是临时邮箱:https://t.odmail.cn申请地址:https://signup.microsoft.com/signup?sku=student A1账号申请地址4产品:5T网盘+网页版Office 365是否支持RaiDrive:是是否免费对外开放申请:是临时邮箱:http://xkx.me申请地址:https://www.microsoft.com/en-us/education/products/office?tab=studentsA1账号申请地址5产品:5T网盘+网页版Office 365是否支持RaiDrive:是是否免费对外开放申请:是临时邮箱:http://xix.men:3000/申请地址:https://signup.microsoft.com/signup?sku=educationA1 Plus账号申请地址1产品:5T网盘+桌面版Office 365是否支持RaiDrive:是是否免费对外开放申请:否说明:由于是不对外免费开放申请的,因此使用的人较少,不容易被封号,账号也不贵,几十块钱一个)或者了解更多关于office 版本之间的差异以及office 365的安装和OneDrive的使用方法,请查看:https://coco56.gitee.io/news/office365.htmlA1 Plus账号申请地址2产品:1G网盘+桌面版Office 365是否支持RaiDrive:否是否免费对外开放申请:是Office2019与Office365专业增强版之间的区别:Office2019是一次性购买,不会在购买后接收功能更新,但会根据需要接收质量和安全修补程序更新;而Office365专业增强版是由Microsoft云支持的基于用户的订阅服务,它提供Office2019所不能及的对一系列服务的访问,并且在一贯基础上接收功能更新,它包括最高效,最安全和最新功能,简而言之,Office365专业增强版包含Office2019版所有功能,并且可随时保持更新。今天给大家带来Office365 A1 Plus账号注册方法,好处是不用破解客户端,登录注册的账号就会显示Office365专业增强版,此次福利随时失效,填写邮箱时候,不想使用您的真实邮箱?那就打开网址输入 http://24mail.chacuo.net/ 使用临时邮箱,邮箱持续24小时,比十分钟邮箱(10分钟)保持时间更长,可以任意设置邮箱名,随时更换邮箱。打开网站后出现随机邮箱,也可自行设置邮箱前缀,设置好后点""设置邮箱"按钮即可。打开网址https://products.office.com/en-us/student?tab=students, 在"Enter your school email address"即输入您的学校电子邮件地址栏里输入临时邮箱前缀+@stu.mao.office.gy打开新页面后,随意选择:我是一个学生( student)或者我是一名老师(teacher),接着会弹出注册界面,简单注册一下,验证码需要返回临时邮箱获取验证码,也可以重新打开开始注册临时邮箱的网址就会看到验证码了==>点开始可以设置密保手机和密保邮箱。注册完之后显示a1的授权打开网址https://account.activedirectory.windowsazure.com/r/#/groups输入账号(前缀+@stu.mao.office.gy),登录Microsoft设置自己的身份验证电子邮件,此时进入帐号可查看版本为365A1,想要成为Plus,必须加入Nruan组才可以点击右栏"组"=>加入组=>左栏选中Nruan.com=>右栏点"加入组"=>填写一些申请文字提交即可,成功加入组后,重新登陆即可显示A1P订阅理由随便填下就行,提交之后就可以了。重新登录会发现多了一个a1p的授权。————————————————版权声明:本文为CSDN博主「COCO56」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/coco56/article/details/95715671
2020年02月25日
1,694 阅读
0 评论
0 点赞
2020-02-24
Python爬虫:Xpath语法笔记
一、选取节点常用的路径表达式:表达式描述实例nodename选取nodename节点的所有子节点xpath(‘//div’)选取了div节点的所有子节点/从根节点选取xpath(‘/div’)从根节点上选取div节点//选取所有的当前节点,不考虑他们的位置xpath(‘//div’)选取所有的div节点.选取当前节点xpath(‘./div’)选取当前节点下的div节点..选取当前节点的父节点xpath(‘..’)回到上一个节点@选取属性xpath(’//@calss’)选取所有的class属性二、谓语谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点实例: 表达式结果xpath(‘/body/div[1]’)选取body下的第一个div节点xpath(‘/body/div[last()]’)选取body下最后一个div节点xpath(‘/body/div[last()-1]’)选取body下倒数第二个div节点xpath(‘/body/div[positon()<3]’)选取body下前两个div节点xpath(‘/body/div[@class]’)选取body下带有class属性的div节点xpath(‘/body/div[@class=”main”]’)选取body下class属性为main的div节点xpath(‘/body/div[price>35.00]’)选取body下price元素值大于35的div节点 三、通配符Xpath通过通配符来选取未知的XML元素表达式结果xpath(’/div/*’)选取div下的所有子节点xpath(‘/div[@*]’)选取所有带属性的div节点 四、取多个路径使用“|”运算符可以选取多个路径表达式结果xpath(‘//div|//table’)选取所有的div和table节点五、Xpath轴轴可以定义相对于当前节点的节点集轴名称表达式描述ancestorxpath(‘./ancestor::*’)选取当前节点的所有先辈节点(父、祖父)ancestor-or-selfxpath(‘./ancestor-or-self::*’)选取当前节点的所有先辈节点以及节点本身attributexpath(‘./attribute::*’)选取当前节点的所有属性childxpath(‘./child::*’)返回当前节点的所有子节点descendantxpath(‘./descendant::*’)返回当前节点的所有后代节点(子节点、孙节点)followingxpath(‘./following::*’)选取文档中当前节点结束标签后的所有节点following-sibingxpath(‘./following-sibing::*’)选取当前节点之后的兄弟节点parentxpath(‘./parent::*’)选取当前节点的父节点precedingxpath(‘./preceding::*’)选取文档中当前节点开始标签前的所有节点 preceding-siblingxpath(‘./preceding-sibling::*’)选取当前节点之前的兄弟节点selfxpath(‘./self::*’)选取当前节点 六、功能函数 使用功能函数能够更好的进行模糊搜索函数用法解释starts-withxpath(‘//div[starts-with(@id,”ma”)]‘)选取id值以ma开头的div节点containsxpath(‘//div[contains(@id,”ma”)]‘)选取id值包含ma的div节点andxpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘)选取id值包含ma和in的div节点text()xpath(‘//div[contains(text(),”ma”)]‘)选取节点文本包含ma的div节点scrapy xpath文档:http://doc.scrapy.org/en/0.14/topics/selectors.html选取未知节点XPath 通配符可用来选取未知的 XML 元素。通配符描述*匹配任何元素节点。@*匹配任何属性节点。node()匹配任何类型的节点。 在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:路径表达式结果/bookstore/*选取 bookstore 元素的所有子元素。//*选取文档中的所有元素。//title[@*]选取所有带有属性的 title 元素。 选取若干路径通过在路径表达式中使用"|"运算符,您可以选取若干个路径。在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:路径表达式结果//book/title | //book/price选取 book 元素的所有 title 和 price 元素。//title | //price选取文档中的所有 title 和 price 元素。/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。
2020年02月24日
809 阅读
0 评论
0 点赞
2020-02-23
python爬虫之xpath的基本使用
要先将源码etreehtml = requests.get(=url=headers).text html = etree.HTML(html) html = etree.tostring(html=).decode() html.xpath('/html/body/div/ul/li/a[@href="link2.html"]/text()')或将html.text转换为选择器对象import parsel html = parsel.Selector(html_str) url = html.xpath('//div').extract()
2020年02月23日
687 阅读
0 评论
0 点赞
2020-02-23
python打包指令
pyinstaller -F Main.py表 1 PyInstaller 支持的常用选项-h,--help查看该模块的帮助信息-F,-onefile产生单个的可执行文件-D,--onedir产生一个目录(包含多个文件)作为可执行程序-a,--ascii不包含 Unicode 字符集支持-d,--debug产生 debug 版本的可执行文件-w,--windowed,--noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)-c,--nowindowed,--console指定使用命令行窗口运行程序(仅对 Windows 有效)-o DIR,--out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件-p DIR,--path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径-n NAME,--name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
2020年02月23日
673 阅读
0 评论
0 点赞
2020-02-23
Python读取Excel存入MySQL
数据库连接连接数据库前,请先确认以下事项:您已经创建了数据库 TESTDB.在TESTDB数据库中您已经创建了表 EMPLOYEEEMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。在你的机子上已经安装了 Python MySQLdb 模块。如果您对sql语句不熟悉,可以访问我们的 SQL基础教程实例:以下实例链接Mysql的TESTDB数据库:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# 使用execute方法执行SQL语句cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取一条数据data = cursor.fetchone()print "Database version : %s " % data# 关闭数据库连接db.close()执行以上脚本输出结果如下:Database version : 5.0.45创建数据库表如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# 如果数据表已经存在使用 execute() 方法删除表。cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 创建数据表SQL语句sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )"""cursor.execute(sql)# 关闭数据库连接db.close()数据库插入操作以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 插入语句sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # Rollback in case there is any error db.rollback()# 关闭数据库连接db.close()以上例子也可以写成如下形式:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 插入语句sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (%s, %s, %s, %s, %s )" % ('Mac', 'Mohan', 20, 'M', 2000)try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭数据库连接db.close()实例:以下代码使用变量向SQL语句中传递参数:..................................user_id = "test123"password = "password"con.execute('insert into Login values(%s, %s)' % (user_id, password))..................................数据库查询操作Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。fetchone(): 该方法获取下一个查询结果集。结果集是一个对象fetchall():接收全部的返回结果行.rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。实例:查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 查询语句sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000)try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果 print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income )except: print "Error: unable to fecth data"# 关闭数据库连接db.close()以上脚本执行结果如下:fname=Mac, lname=Mohan, age=20, sex=M, income=2000数据库更新操作更新操作用于更新数据表的的数据,以下实例将 EMPLOYEE 表中的 SEX 字段为 'M' 的 AGE 字段递增 1:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 更新语句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭数据库连接db.close()删除操作删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭连接db.close()执行事务事务机制可以确保数据一致性。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。实例:# SQL删除记录语句sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)try: # 执行SQL语句 cursor.execute(sql) # 向数据库提交 db.commit()except: # 发生错误时回滚 db.rollback()对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。错误处理DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:异常描述Warning当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。Error警告以外所有其他错误类。必须是 StandardError 的子类。InterfaceError当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。DatabaseError和数据库有关的错误发生时触发。 必须是Error的子类。DataError当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。OperationalError指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。IntegrityError完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。InternalError数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。ProgrammingError程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。NotSupportedError不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
2020年02月23日
802 阅读
0 评论
0 点赞
2020-02-23
弹性盒
一.弹性盒简介 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。二.Flex布局 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为 Flex 布局。Webkit 内核的浏览器,必须加上-webkit前缀。注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。.box{ display: -webkit-flex; /* Safari */ display: flex;} 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。三.容器的属性以下六个属性设置在容器上: 1. flex-direction属性flex-direction属性决定主轴的方向(即项目的排列方向)。它可能有以下4个值:·row(默认值):主轴为水平方向,起点在左端。·row-reverse:主轴为水平方向,起点在右端。·column:主轴为垂直方向,起点在上沿。·column-reverse:主轴为垂直方向,起点在下沿 2. flex-wrap属性默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。.box{ flex-wrap: nowrap | wrap | wrap-reverse; }·nowrap(默认):不换行·wrap:换行,第一行在上方。·wrap-reverse:换行,第一行在下方 3.flex-flow属性flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。.box { flex-flow: <flex-direction> || <flex-wrap>; } 4.justify-content属性justify-content属性定义了项目在主轴上的对齐方式。.box { justify-content: flex-start | flex-end | center | space-between | space-around; }它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。 justify-content属性·flex-start(默认值):左对齐·flex-end:右对齐·center: 居中·space-between:两端对齐,项目之间的间隔都相等。·space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。 5.align-items属性align-items属性定义项目在交叉轴上如何对齐。.box { align-items: flex-start | flex-end | center | baseline | stretch; }align-items·flex-start:交叉轴的起点对齐。·flex-end:交叉轴的终点对齐。·center:交叉轴的中点对齐。·baseline: 项目的第一行文字的基线对齐。·stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。 6.align-content属性align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。.box { align-content: flex-start | flex-end | center | space-between | space-around | stretch; }该属性可能取6个值。flex-wrap: wrap;align-content:·flex-start:与交叉轴的起点对齐。·flex-end:与交叉轴的终点对齐。·center:与交叉轴的中点对齐。·space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。·space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。·stretch(默认值):轴线占满整个交叉轴。四、项目的属性 以下6个属性设置在项目上: 1 .order属性order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。.item { order: <integer>; } 2.flex-grow属性flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。.item { flex-grow: <number>; /* default 0 */ }如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。 3.flex-shrink属性flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。.item { flex-shrink: <number>; /* default 1 */ }如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。 4 flex-basis属性flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小.item { flex-basis: <length> | auto; /* default auto */ }它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。 5 flex属性flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。 6 align-self属性align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; }该属性可能取6个值,除了auto,其他都与align-items属性完全一致。
2020年02月23日
796 阅读
0 评论
0 点赞
1
...
63
64
65