美文网首页
css-进阶-css开发技巧-Layout Skill:布局技巧

css-进阶-css开发技巧-Layout Skill:布局技巧

作者: 逸笛 | 来源:发表于2021-03-23 13:57 被阅读0次

Layout Skill

使用vw定制rem自适应布局

  • 要点:移动端使用rem布局需要通过JS设置不同屏幕宽高比的font-size,结合vw单位和calc()可脱离JS的控制
  • 场景:rem页面布局(不兼容低版本移动端系统)
  • 兼容:vwcalc()
/* 基于UI width=750px DPR=2的页面 */
html {
    font-size: calc(100vw / 7.5);
}

使用:not()去除无用属性

  • 要点:通过:not()排除指定元素不使用设置样式
  • 场景:符号分割文字边界元素排版(首元素、尾元素、左右两边元素)
  • 兼容::not()
<div class="bruce flex-ct-x" data-title="使用:not()去除无用属性">
    <ul class="cleared-attr">
        <li class="first-line">
            <span>A</span>
            <span>B</span>
            <span>C</span>
            <span>D</span>
            <span>E</span>
        </li>
        <li class="second-line">
            <span>A</span>
            <span>B</span>
            <span>C</span>
            <span>D</span>
            <span>E</span>
        </li>
    </ul>
</div>

关键CSS

.first-line span:not(:last-child)::after {
  content: ",";
}
.second-line span:not(:nth-child(-n+3)) {
  display: none;
}
图片.png

使用writing-mode排版竖文

  • 要点:通过writing-mode调整文本排版方向
  • 场景:竖行文字文言文诗词
  • 兼容:writing-mode
<div class="bruce flex-ct-x" data-title="使用writing-mode排版竖向文本">
    <div class="vertical-text">
        <h3>情</h3>
        <p>我见犹怜,<br>爱不释手。<br>雅俗共赏,<br>君子好逑。</p>
    </div>
</div>
.vertical-text {
    writing-mode: vertical-rl;
    h3 {
        padding-left: 20px;
        font-weight: bold;
        font-size: 18px;
        color: #f66;
    }
    p {
        line-height: 30px;
        color: #66f;
    }
}
图片.png

使用object-fit规定图像尺寸

  • 要点:通过object-fit使图像脱离background-size的约束,使用<img>来标记图像背景尺寸
  • 场景:图片尺寸自适应
  • 兼容:object-fit

object-fit: fill|contain|cover|scale-down|none|initial|inherit;

<li>
  <h3>ScaleDown</h3>
  <img class="scale-down" src="https://static.yangzw.vip/codepen/ab-2.jpg">
</li>
img {
  width: 100%;
  height: 260px;
  background-color: #3c9;
  &.cover {
    object-fit: cover; // 保持原有尺寸比例。但部分内容可能被剪切
  }
  &.contain {
    object-fit: contain; // 保持原有尺寸比例。内容被缩放。
  }
  &.fill {
    object-fit: fill; // 默认,不保证保持原有的比例,内容拉伸填充整个内容容器。
  }
  &.scale-down {
    object-fit: scale-down; // 保持原有尺寸比例。内容的尺寸与 none 或 contain 中的一个相同,取决于它们两个之间谁得到的对象尺寸会更小一些。
  }
}
图片.png

使用overflow-x排版横向列表

  • 要点:通过flexboxinline-block的形式横向排列元素,对父元素设置overflow-x:auto横向滚动查看
  • 场景:横向滚动列表元素过多但位置有限的导航栏
  • 兼容:overflow-x
<div class="bruce flex-ct-y" data-title="使用overflow-x排版横向列表">
    <div class="horizontal-list flex">
        <ul>
            <li>Alibaba</li>
            <li>Tencent</li>
            <li>Baidu</li>
            <li>Jingdong</li>
            <li>Ant</li>
            <li>Netease</li>
            <li>Meituan</li>
            <li>ByteDance</li>
            <li>360</li>
            <li>Sina</li>
        </ul>
    </div>
    <div class="horizontal-list inline">
        <ul>
            <li>Alibaba</li>
            <li>Tencent</li>
            <li>Baidu</li>
            <li>Jingdong</li>
            <li>Ant</li>
            <li>Netease</li>
            <li>Meituan</li>
            <li>ByteDance</li>
            <li>360</li>
            <li>Sina</li>
        </ul>
    </div>
</div>
.horizontal-list {
    overflow: hidden;
    width: 300px;
    height: 100px;
    & + .horizontal-list {
        margin-top: 10px;
    }
    ul {
        overflow-x: auto;
        cursor: pointer;
        &::-webkit-scrollbar {
            height: 10px;
        }
        &::-webkit-scrollbar-track {
            background-color: #f0f0f0;
        }
        &::-webkit-scrollbar-thumb {
            border-radius: 5px;
            background-color: #f66;
        }
    }
    li {
        overflow: hidden;
        height: 90px;
        background-color: #66f;
        line-height: 90px;
        text-align: center;
        font-size: 16px;
        color: #fff;
        & + li {
            margin-left: 10px;
        }
    }
    &.flex {
        ul {
            display: flex; 
            flex-wrap: nowrap;
            justify-content: space-between;
        }
        li {
            flex-shrink: 0;
            flex-basis: 90px;
        }
    }
    &.inline {
        height: 102px;
        ul {
            overflow-y: hidden;
            white-space: nowrap;
        }
        li {
            display: inline-block;
            width: 90px;
        }
    }
}

使用text-align-last对齐两端文本

  • 要点:通过text-align-last:justify设置文本两端对齐
  • 场景:未知字数中文对齐
  • 兼容:text-align-last
<div class="bruce flex-ct-x" data-title="使用text-align-last对齐两端文本">
    <ul class="justify-text">
        <li>账号</li>
        <li>密码</li>
        <li>电子邮件</li>
        <li>通讯地址</li>
    </ul>
</div>
.justify-text {
    li {
        padding: 0 20px;
        width: 100px;
        height: 40px;
        background-color: #f66;
        line-height: 40px;
        text-align-last: justify;
        color: #fff;
        & + li {
            margin-top: 5px;
        }
    }
}

相关文章

网友评论

      本文标题:css-进阶-css开发技巧-Layout Skill:布局技巧

      本文链接:https://www.haomeiwen.com/subject/pgkfhltx.html