element

CSS 技巧一则 -- 不定宽溢出文本适配滚动

爷,独闯天下 提交于 2020-08-15 04:02:13
在日常布局当中,肯定经常会遇到文本内容超过容器的情况。非常常见的一种解决方案是超出省略。 但是,有的时候,由于场景的限制,可能会出现在一些无法使用超出打点省略的方法的场景,譬如在导航栏中: 这种情况下,在容器定宽但是文本又溢出且不能换行的情况下,我们就需要寻求另外的解决方案。 hover 时弹出框提示 一种可行的方案是在 hover 的时候,弹出一个文本框展示全文,最简单的就是在文本标签下添加 title 属性,填充我们需要的内容: <ul> <li title="溢出文本1 溢出文本2 溢出文本3 溢出文本4">溢出文本1 溢出文本2 溢出文本3 溢出文本4</li> </ul> 当然,这种方法简单但是可能缺乏点用户体验。 本文将简单介绍在文本长度不确定,容器长度也不确定的情况下,任意长度的文本实现 hover 状态下,从左向右,滚动到文本末端,再滚动回初始位置,如此反复,像是这样: 容器定宽,文本不定宽 我们先假设一下,我们的容器的宽度如果是固定的,但是不确定每条文本的宽度。 像是这样: <div class="wrap"> <p title="我的宽度是正常宽度">我的宽度是正常宽度</p> <p class="scroll" title="我的宽度是溢出了一小部分">我的宽度是溢出了一小部分</p> <p class="scroll" title=

RBAC用户角色权限设计方案

孤街醉人 提交于 2020-08-15 03:58:39
RBAC(Role-Based Access Control,基于角色的访问控制) 就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个角色赋予该用户。 当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系) 在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联

python 元组的使用方法

試著忘記壹切 提交于 2020-08-15 03:42:41
元组——tuple 列表非常适合用于存储在程序运行期间可能变化的数据集。 列表是可以修改的,但元组是不可修改的 Python将不能修改的值称为不可变的,而不可变的列表被称为元组 1. 元组的创建和删除 (1)使用赋值运算符直接创建元组 语法: tuplename = (element1, element2, element3, ....) 在Python中,元组使用一对小括号将所有的元素括起来,但是小括号不是必须的,只要将一组值用逗号分隔开,Python就可以使其为元组。 verse = "渔舟唱晚", "高山流水", "出水莲", "汉宫秋月" # 元组 如果要创建的元组中只有 一个元素 ,需要在元素的后面加上逗号,否则Python使其为 字符串 。 verse1 = ('一片冰心在玉壶') # 字符串 verse2 = ('一片冰心在玉壶',) # 元组 (2)创建空的元组 emptytuple = () (3)创建数值元组 可以使用tuple()函数直接将range()函数循环出来的结果转换为数值元组 tuple(data) data-可迭代的对象 (4)删除元组 del tuplename del语句在实际开发中,并不常用,因为Python自带的垃圾回收机制会自动销毁不用的元组,所以即使我们不手动将其删除,Python也会自动将其回收。 2. 访问元组元素 通过for循环

步入element-ui踩坑记

假如想象 提交于 2020-08-15 03:38:04
1、element-ui中轮播图自适应图片高度。   https://www.cnblogs.com/Azyzl/p/11169141.html 2、 < el-table-column label ="余额(元)" align ="right" :show-overflow-tooltip ="true" prop ="saDdpAcctBal" > < template slot-scope ="scope" > < span style ="color: red" > {{scope.row.saDdpAcctBal}} </ span > </ template > </ el-table-column > 来源: oschina 链接: https://my.oschina.net/u/4277082/blog/4331897

Netty自娱自乐之类Dubbo RPC 框架设计构想 【上篇】

我们两清 提交于 2020-08-15 02:54:36
  之前在前一篇的《 Netty自娱自乐之协议栈设计 》,菜鸟我已经自娱自乐了设计协议栈,gitHub地址为https://github.com/vOoT/ncustomer-protocal。先这一篇中,准备接着自娱去实现一个RPC框架,现在公司共的是Dubbo,那么先不看其代码,先自行实现一下吧。   dubbo 包括 注册和服务调用,细节我们先不管,然后,我先先实现一个如下的简单模型   哈哈哈,第一个版本就是这么简单,粗暴。说到自定义配置,首先想到的是Spring 自定义标签,利用标签进行配置服务。而我设计的标签页非常的简单,使用如下:     <rpc:provider id="helloServiceImpl" class="com.qee.rpc.HelloServiceImpl"/>     <rpc:cumsumer id="helloService" interface="com.qee.rpc.HelloService"/> 看到了没,非常像dubbo,那么如何实现一个自定义标签呢,从网上可以了解搜索的到,现在我就简单说明一下,如何编写和测试自己自定义的Spring 标签。   一、 定义xsd 文件,该文件是xml文件的 schema 定义。从上面的例子中,我们知道xsd文件里面应该有2个节点,1个provider节点和1个cumsumer节点定义

CF 1381B Unmerge(思维 + 01背包确定可行解)

