让css设置的更具有合理性

news2025/1/7 13:29:35

目录

一、合理性设置宽高

二、避免重叠情况,不要只设置最大宽

三、优先使用弹性布局特性

四、单词、数字换行处理

五、其他编码建议


平常写css时,除了遵循一些 顺序、简化、命名上的规范,让css具有合理性也是重要的一环。

最近的需求场景:国际化翻译,从中文转换英文的转换结果,大部分的长度也会增加1.5~3倍,复杂的单词可能会增加的更多,也就导致了出现换行、文字覆盖/溢出的场景。

出现的这些问题只是内容的长度增加了,其实在书写样式时都可以避免大部分情况。

一、合理性设置宽高

场景1:宽、高并非都需要设置成固定值

<style>
   .tag {
        padding: 2px 3px;
        width: 136px;
        height: 28px;
        color: #000;
        box-sizing: border-box;
        border-radius: 6px;
        background: orange;
    }
</style>
<body>
    <div class="tag">目前没有可用数据</div>
</body>

效果图:

这可能是我们从设计平台中直接复制过来的代码,看起来平平无奇,事实上不更改内容确实没什么问题,但是某个需求上的一次文字变更都会导致样式适配的不完美。

改进建议:若非绝对场景,宽高是没必要进行添加的,而是否换行可以根据实际场景设置。

推荐做法:宽度设置为自身可以空间 + 设置最大宽度,好处:文字少的时候不会空出剩余的空间,超出最大宽文字才会换行。若不想换行,可直接去掉最大宽。

 .tag {
        max-width: 160px;
        width: fit-content;
    }

二、避免重叠情况,不要只设置最大宽

<style>
    .box {
        display: flex;
        width: 300px;
        padding: 10px;
        border: 2px dashed #000;
        border-radius: 10px;
    }

    .label {
        max-width: 80px;
    }

    .value {
        width: 220px;
        background: orange;
    }

</style>
<body>
    <div class="box">
        <div class="label">身份信息:</div>
        <div class="value">是一名特务,爱吃小熊饼干</div>
    </div>
</body>

效果图:

由于左侧只设置成了最大宽,当内容发送变化的时候限制了宽度,换成英文字符长度增加后后会出现重叠情况

推荐做法:给宽和不给宽可以参考实际场景,注意不要只设置最大宽!

    .label {
-      //  max-width: 80px;
+        width: fit-content; 
         word-break: break-all;
    }

三、优先使用弹性布局特性

场景1: 弹性对其方式替掉边距

<style>
    .box {
        display: flex;
        width: 300px;
        padding: 10px;
        border: 2px dashed #000;
        border-radius: 10px;
    }

    .btn {
        padding: 2px 4px;
        background: orange;
        border-radius: 3px;
    }

    .btn1 {
        margin-left: 210px;
    }
    
    .btn2 {
        margin-left: 10px;
    }
</style>
<body>
    <div class="box">
        <div class="btn btn1">取消</div>
        <div class="btn btn2">确定</div>
    </div>
</body>

效果图:

这个出现的问题就比较明显了,不管是box宽度的增加还是按钮文字的变更都会影响距离左侧的距离。例如文字变成英文

    .box {
         display: flex;
+        justify-content: flex-end;
    }

    .btn1 {
-        /* margin-left: 210px; */
    }

场景2: 沾满剩余空间

<style>
    .box {
        display: flex;
        width: 390px;
    }

    .label {
        width: fit-content;
        word-break: break-all;
    }

    .value {
        padding: 0 4px;
        width: 220px;
        box-sizing: border-box;
        background: orange;
    }
</style>

<div class="box">
    <div class="label">Identity information:</div>
    <div class="value">He is a spy who loves to eat teddy bear cookies</div>
</div>

由于右侧把宽度写死,当盒子宽度发生变化时,会导致右侧存在空白。

推荐做法:为了避免整体盒子的调整,对于label-value类似场景,可以使用flex:1让value沾满剩余空间

    .box {
        display: flex;
        width: 390px;
    }
		.value { 
+    	 flex:1;
       ...
		}

四、单词、数字换行处理

在中文字符下大多数浏览器会默认允许在字符间换行,而英文单词和数字通常不会在内部断开换行。一般在弹窗场景出现问题居多。

  <style>
    .box {
      width: 300px;
      padding: 10px;
      border: 2px dashed #000;
      border-radius: 10px;
    }

    .value {
      padding: 0 4px;
      box-sizing: border-box;
      background: orange;
    }
  </style>

  <div class="box">
    <div class="value">
      This is a long and Honorificabilitudinitatibus
      califragilisticexpialidocious
      Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu
      グレートブリテンおよび北アイルランド連合王国という言葉は本当に長い言葉
      123123115615615616156156161616165165161615
    </div>
  </div>

