【Effective Web】html/css优化和技巧

html/css优化和技巧

html/css可以做到一些js的功能,减少js操作dom的高昂成本。

巧用伪类

显示勾选时文案

checkbo勾选时触发,实现checkbox的简单选中事件处理

<template><input type="checkbox" /><span class="checkbox">checked</span>
</template><style lang="less">
.checkbox {display: none;
}
input[type="checkbox"]:checked + .checkbox {display: inline;
}
</style>

在这里插入图片描述

显示tooltip

使用:hover和:before组合,把提示文案放在span上,鼠标悬浮时显示提示信息。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="container"><p >hello <span data-title="hello"> World</span></p></div>
</body>
</html><style> 
.container {width: 500px;height: 200px;padding: 20px;
}
span {position: relative;
}
span:hover::before {content: attr(data-title);position: absolute;top: -150%;left: 50%;transform: translate(-50%);white-space: nowrap;background-color: #191919;padding: 4px;color: #fff;border-radius: 4px;
}</style>

效果如下:
在这里插入图片描述

多列等高

多列文本展示在同一行,要控制高度一致。

在这里插入图片描述

方式一:使用flex布局

.container {width: 800px;display: flex;div {background-color: bisque;border: 1px solid #dfdfdf;border-radius: 4px;padding: 0 16px;margin: 0 8px;}
}

方式二:使用table布局

利用table的自适应特性,容器设置display为table,子元素数组display为table-cell.

.container {display: table;border-spacing: 8px;div {display: table-cell;background-color: bisque;border-radius: 4px;width: 1000px;p,h2 {padding: 4px 8px;}}
}

另一个优点是:响应式开发时,借助媒体查询动态调整display为block,从而改变排列顺序。

@media (max-width: 500px) {.container {display: block;div {display: block;width: 100%;}}
}

在这里插入图片描述

使用表单提交

参数拼接

form标签有个action属性,可以自动拼接输入框的值到网址参数中,不需要一个个的获取输入框的值
在这里插入图片描述

自动监听回车事件

如果需要做表单事件,那就监听submit事件,还可以用这个来自动监听回车事件。

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title></head><body><form id="form1" name="form1" method="post" action="" onsubmit="return fun()"><input type="text" name="t" id="t" /><input type="submit"/></form><script>function fun(){var t = document.getElementById("t");alert(t.value);return false;}</script></body>
</html>

css三角形

画一个三角形

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div><div class="triangle"></div></div>
</body>
</html><style>
.triangle {width: 0;height: 0;border-bottom: 50px solid #000;border-left: 50px solid transparent;border-right: 50px solid transparent;
}
</style>

在这里插入图片描述

画一个等边三角形

三角形的高为border-bottom,三角形底为border-left/border-right * 2,高与底的比是sqrt(3) / 2
border-bottom为40px, border-left值应该为40 / sqrt(3) 约等于23px
在这里插入图片描述

画消息框的三角形

消息框的左侧有一个指向左边的三角形,这个三角形可以这样画,先画一个指向左边的三角形,颜色和消息框的border一致
再画一个白色的三角形叠在上面,看起来就像突出的三角形。对面是这样的:

<div class="message">Hello World</div>
.message {width: 200px;height: 50px;border: 1px solid #dfdfdf;position: relative;line-height: 50px;padding: 0px 4px;border-radius: 4px;
}
.message::before {content: '';position: absolute;top:20px;left: -10px;border-bottom: 6px solid transparent;border-top: 6px solid transparent;border-right:  10px solid #dfdfdf;
}.message::after {content: '';position: absolute;top:20px;left: -8px;border-bottom: 6px solid transparent;border-top: 6px solid transparent;border-right:  10px solid white;
}

效果如下:
在这里插入图片描述
如果有阴影还可以加filter

.message {width: 200px;height: 50px;border: 1px solid #dfdfdf;position: relative;line-height: 50px;padding: 0px 4px;border-radius: 4px;filter: drop-shadow(0 0 2px #999);background-color: #ffffff;
}

在这里插入图片描述

尽可能地使用伪元素

伪元素是一个元素的子元素,像:before/:after可以看成是元素的第一个元素或最后一个元素,且伪元素不能被js获取。优点就是可以用伪元素来制造视觉效果,又不影响dom渲染,对js是透明的。

例子:

分割线

.hr {font-size: 14px;position: relative;text-align: center;
}
.hr::before,
.hr::after {content: '';position: absolute;top: 10px;width: 200px;height: 1px;background-color: #ccc;
}
.hr::before {left: 0px;
}
.hr::after {right: 0px;
}

在这里插入图片描述

清除浮动

给要清除浮动加一个:after:

.clear:after {
content: "";
display: table;
clear: both;

禁用所有表单项

当表单提交后,所有表单禁用,如果一个个加disabled比较麻烦,可以用after给form加一个同样大小的元素,覆盖原来的form元素

    .form::after {content: "";position: absolute;left: 0;top: 0;width: 100%;height: 100%;}

在这里插入图片描述

计算个数

counter-reset结合伪元素显示勾选的个数

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><div class="container"><div class="choose"><label><input type="checkbox" />苹果</label><label><input type="checkbox" />葡萄</label><label><input type="checkbox" />西瓜</label><label><input type="checkbox" />芒果</label></div><span>选择了<span class="count"></span>种水果</span></div></body>
</html><style>.container {width: 500px;margin: 0 auto;}.choose {counter-reset: fruit;}.choose input:checked {counter-increment: fruit;}.count::before {content: counter(fruit);}
</style>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Text文本固定框条内无缝衔接循环滚动效果实现

在Unity中要实现在一个固定背景框条内播放文本&#xff0c;并且文本能够衔接循环滚动&#xff0c;可以通过以下步骤实现&#xff1a; 1、创建一个Image组件作为背景框条&#xff0c;在Image下添加一个Mask组件&#xff0c;如下图&#xff1a; 2、创建Text文本组件&#xff0c…

深入理解TCP/IP协议:网络通信的基石

提示&#xff1a;本系列文章重点学习TCP/IP协议 深入理解TCP/IP协议&#xff1a;网络通信的基石 简介一、TCP/IP协议的基本原理二、TCP/IP协议的工作机制三、TCP面向连接建立连接&#xff1a;断开连接&#xff1a; 四、分层传输五、TCP流量控制滑动窗口机制流量控制的工作流程优…

深入解析代理模式:使用场景、实现及应用实例

在软件设计中&#xff0c;代理模式是一种常用的设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。代理模式在多种场景下都能发挥重要作用&#xff0c;特别是在需要控制对象访问权限、降低系统耦合度或提高系统性能时。 一、代理模式的使用条件 代理模式…

ABAP - 上传文件模板到SMW0,并从SMW0上下载模板

upload file template to SMW0 and download the template from it 首先上传文件到tcode SMW0 选择新建后,输入文件名和描述,再选择想要上传的文件 上传完成后: 在表WWWPARAMS, WWWDATA里就会有信息存进去 然后就可以程序里写代码了: 屏幕上的效果:

iOS - Runtime - Class的结构

文章目录 iOS - Runtime - Class的结构前言1. Class的结构1.1 Class的结构1.1.1 objc_class1.1.2 class_rw_t1.1.3 class_ro_t 1.2 class_rw_t和class_ro_t的区别1.3 class_rw_t和class_ro_t的关系1.3.1 分析关系1.3.2 原因 1.4 method_t1.4.1 Type Encoding1.4.2 types iOS - …

langchain调用语言模型chatglm4从智谱AI

目录 ​0.langchain agent 原理 ReAct 1.langchain agent使用chatgpt调用tools的源代码 2.自定义本地语言模型的代码 3.其他加速方法 背景&#xff1a;如果使用openai的chatgpt4进行语言问答&#xff0c;是需要从国内到国外的一个客户请求-->openai服务器response的一个…

pytorch反向传播算法

目录 1. 链式法则复习2. 多输出感知机3. 多层感知机4. 多层感知机梯度推导5. 反向传播的总结 1. 链式法则复习 2. 多输出感知机 3. 多层感知机 如图&#xff1a; 4. 多层感知机梯度推导 简化式子把( O k O_k Ok​ - t k t_k tk​) O k O_k Ok​(1 - O k O_k Ok​)起个别名…

react native上传二进制图片、视频的方法

react native获取本地图片我用的react-native-image-picker&#xff0c;但是它只能获取图片路径&#xff0c;以及base64的图片&#xff0c;不能获取到binary二进制形式的。 一开始我是让后端改造接口&#xff0c;把原本传binary的改成了base64&#xff0c;可是&#xff0c;躲得…

[自研开源] 数据集成之分批传输 v0.7

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 介绍 本篇基于…

嵌入式下C/C++调用sqlite3简单开发

交叉编译sqlite3请关注我第一篇博文 sqlite3 交叉编译-CSDN博客 sqlite3的命令的简单使用&#xff08;增删改查&#xff0c;创建/删除表&#xff09;请关注我的上一篇博文 sqlite3嵌入式使用以及C/C代码开发-CSDN博客 一、新建文件夹 此文件夹用于放置工程&#xff0c;比如…

Qt实现TFTP Server和 TFTP Client(三)

3.2 Client Client包括下面3个类&#xff1a; ClientSockeTFtpClientTFtpClientWidget 3.2.1 ClientSocke ClientSocke从BaseUdp派生实现write接口. 3.2.1.1 ClientSocke定义 #include "baseudp.h"class QUdpSocket; class ClientSocket : public BaseUdp { pu…

【C++】每日一题 45 跳跃游戏

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

SQLite中的原子提交(四)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite数据库成为内存中数据库&#xff08;三&#xff09; 下一篇&#xff1a;SQLite使用的临时文件&#xff08;二&#xff09; 1. 引言 SQLite等事务数据库的一个重要特性 是“原子提交”。 原子提交意味着所有数据库都在…

深度学习十大算法之图神经网络(GNN)

一、图神经网络的基础 图的基本概念 图是数学中的一个基本概念&#xff0c;用于表示事物间复杂的关系。在图论中&#xff0c;图通常被定义为一组节点&#xff08;或称为顶点&#xff09;以及连接这些节点的边。每个边可以有方向&#xff0c;称为有向边&#xff0c;或者没有方向…

网络原理讲解

目标 网络发展史 独立模式 独立模式&#xff1a;计算机之间相互独立&#xff1b; 网络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同工作来完成 业务&#xff0c;就有了网络互连。 网络互连&a…

学习笔记:MYSQL数据库基础知识

MYSQL数据库基础知识学习笔记 MYSQL基础学习数据库相关概念现主流数据库排名数据模型SQL分类SQL数据库基础操作 2024/3/27 学习资料&#xff1a;黑马程序员:MYSQL MYSQL基础学习 数据库和数据库管理系统(DBMS) 数据库: 是存储数据的集合&#xff0c;包括表、视图、索引等对象…

存内计算:释放潜能的黑科技

什么是存内计算&#xff1f; 存内计算技术是一种新型的计算架构&#xff0c;它将存储器和计算单元融合在一起&#xff0c;以实现高效的数据处理。存内计算技术的优势在于能够消除数据搬运的延迟和功耗&#xff0c;从而提高计算效率和能效比。目前&#xff0c;存内计算技术正处…

React Native获取及监听网络状态

在React Native中&#xff0c;要获取和监听网络状态&#xff0c;你可以使用react-native-netinfo库&#xff08;以前是核心库的一部分&#xff0c;但在React Native 0.60之后被移出并作为一个独立的库提供&#xff09;。以下是使用这个库来获取和监听网络状态的基本步骤&#x…

苹果Find My产品需求增长迅速,伦茨科技ST17H6x芯片供货充足

苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、Ai…

jupyter notebook导出含中文的pdf(LaTex安装和Pandoc、MiKTex安装)

用jupyter notebook导出pdf时&#xff0c;因为报错信息&#xff0c;需要用到Tex nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install…