2.label宽度需要保持一致

168 阅读2分钟

同名b/dy有对应的视频

一个萌新问题,大致意思是期望在一个form表单中,label的宽度可以保持一致

微信图片_20240417144223.png

image.png

解决1

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .container {
        width: 100%;
        display: flex;
        justify-content: flex-start;
        align-items: center;
      }
      .item {
        width: 400px;
        height: 100px;
        border: 1px solid red;
        margin-right: 10px;
        display: flex;
        justify-content: flex-start;
        align-items: stretch;

        .labels {
          height: 100%;
          width: auto;
          display: flex;
          flex-direction: column;
          justify-content: flex-start;
          border: 1px solid green;
          margin-right: 5px;
        }

        .values {
          height: 100%;
          flex: 1;
          display: flex;
          flex-direction: column;
          justify-content: flex-start;
          border: 1px solid blue;
        }
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="item">
        <div class="labels">
          <div class="label">label</div>
          <div class="label">labellabel</div>
          <div class="label">labellabellabellabel</div>
        </div>
        <div class="values">
          <div class="value">value</div>
          <div class="value">valuevalue</div>
          <div class="value">valuevaluevaluevalue</div>
        </div>
      </div>
    </div>
  </body>
</html>

这是盘绿大佬给的解决方案,根正苗红,但萌新希望label和value的内容在一行当中,格式大概如下

image.png

解决2

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .item {
        width: 400px;
        height: 100px;
        margin-right: 10px;

        .row {
          height: 20px;
          width: 100%;
          display: table-row;
        }

        .label {
          display: table-cell;
        }

        .value {
          display: table-cell;
        }
      }
    </style>
  </head>
  <body>
    <div class="item">
      <div class="row">
        <div class="label">label:</div>
        <div class="value">value</div>
      </div>
      <div class="row">
        <div class="label">labellabel:</div>
        <div class="value">valuevalue</div>
      </div>
      <div class="row">
        <div class="label">labellabellabel:</div>
        <div class="value">valuevaluevalue</div>
      </div>
    </div>
  </body>
</html>

直接table布局,解决类似烦恼

萌新的纠结

一开始就想用table,但又觉得table不规范,知道第一种方案但又觉得嵌套很多div不够优雅,觉得不写在一起,不好维护 这种心理很正常官方都有类似的想法,即如何真的让html代表内容,完全不涉及结构/布局的那种【按照这种想法,很自然的写出了第二种html】,如果一定想这样,多看例子就行

比如这里的方案,在css揭秘中就可以找到对应的例子,他虽然提的是table-layout,但讲的就是dispaly:table的布局使用技巧

image.png

当然,这类技巧长长见识就行,不一定用的上,现在用框架,一定会涉及到js相关的操作,这种情况下css技巧已经不重要了,我们可以使用js给他捏成自己喜欢的结构

反正能靠js改,用什么结构不需要太纠结

  <card>
    <cardItem>
      <label>label:</label><info>value</info>
      <label>label222:</label><info>value</info>
    </cardItem>
  </card>