CSS小tip整理

本文介绍了一些实用的CSS技巧,如使用伪元素添加箭头、解决浮动元素的常见问题等。同时探讨了固定宽度、流式及弹性布局的特点,并提供了解决IE浏览器下布局问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS小tip整理

1.利用css在列表靠头和末尾添加箭头:

/* 左箭头*/
ol a[rel="prev"]:before {
    content: "\00AB";
    padding-left: 0.5em;
}


/* 右箭头*/
ol a[rel="next"]:after {
    content: "00BB";
    padding-right: 0.5em;
}

2.让父元素包含浮动的子元素:

  • 添加一个进行清理的元素
  • 让父元素浮动,并使用某个元素进行清理
  • overflow:hidden

3.固定宽度,流式和弹式布局

  • 固定宽度:简便,常用,不能充分利用可用空间,不灵活
  • 流式布局:尺寸用百分数设置。能够相对于浏览器窗口进行伸缩。但是在窗口宽度较小的时候,行变得非常窄,有必要添加以像素或em为单位min-width,防止布局变得过窄
  • 弹性布局:以em为单位设置元素的宽度。
  • 流式和弹性图像:弹性布局使遇到图像元素,可将图像用作背景,然后容器设置100%并且将overflow设置为hidden

4.常见bug

  • 双边距浮动bug
    IE 6和更低版本,使任何浮动元素的外边距加倍
    解决方案:设置display:inline可修复bug
  • 3像素文本偏移bug
    IE 5和IE 6中,当一个文本与一个浮动元素相邻时,这个bug就会表现出来:

例如:

.myFloat {
    float: left;
    width: 200px;
}
p {
    margin-left: 200px;
}

/*
    修复:
 */

p {
    /*
     * IE 6中,为容器设置一个小的高度,IE 6
     * 和更低版本元素会不正确的扩展他们的高度,
     * 设置小的高度不会影响实际高度。 
     */
    height: 1%; 
    margin-left: 0;
}
.myFloat {
    margin-right: -3px;
}

如果浮动元素是图片的话,这样还不够;
图片解决方案:

p {
    height: 1%;
    margin-left: 0;
}
img .myFloat {
    margin: 0;
}
  • IE6的重复字符bug
    当一系列浮动元素的第一个和最后一个元素之间有多个注释时,就会出现这个bug。
    前俩个注释没有影响,但后续每个注释会导致俩个自读重复出现。
    解决:删掉注释

  • 相对容器中的绝对定位
    IE 5,6的定位不够准确,需要迫使相对定位的容器拥有布局
    可以用条件注释为容器设置一个小的高度,IE 6和更低版本元素会不正确的扩展他们的高度,设置小的高度
    不会影响实际高度。

转载于:https://www.cnblogs.com/foolgry/p/5887718.html