​修改:

方案1:调整 word-break

word-break: break-all;

方案2:调整 overflow-wrap

overflow-wrap: break-word;


五、其他编码建议

例子比较简单些,但确实是在项目中发生过的,当然也和自己写样式的习惯有关,写项目时除了关注实现,更应该考虑扩展。

除了上面几种避免覆盖情况,也应该注意一些编码坏习惯:

  1. 避免行内样式: 减少使用行内样式。虽然编写快速,但会影响标签可读性,尤其在多次迭代后。过度使用可能导致代码难以维护。

  2. 统一公共样式: 充分利用项目的公共样式库。例如,对于常用的flex布局,优先使用预定义的公共类,而非在业务代码中重复添加。

  3. 滥用浮动布局:过度依赖float,而不是使用更现代的flexbox或grid布局。

  4. 选择器嵌套过深:增加特异性,使样式难以重写,同时影响性能。

  5. 过度使用!important:滥用会破坏CSS的优先级规则,导致样式难以覆盖和维护。

  6. 重复编写相似样式:未充分利用CSS的继承特性,导致代码冗余。

  7. 未使用CSS预处理器:对于大型项目,不使用Sass或Less等工具,失去了代码复用和管理的便利。

  8. 滥用绝对定位:过度使用position: absolute,可能导致布局在不同屏幕尺寸下出现问题。

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

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

相关文章

【C++】深入理解C语言中的特殊字符处理与问题分析优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目&#xff1a;B2090 年龄与疾病输入格式输出格式输入输出样例 &#x1f4af;初始代码分析与问题排查问题点分析 &#x1f4af;修正后的代码与优化修正与优化要点 &#…

面试题解,JVM中的“类加载”剖析

一、JVM类加载机制说一下 其中&#xff0c;从加载到初始化就是我们的类加载阶段&#xff0c;我们逐一来分析 加载 “加载 loading”是整个类加载&#xff08;class loading&#xff09;过程的一个阶段&#xff0c;加载阶段JVM需要完成以下 3 件事情&#xff1a; 1&#xff0…

vue路由模式面试题

vue路由模式 1.路由的模式有哪些?有什么区别? history和hash模式 区别: 1.表现的形态不同: 在地址栏url中:hash模式中带有**#**号,history没有 2.请求错误时表现不同: 在hash模式中,对于404地址请求时,不会进行请求 但是在history模式中,对于404请求时,仍然会进行请求…

构建一个rust生产应用读书笔记7-确认邮件3

设计架构思路 从前面的学习过程中&#xff0c;我们从单一文件测试套件发展到模块化测试套件&#xff0c;并构建了一套强大的辅助工具&#xff0c;这是一个非常重要的进展。个人认为测试代码和应用代码一样&#xff0c;是一个持续进化的过程。随着项目的不断成长&#xff0c;测…

默认ip无法访问,利用dhcp功能获取ip进行访问的方法

应用场景&#xff1a; ac的默认ip如192.168.1.1在pc与ac的eth2以后网口直连无法ping通&#xff0c;而且pc改为dhcp自动获取ip也获取不到ip地址&#xff0c;无法进行web配置和命令行操作。 原因是ac或其他设备被修改了默认ip或者对应端口所属vlanid&#xff0c;现在的端口vlan…

redis的集群模式与ELK基础

一、redis的集群模式 1.主从复制 &#xff08;1&#xff09;概述 主从模式&#xff1a;这是redis高可用的基础&#xff0c;哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从服务器&#xff…

大脑特训,自信 “满格”

编辑&#xff1a;念小艺 在追求自信的漫漫长路上&#xff0c;诸多因素如同闪耀的星光&#xff0c;为人们指引着方向。保持良好的饮食习惯&#xff0c;让身体摄取充足且均衡的营养&#xff0c;为精神的饱满提供坚实后盾&#xff1b;持续投身于锻炼之中&#xff0c;在挥洒汗水的…

渗透测试-非寻常漏洞案例

