CSS揭秘实战技巧 - 结构与布局[六]

全目录

本系列文章,主要是围绕css3属性,实现我们常见的各种效果,这些效果都是我们实战开发中经常可以用到的效果:

  1. css揭秘实战技巧- 背景与边框 [一]
  2. css揭秘实战技巧- 形状 [二]
  3. css揭秘实战技巧 - 视觉效果[三]
  4. css揭秘实战技巧 - 字体排印[四]
  5. css揭秘实战技巧 - 用户体验[五]
  6. css揭秘实战技巧 - 结构与布局[六]
  7. css揭秘实战技巧 - 过渡与动画[七]

前言

  1. 自适应内部元素
  2. 精确控制表格列宽
  3. 根据兄弟元素的数量来设置样式
  4. 满幅的背景,定宽的内容
  5. 紧贴底部的页脚

一:自适应内部元素

首先,我们看一下想要得到的效果:

基本的html结构如下:

<div>
    <img src="./img/kobe3.png" alt="">
    <p>科比布莱恩特,一个伟大的时代,一个伟大的球员,还有一群伟大的球迷</p>
</div>
复制代码

如果没有设置任何样式时,效果如下:

如何让文字去自适应图片的宽度呢?这就是问题的关键点了,如何让元素去自适应内部元素?而不是去自适应它的父元素呢?答案就是width: min-content: 表示该元素的宽度将被解析为它内部最大的不可断行的元素的宽度(例如:最宽的单词,图片,或者具有固定宽度的盒元素)

代码如下:

div {
    width: min-content;//表示该div的宽度是由内部最大的不可断行元素的宽度所决定
}
复制代码

由于min-content是css3特性,部分浏览器可能不支持,所以我们需要一个平稳的回退方案,那就是提供一个固定的max-width值

div {
    max-width: 300px;
    max-width: min-content;
}
div img{
    max-width: inherit;
}
复制代码

二:精确控制表格列宽

大家在实际开发的过程中,尤其是后台管理系统,表格的使用会非常频繁,但是对于,表格的宽的控制,可能有时候并没有达到我们想要的效果,原因可能还是我们对于表格的相关属性不是很清楚,尤其是table-layout:auto/fixed;

  1. auto为默认值,表示自适应单元格中的内容,此时设置宽度无效。
  2. fixed表示均等分割,即宽度是等分均分的,当然,我们也可以设置宽度。

首先,我们看一下auto的效果:

代码如下:

//html
<table>
    <tr>
        <th>序号</th>
        <th>文案1</th>
        <th class="third">文案2</th>
        <th>操作</th>
    </tr>
    <tr>
        <td>1</td>
        <td>科比布莱恩特,一个伟大的时代,一个伟大的球员,还有一群伟大的球迷</td>
        <td class="third">科比布莱恩特,一个伟大的时代,一个伟大的球员,还有一群伟大的球迷科比布莱恩特,一个伟大的时代,一个伟大的球员,还有一群伟大的球迷科比布莱恩特,一个伟大的时代,一个伟大的球员,还有一群伟大的球迷</td>
        <td>
            <a href="">编辑</a>
        </td>
    </tr>
</table>
复制代码
//css
table{
    width: 800px;
    border-collapse: collapse;
    width: 100px;// 此时设置了宽度也不会生效,因为此时table-layout为auto。
}
table tr td, table tr th {
    border: 1px solid #ddd;
}
复制代码

那我们在上面的基础上,给table加一个table-layout:fixed,效果如下:

此时,我们看到部分单元格文本较多,如何隐藏呢?这时,我们可以用text-overflow:ellipsis , 该属性要同时配合:overflow:hidden;white-space:nowrap;以及一个指定的宽度才可以生效。 代码如下:

table{
    width: 800px;
    border-collapse: collapse;
    table-layout: fixed;
}
table tr td, table tr th {
    border: 1px solid #ddd;
}
table tr th:nth-child(3) {
    width: 100px; 
}
table tr td:nth-child(3) {
    width: 100px;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}