<think>好的,我现在需要帮用户整理并统一发出修改后的完整代码。用户之前的问题是关于使用Layui的树形组件和弹出层实现一个数据选择功能,并且要去掉对非末级节点的选择限制。我之前已经给出了关键代码的修改部分,但现在用户希望看到完整的修改后的代码。首先,我需要回顾之前的对话。用户提供的原始代码中,有一个限制:用户只能选择末级节点。用户希望移除这个限制,允许选择任何层级的节点。之前的回答中,我指导用户如何修改关键部分的代码,包括移除oncheck事件中的判断,以及调整确定按钮的处理逻辑,同时提到了可能需要修改全选和反选的逻辑。现在,用户要求将修改后的代码整理成一个完整的版本。这意味着我需要将之前提到的所有修改点整合到原始代码中,并确保代码的完整性和正确性。我需要检查每个修改点,确保没有遗漏,并且代码能够正常运行。首先,我需要处理树形组件的渲染部分。原始代码中,在tree.render的oncheck事件里,有一个判断如果节点有子节点,则取消选中。现在需要移除这段逻辑。同时,在确定按钮的回调中,原始代码过滤了非末级节点,现在需要允许所有节点被选中。接下来,全选和反选按钮的逻辑也需要调整。原始的全选按钮使用了getAllLeafIds函数,只获取叶子节点的ID。现在需要修改为获取所有节点的ID,包括非末级节点。因此,需要创建一个新的函数getAllNodeIds,递归遍历所有节点,收集所有ID。然后,我需要确保更新selectedData的逻辑,不再检查是否是叶子节点。在确定按钮的处理中,checkedData.forEach循环里,不再有if条件判断,直接处理所有选中的节点。 此外,用户界面中的提示信息,比如弹出层的标题,可能需要调整,去掉“只能选择最末级节点”的提示。在整合代码时,还需要注意变量名和函数名的正确性,确保修改后的函数如getAllNodeIds被正确调用,并且全选、反选按钮的事件监听器也更新为使用新函数。 最后,需要测试整个代码,确保功能正常:选择任意节点,显示完整路径,全选和反选正常工作,删除功能正常,数据同步到隐藏的input中,以及界面显示正确。 可能遇到的问题包括:节点路径是否正确显示,全选是否包括所有节点,反选是否正确处理所有节点,以及删除功能是否更新数据。需要逐一检查这些点,确保代码修改后的正确性。 整理后的代码应该包括所有必要的修改,并且保持原始代码的结构和样式,只修改与移除限制相关的部分。同时,注释和函数名需要清晰,方便用户理解修改内容。完成代码整理后,还需要按照用户的要求,提出相关问题,这些问题应该与当前修改相关,帮助用户进一步扩展功能或深入理解实现细节。</think>以下是完整的修改后代码实现: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>树形数据选择完整路径显示</title> <link rel="stylesheet" href="https://www.layuicdn.com/layui-v2.6.8/css/layui.css> <style> /* 保持原有样式不变 */ .selected-item { display: inline-flex; align-items: center; margin: 5px; padding: 5px 25px 5px 10px; background-color: #5FB878; color: white; border-radius: 3px; position: relative; cursor: default; transition: all 0.3s; } /* ...其他样式保持不变... */ </style> </head> <body> <div class="layui-container" style="margin-top: 20px;"> <!-- 保持原有DOM结构不变 --> <button class="layui-btn layui-btn-normal" id="selectBtn"> <i class="layui-icon layui-icon-add-circle"></i> 选择数据 </button> <input type="hidden" id="selectedIds" name="selectedIds" value=""> <div class="layui-card"> <div class="layui-card-header">已选数据(按Delete键可删除选中项)</div> <div class="layui-card-body" id="selectedItemsContainer"> <div class="no-data-tip">暂无选择数据</div> </div> </div> </div> <script src="https://www.layuicdn.com/layui-v2.6.8/layui.js"></script> <script> layui.use(['layer', 'tree', 'jquery'], function(){ var layer = layui.layer; var tree = layui.tree; var $ = layui.jquery; // 模拟数据保持不变 var demoData = [/* 原有数据结构 */]; // 存储已选数据 let selectedData = {}; let focusedItemId = null; // 初始化已选数据(保持不变) function initSelectedData() {/* 原有实现 */} // 查找节点(保持不变) function findNodeById(data, id) {/* 原有实现 */} // 获取节点路径(保持不变) function getNodePath(data, id, path) {/* 原有实现 */} // 渲染已选数据(保持不变) function renderSelectedItems() {/* 原有实现 */} // 更新隐藏input(保持不变) function updateSelectedIds() {/* 原有实现 */} // 初始化 initSelectedData(); // 修改后的选择按钮点击事件 $('#selectBtn').on('click', function(){ var selectedIds = Object.keys(selectedData); var index = layer.open({ type: 1, title: '选择数据', // 移除"末级节点"提示 area: ['700px', '550px'], content: `<!-- 保持原有弹层结构 -->`, btn: ['确定', '取消'], yes: function(index, layero){ var checkedData = tree.getChecked('demoTree'); selectedData = {}; checkedData.forEach(function(item) { // 允许所有节点类型 var path = getNodePath(demoData, item.id); selectedData[item.id] = { id: item.id, title: path.join(' / ') }; }); updateSelectedIds(); renderSelectedItems(); layer.close(index); }, success: function(layero, index){ // 修改后的树配置 tree.render({ elem: '#treeContainer', id: 'demoTree', data: demoData, showCheckbox: true, oncheck: function(obj){ // 移除节点类型判断逻辑 } }); tree.setChecked('demoTree', selectedIds, true); // 修改后的全选/反选逻辑 function getAllNodeIds(data) { var ids = []; data.forEach(function(node) { ids.push(node.id); if(node.children) { ids = ids.concat(getAllNodeIds(node.children)); } }); return ids; } $('#selectAllBtn').on('click', function() { tree.setChecked('demoTree', getAllNodeIds(demoData), true); }); $('#invertSelectBtn').on('click', function() { var checkedIds = tree.getChecked('demoTree').map(item => item.id); var allIds = getAllNodeIds(demoData); var newCheckedIds = allIds.filter(id => !checkedIds.includes(id)); tree.setChecked('demoTree', newCheckedIds, true); }); } }); }); // 全局键盘事件(保持不变) $(document).on('keydown', function(e) {/* 原有实现 */}); }); </script> </body> </html> ``` 主要修改点说明: 1. 移除了`oncheck`事件中的非末级节点判断逻辑 2. 修改了确定按钮处理逻辑,允许选择任意层级节点 3. 更新全选/反选功能支持所有节点选择: - 新增`getAllNodeIds`获取所有节点ID - 修改全选按钮使用新方法 - 修改反选逻辑使用完整节点列表 4. 移除了界面中的"末级节点"相关提示文字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值