夙愿已清 提交于 2020-08-15 02:25:41
题目: Let a and b be two arrays of lengths n and m, respectively, with no elements in common. We can define a new array merge(a,b) of length n+m recursively as follows: If one of the arrays is empty, the result is the other array. That is, merge(∅,b)=b and merge(a,∅)=a. In particular, merge(∅,∅)=∅. If both arrays are non-empty, and a1<b1, then merge(a,b)=[a1]+merge([a2,…,an],b). That is, we delete the first element a1 of a, merge the remaining arrays, then add a1 to the beginning of the result. If both arrays are non-empty, and a1>b1, then merge(a,b)=[b1]+merge(a,[b2,…,bm]) That is, we delete

构建高性能队列,你不得不知道的底层知识!

不想你离开。 提交于 2020-08-15 01:53:22
前言 本文收录于专辑: http://dwz.win/HjK ,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 上一节,我们一起学习了如何将递归改写为非递归,其中,用到的数据结构主要是栈。 栈和队列,可以说是除了数组和链表之外最基础的数据结构了,在很多场景中都有用到,后面我们也会陆陆续续的看到。 今天,我想介绍一下,在Java中,如何构建一个高性能的队列,以及我们需要掌握的底层知识。 学习其他语言的同学,也可以看看,在你的语言中,是如何构建高性能队列的。 队列 队列,是一种先进先出(First In First Out,FIFO)的数据结构,类似于实际生活场景中的排队,先到的人先得。 使用数组和链表实现简单的队列,我们前面都介绍过了,这里就不再赘述了,有兴趣的同学可以点击以下链接查看: 重温四大基础数据结构:数组、链表、队列和栈 今天我们主要来学习如何实现高性能的队列。 说起高性能的队列,当然是说在高并发环境下也能够工作得很好的队列,这里的很好主要是指两个方面:并发安全、性能好。 并发安全的队列 在Java中,默认地,也自带了一些并发安全的队列: 队列 有界性 锁 数据结构 ArrayBlockingQueue 有界 加锁 数组 LinkedBlockingQueue 可选有界 加锁 链表 ConcurrentLinkedQueue 无界 无锁 链表

max_element()函数和min_element()函数

删除回忆录丶 提交于 2020-08-14 23:52:47
max_element()函数和min_element()函数,我们从函数名字就能知道是什么作用了,就是找最大值最小值,那怎么用呢? 数组:int position=max_element(a,a+n)-a; int data=*max_element(a,a+n); 容器: int position=max_element(v.begin(), v.end())-v.begin(); int it = *max_element(v.begin(), v.end()); string: int position=max_element(s.begin(), s.end())-s.begin(); char it=*max_element(s.begin(),s.end()); min_element()函数也是一样的用法,这里要注意的是如果有多个最大值或者最小值,返回的是第一次出现的位置。 来源: oschina 链接: https://my.oschina.net/u/4358874/blog/4304748

Firefox/Chrome WebDriver浏览器驱动

你说的曾经没有我的故事 提交于 2020-08-14 22:39:03
python-selenium官方文档 1.driver.current_url:用于获得当前页面的URL 2.driver.title:用于获取当前页面的标题 3.driver.page_source:用于获取页面html源代码 4.driver.current_window_handle:用于获取当前窗口句柄 5.driver.window_handles:用于获取所有窗口句柄 6.driver.find_element_by***** 定位元素,有18种 7.driver.get(url):浏览器加载url。 8.driver.forward():浏览器向前(点击向前按钮)。 9.driver.back():浏览器向后(点击向后按钮)。 10.driver.refresh():浏览器刷新(点击刷新按钮)。 11driver.close():关闭当前窗口,或最后打开的窗口。 12.driver.quit():关闭所有关联窗口,并且安全关闭session。 13.driver.maximize_window():最大化浏览器窗口。 14.driver.set_window_size(宽,高):设置浏览器窗口大小。 15.driver.get_window_size():获取当前窗口的长和宽。 16.driver.get_window_position():获取当前窗口坐标。 17

什么情况下不能使用最坏情况评估算法的复杂度?

陌路散爱 提交于 2020-08-14 22:37:31
前言 本篇文章收录于专辑: http://dwz.win/HjK ,点击解锁更多数据结构与算法的知识。 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人。 上一节,我们从最坏、平均、最好三种情况分析了算法的复杂度,得出结论,通常来说,使用最坏情况来评估算法的复杂度完全够用了。 但是,有些算法是不能使用最坏情况来评估算法的复杂度的。 那么,有哪些算法呢? 本节,我们将从动态数组以及快速排序这两个个例入手来分析不能使用最坏情况评估复杂度的情形。 动态数组 动态数组,对应于Java中的ArrayList,在插入元素时,分成两种情况: 数组未满,元素放在size下标的位置即可; 数组满了,需要扩容,一般扩容为N倍大小,Java里面是1.5倍,扩容时需要创建一个新的数组,并把原来的元素一个一个地拷贝到新的数组中,再插入新的元素; 我简单地写一段代码,你可以感受下: public class DynamicArray { private int[] array; private int size; public DynamicArray(int capacity) { this.array = new int[capacity]; this.size = 0; } // 插入元素,时间复杂度为多少呢? public void add(int element) { //