- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试提出一种定义嵌套 flexbox 并允许调整其大小的有效方法。我认为它几乎就在那里:
http://jsfiddle.net/6j10L3x2/1/
我使用三个自定义元素纯粹是为了使标记更具声明性:
flex, flex-item, flex-resizer
最佳答案
哇。我对您如何使用“flexGrow”、出色的想法和代码使用 vanilla javascript 调整 flexbox 元素的大小印象深刻。
我已经通过几种方式改进了您的代码,并且运行良好。
我做了什么?
1.- 我简化了 HTML:
function manageResize(md, sizeProp, posProp) {
var r = md.target;
var prev = r.previousElementSibling;
var next = r.nextElementSibling;
if (!prev || !next) {
return;
}
md.preventDefault();
var prevSize = prev[sizeProp];
var nextSize = next[sizeProp];
var sumSize = prevSize + nextSize;
var prevGrow = Number(prev.style.flexGrow);
var nextGrow = Number(next.style.flexGrow);
var sumGrow = prevGrow + nextGrow;
var lastPos = md[posProp];
function onMouseMove(mm) {
var pos = mm[posProp];
var d = pos - lastPos;
prevSize += d;
nextSize -= d;
if (prevSize < 0) {
nextSize += prevSize;
pos -= prevSize;
prevSize = 0;
}
if (nextSize < 0) {
prevSize += nextSize;
pos += nextSize;
nextSize = 0;
}
var prevGrowNew = sumGrow * (prevSize / sumSize);
var nextGrowNew = sumGrow * (nextSize / sumSize);
prev.style.flexGrow = prevGrowNew;
next.style.flexGrow = nextGrowNew;
lastPos = pos;
}
function onMouseUp(mu) {
// Change cursor to signal a state's change: stop resizing.
const html = document.querySelector('html');
html.style.cursor = 'default';
if (posProp === 'pageX') {
r.style.cursor = 'ew-resize';
} else {
r.style.cursor = 'ns-resize';
}
window.removeEventListener("mousemove", onMouseMove);
window.removeEventListener("mouseup", onMouseUp);
}
window.addEventListener("mousemove", onMouseMove);
window.addEventListener("mouseup", onMouseUp);
}
function setupResizerEvents() {
document.body.addEventListener("mousedown", function (md) {
// Used to avoid cursor's flickering
const html = document.querySelector('html');
var target = md.target;
if (target.nodeType !== 1 || target.tagName !== "FLEX-RESIZER") {
return;
}
var parent = target.parentNode;
var h = parent.classList.contains("h");
var v = parent.classList.contains("v");
if (h && v) {
return;
} else if (h) {
// Change cursor to signal a state's change: begin resizing on H.
target.style.cursor = 'col-resize';
html.style.cursor = 'col-resize'; // avoid cursor's flickering
// use offsetWidth versus scrollWidth (and clientWidth) to avoid splitter's jump on resize when a flex-item content overflow (overflow: auto).
manageResize(md, "offsetWidth", "pageX");
} else if (v) {
// Change cursor to signal a state's change: begin resizing on V.
target.style.cursor = 'row-resize';
html.style.cursor = 'row-resize'; // avoid cursor's flickering
manageResize(md, "offsetHeight", "pageY");
}
});
}
setupResizerEvents();
body {
/* margin:0; */
border: 10px solid #aaa;
}
flex {
display: flex;
overflow: hidden;
}
/* flex-item > flex {
position: absolute;
width: 100%;
height: 100%;
} */
flex.h {
flex-direction: row;
}
flex.v {
flex-direction: column;
}
flex-item {
/* display: flex; */
/* position: relative; */
/* overflow: hidden; */
overflow: auto;
}
flex > flex-resizer {
flex: 0 0 10px;
/* background: white; */
background-color: #aaa;
background-repeat: no-repeat;
background-position: center;
}
flex.h > flex-resizer {
cursor: ew-resize;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='30'><path d='M2 0 v30 M5 0 v30 M8 0 v30' fill='none' stroke='black'/></svg>");
}
flex.v > flex-resizer {
cursor: ns-resize;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='10'><path d='M0 2 h30 M0 5 h30 M0 8 h30' fill='none' stroke='black'/></svg>");
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>flex-splitter</title>
<link rel="stylesheet" href="./src/styles.css">
<script src="./src/index.js" defer></script>
</head>
<body>
<flex class="v" style="flex: 1; height: 500px;">
<flex-item style="flex: 1;">Flex 1</flex-item>
<flex-resizer></flex-resizer>
<flex class="h" style="flex: 1;">
<flex-item style="flex: 1; background-color: aqua;">
<!--
The next section is an example to test the splitter when there is content inside a flex-item
-->
<section>
<div>
<label for="CursorCoor" style="display: block;">showCursorCoor: </label>
<textarea id="CursorCoor" rows="6" cols="50" wrap="soft" readonly></textarea>
</div>
<br />
<div>
<label for="boxInfo" style="display: block;">showBoxInfo: </label>
<textarea id="boxInfo" rows="6" cols="50" wrap="soft" readonly></textarea>
</div>
</section>
</flex-item>
<flex-resizer></flex-resizer>
<flex class="v" style="flex: 2; ">
<flex-item style="flex: 1; background: pink;">Flex 3</flex-item>
<flex-resizer></flex-resizer>
<flex class="h" style="flex: 1">
<flex-item style="flex: 1; background: green;">Flex 4</flex-item>
<flex-resizer></flex-resizer>
<flex-item style="flex: 2;">Flex 5</flex-item>
<!-- <flex-resizer></flex-resizer> -->
<flex-item style="flex: 3; background: darkorange;">Flex 6</flex-item>
</flex>
</flex>
</flex>
</flex>
</body>
</html>
关于html - 弹性盒调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767221/
我在 AWS Elastic beanstalk 上有一个 tomcat 应用程序,建议 here我正在使用环境属性设置与数据库的 jdbc 连接,此参数包括数据库的用户和密码。问题是,tomcat
经典的Elasticsearch不解析您的日期。也许我开始失明了。我不知道自己在做什么错,我的模板是: "datestamp": {
我想使用 flex 查询在Kibana中创建警报。我正在使用opendistro警报功能。我想检查最近10分钟内cpu.pct字段的所有值是否大于50,如果是,则发出警报。 { "size": 500
我正在使用Kibana中的警报功能,并且想检查字段的最后5个连续值是否超过阈值x,但是如果我在 flex 查询中使用过滤器,则会在前N个聚合之前应用该过滤器。 有没有一种方法可以使用其他选择器或方法在
我们的指数是超标准的。它是平坦的,并使用logstash从oracle / jdbc转储。 我们也使用相当标准的查询语法来查询 flex : { "size": 20, "from"
您好,我正在执行以下查询: { "_source": [ "source1", "source2", "source3", "source4", ], "q
请告诉我正确的方向:) 我有一个任务:通过查询以 flex 搜索方式查找文档,其中可能包含不必要的单词。 我将说明我的意思: 假设我有一些包含单词“ big red car ”的文档(现在它们在索引的
这是我的一份文件可能看起来像的 { "CC":{"colors":["Blue","Green","Yellow"]}, "CN":{"colors":["White"
语境 弹性 6.0.0 我有以下结构: { "age": 24, "blood": 450, "iv": 700, "job": "boss", "damage": "cut,
我可以使文档不可变吗?当文档提交到相同的 id 时,它们是否不会被重写? POST "localhost:9200/index001/_doc/1" // First time it is creat
我正在制作一个图形应用程序,我可以在其中通过拖动多段线的控制点来编辑多段线。但是,我想通过使其具有弹性来使其更易于使用;拖动控制点时,不是移动单个点,我希望也移动该点一定距离内的点,具体取决于“拉”控
我们都知道云计算拥有弹性扩展的特性,所谓的弹性,即云端的可用资源能够随着用户的需求而灵活变化、自由升降,在业务高峰或低谷期,均能匹配适量的资源,既不捉襟见肘、也不过分浪费。弹性云服务器,简单地说,
我有一个索引,其中多个人可以通过他们的姓名+角色分配给一个文档。 到目前为止,我们通过将“人员”添加为嵌套文档并仅将所有相关人员索引到一个文档中来实现搜索。 我们对查询性能不满意,我想尝试从 "peo
我要执行2个不同的批量上传,每次上传的顺序都是完全无法预测的 在一次加载中,我将具有以下字段:SERVER_NAME,OS和PROD_1_VERSION在另一项中,我将具有以下字段:SERVER_NA
如果我有一个索引到Elasticsearch的JSON文档,如下所示: "_source": { "pid_no": 19321, "aggregator_id
我似乎无法按顺序排列 flex 查询的结果。 我将内存利用率统计信息存储在elasticsearch中。文档示例如下所示: { "Component": "ABC", "memUsage"
给定输入“快速的棕色狐狸跳”,我想为单词创建每种可能的 token 组合。因此,示例字符串将被标记为 [ "quick", "quick brown", "quick fox", "quick jum
我基本上是在尝试编写一个查询,它应该在哪里返回文档 学校是“神圣的国际”,成绩是“第二”。 但当前查询的问题在于它没有考虑必须匹配查询部分。即,即使我没有指定学校给我这份文件,因为它不匹配。 查询给了
我正在尝试在Kibana Canvas 中设置日期格式,因此我遵循了此文档: https://www.elastic.co/blog/kibana-canvas-data-table-and-debu
在用 Flex 编写 token 生成器时,我遇到了这个恼人的错误:“无法识别的规则” 我的代码是: /* Keywords */ TYPE int|double|bool|char L
我是一名优秀的程序员,十分优秀!