声明 本文章所分享内容仅用于网络安全技术讨论&#xff0c;切勿用于违法途径&#xff0c;所有渗透都需获取授权&#xff0c;违者后果自行承担&#xff0c;与本号及作者无关&#xff0c;请谨记守法. 此文章不允许未经授权转发至除先知社区以外的其它平台&#xff01;&#xff0…

计算机的发展、计算机基本组成原理

计算机系统 软件 硬件 硬件的发展 软件的发展 低级语言&#xff1a;机器语言、汇编语言 一、早期冯诺依曼机的结构 存储程序&#xff1a;将指令以二进制代码事先输入计算机的主存储器 在计算机系统软件和硬件是等效的 软件&#xff1a;数据 程序 硬件&#xff1a; 存储器、…

公共数据授权运营系统建设手册(附下载)

在全球范围内&#xff0c;许多国家和地区已经开始探索公共数据授权运营的路径和模式。通过建立公共数据平台&#xff0c;推动数据的开放共享&#xff0c;促进数据的创新应用&#xff0c;不仅能够提高政府决策的科学性和公共服务的效率&#xff0c;还能够激发市场活力&#xff0…

[极客大挑战 2019]HardSQL 1

看了大佬的wp&#xff0c;没用字典爆破&#xff0c;手动试出来的&#xff0c;屏蔽了常用的关键字&#xff0c;例如&#xff1a;order select union and 最搞的是&#xff0c;空格也有&#xff0c;这个空格后面让我看了好久&#xff0c;该在哪里加括号。 先传入1’ 1试试&#…

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer 一、Cocoa Touch Layer 简介二、Cocoa Touch Layer 的核心功能1. UIKit2. Event Handling&#xff08;事件处理&#xff09;3. Multitasking&#xff08;多任务处理&#xff09;4. Push Notifications&#xff08;推送通知&…

STM32烧写失败之Contents mismatch at: 0800005CH (Flash=FFH Required=29H) !

一&#xff09;问题&#xff1a;用ULINK2给STM32F103C8T6下载程序&#xff0c;下载方式设置如下&#xff1a; 出现下面两个问题&#xff1a; 1&#xff09;下载问题界面如下&#xff1a; 这个错误的信息大概可以理解为&#xff0c;在0x08000063地址上读取到flash存储为FF&am…

使用命令行管理git项目

# 初始化一个新的Git仓库 git init # 添加文件到暂存区 git add <file> # 提交暂存区的更改到仓库 git commit -m "commit message" # 查看当前仓库的状态 git status # 查看提交历史 git log # 查看文件的改动 git diff <file> # 创建一个新…

论文笔记PhotoReg: Photometrically Registering 3D Gaussian Splatting Models

1.abstract 最近推出的3D高斯飞溅(3DGS)&#xff0c;它用多达数百万个原始椭球体来描述场景&#xff0c;可以实时渲染。3DGS迅速声名鹊起。然而&#xff0c;一个关键的悬而未决的问题仍然存在&#xff1a;我们如何将多个3DG融合到一个连贯的模型中&#xff1f;解决这个问题将使…

javaEE-网络原理-1初识

目录 一.网络发展史 1.独立模式 2.网络互联 二.局域网LAN 1.基于网线直连&#xff1a; 2.基于集线器组件&#xff1a; 3.基于交换机组件&#xff1a; 4.基于交换机和路由器组件 ​编辑 三、广域网WAN 四、网络通信基础 1.ip地址 2.端口号&#xff1a; 3.协议 4.五…

电子电气架构 --- 整车整车网络管理浅析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

xml格式化(3):增加头部声明

前言 这篇文章&#xff0c;是用来增加头部声明。 正文 from lxml import etreedef pretty_print(element, level0, indent" "):result ""# 判断元素是否为注释节点if isinstance(element, etree._Comment):result f"{indent * level}<!--{el…

STM32 高级 物联网通讯之LoRa通讯

目录 LoRa通讯基础知识 常见的3种通讯协议 远距离高速率的传输协议 近距离高速率传输技术 近距离低功耗传输技术 低功耗广域网 采用授权频段技术 非授权频段 LoRa简介 LoRa的特点 远距离 低功耗 安全 标准化 地理定位 移动性 高性能 低成本 LoRa应用 LoRa组…

【FlutterDart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)

上效果 预期的是通过拖动一条边界线改变窗口大小&#xff0c;类似vscode里拖动效果。这个是简单的拖动实现 上代码&#xff1a; import package:flutter/material.dart;class MyDraggableViewDemo extends StatelessWidget {const MyDraggableViewDemo({super.key});override…