复制代码

最终的效果如下:

此时,有个细节要注意:我们直接设置td的宽度为100px,效果是没有生效的,必须设置th的宽度为100px,单元格的宽度才生效。

这是因为table渲染的时候,一般是根据第一行的样式去渲染,此时第一行是th构成的,所以此时th没有设置宽度,即使td设置了宽度,渲染的时候同一列的其他单元格还是根据th去渲染,所以此处,我们直接设置td的宽度是无效的,当然大家也可以把th构成的这一行删掉,然后再设置td的宽度,这时就可以生效了,因为此时第一行就是td构成的

三:根据兄弟元素的数量来设置样式

我们在实际开发过程中,也会遇到下面这种场景:我们需要根据兄弟元素的数量去设置不同的样式。

那么我们就来看看这种效果到底该如何通过css去实现呢?

html结构如下:

<ul>
    <li></li>
    <li></li>
    <li></li>
    //可能有更多或者更少
</ul>
复制代码
  1. 首先我们看一下:only-child
li:only-child {
    //表示只有一个子元素的时候的样式
}
复制代码
  1. :first-child:last-child
li:first-chlid:last-chlid {
    //表示元素是第一个元素,同时又是最后一个元素,说明此时只有一个子元素
}
复制代码
  1. 接着上面的思路:
li:first-child:nth-last-child(4){
    //表示第一个元素又是倒数第四个元素,说明此时有四个子元素。
}
复制代码

好啦,这个时候,我们就知道了,怎么样在css判断兄弟元素的数量。

  1. 接下来,我们实现一个效果: 有四个或者四个以上元素,且第一个为绿色,从第二个开始其他为红色
ul li {
    display: inline-block;
    width: 50px;
    height: 60px;
    background: green;
    margin: 10px;
}
ul li:first-child:nth-last-child(n + 4) ~ li{
    background: red;
}
复制代码

实现的效果如下:

  1. 再进一步,指定一下范围,有2个到4个子元素的时候,设置为红色 代码如下:
ul li {
    display: inline-block;
    width: 50px;
    height: 60px;
    background: green;
    margin: 10px;
}
ul li:first-child:nth-last-child(n + 2):nth-last-child(-n + 4) ~ li{
    background: red;
}
复制代码

此时,如果ul下面有2到4个li时,就会应用我们的样式,否则不会。

四:满幅的背景,定宽的内容

首先,我们看一下一个最常见的页脚的效果:背景铺满整个宽度,内容居中

上面的效果就是我们标题所说的:满幅的背景,定宽的内容,通常遇到这种效果,我们最直接的解决方案可能就是:外面一层div设置背景,里面再嵌套一个div显示内容,然后设置里面的div居中显示,就这样实现了,这可能也是大多数人的思路,那么,如果只是用一层div去实现呢? 代码如下:

div {
    backgroud: #333;
    padding: 10px;//部分浏览器不支持calc回退方案
    padding: 10px calc(50% - 450px); // 此时,我们设置的中间内容区域定宽是900px
}
复制代码

五:紧贴底部的页脚

首先,html结构如下:

<header>
    <p>头部1</p>
    <p>头部2</p>
</header>
<main>
    内容
</main>
<footer>
    <p>尾部1</p>
    <p>尾部3</p>
</footer>
复制代码
1. 固定高度的页脚
header {
    height: 60px;
    background: green;
}
main {
    min-height: calc(100% - 60px - 100px);
    background: #ddd;

}
footer {
    height:  100px;
    background: cornflowerblue;
}
复制代码
2. 高度不固定,根据内容自适应高度的页脚
body {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}
header{
    background: green;
}
main {
    background: #ddd;
    flex: 1;
}
footer{
    background: cornflowerblue;
}
复制代码

转载于:https://juejin.im/post/5cbdb144f265da038d0b4452

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值