书写模式与逻辑属性

书写模式

  绝大多数国家的阅读方式都是从左到右进行的,但是也有一小部分国家的阅读方式,可能是从右向左或从上到下。比如阿拉伯国家就是从右向左进行阅读的,所以在网页排版的时候,就要考虑到这个情况,尤其是做国际站的同学们。

  书写模式即writing-mode属性,可以帮助以上下阅读的国家去展示网页内容。它定义了文本水平或垂直排布以及在块级元素中文本的行进方向。

  可选值有:

  • horizontal-tb 水平方向自上而下的书写方式
  • vertical-rl 垂直方向自右而左的书写方式
  • vertical-lr 垂直方向自左而右的书写方式
  • sideways-rl 内容垂直方向从上到下排列
  • sideways-lr 内容垂直方向从下到上排列

  注:目前sideways-rl和sideways-lr的兼容性并不是很好。

逻辑属性

  如果一套代码想实现国际化,处理不同国家的排版方式时,就会导致无法实现。代码如下:

<style>
body{
    border:1px black solid;
    height:100px;
}
div{
    border:1px red solid;
    float:left;
    margin-left:30px;
}
</style>
<div>hello world</div>
<div>hello world</div>

  接下来给body添加垂直方向自左而右的书写方式,可以发现布局出现了混乱,height属性依然只针对高度,而margin-left属性也依然只针对左间距。

body{
    border:1px black solid;
    height:100px;
    writing-mode:vertical-lr;  /* 新增样式 */
}

  那么如何更好的处理不同的书写模式呢?就要配合逻辑属性了。逻辑属性是从逻辑角度控制布局,而不是从物理、方向或维度来控制。

  简单来说,物理属性和值指的是width、height、left、top、right、bottom等值;而逻辑属性和值指的是start、end、inline-start、inline-end、block-start、block-end等值。其中block表示垂直方向,inline表示水平方式,在不同的书写模式下,block和inline所代表的方向是会发生变化的。理解逻辑属性对于后面章节中理解弹性布局和网格布局也有非常大的帮助。

  下面用逻辑属性和值修改一下之前代码中出现的问题。

body{
    border:1px black solid;
    block-size:100px;    /* 修改样式 height:100px; */
    writing-mode:vertical-lr;  
}
div{
    border:1px red solid;
    float:left;
    margin-inline-start:30px;    /* 修改样式 margin-left:30px; */
}

  下面再举一个例子

<style>
section {
    text-align: start;  /* start 逻辑值 */
}
h2 {
    border-inline-start: .3em solid #ccc;    /* border-inline-start 逻辑属性 */
    padding-inline-start: .5em;     /* padding-inline-start 逻辑属性 */
}
</style>
<section dir="auto">
    <h2>第一章<h2>
    <div>本章介绍了逻辑属性和逻辑值,这是一个演示示例。div>
<section>
<section dir="auto">
    <h2>الفصل الأول<h2>
    <div>يقدم هذا الفصل القيم المنطقية والمنطقية ، والتي هي مثال توضيحي.div>
<section>

  注:dir属性可以设置元素的显示方向,是从左往右(ltr),还是从右往左(rtl),当设置auto时会自动根据当前语言决定排列方向,dir属性非常适合那些从右向左进行阅读的国家,例如:阿拉伯语,波斯语,希伯来语等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速排序(Quick Sort)是一种常用的排序算法,其基本思想是通过选择一个元素作为基准(通常选择第一个元素),将数组分割为两部分,使得左边的元素都小于等于基准值,右边的元素都大于等于基准值,然后递归地对左右两部分进行排序。 下面是Python快速排序的实现逻辑: 1. 定义一个函数 quicksort,接受一个数组参数 arr 和两个整数参数 low、high 分别表示待排序部分的起始索引和结束索引。 2. 在函数内部,首先判断如果 low 大于等于 high,则说明待排序部分只有一个元素或者为空,直接返回。 3. 否则,选择数组的第一个元素 arr[low] 作为基准值。 4. 定义两个指针 i 和 j,分别指向待排序部分的起始位置和结束位置。 5. 从 j 开始向前遍历,直到找到一个小于等于基准值的元素,将其与 arr[i] 交换,并更新指针 i。 6. 从 i 开始向后遍历,直到找到一个大于等于基准值的元素,将其与 arr[j] 交换,并更新指针 j。 7. 重复步骤 5 和步骤 6,直到 i 和 j 相遇。 8. 将基准值 arr[low] 与 arr[j] 交换,此时基准值的位置已经确定。 9. 递归地对基准值左边的部分(即 arr[low:j-1])和右边的部分(即 arr[j+1:high])进行排序,调用 quicksort 函数。 10. 完成排序后,返回排序后的数组。 以下是快速排序的Python代码实现: ```python def quicksort(arr, low, high): if low >= high: return pivot = arr[low] i = low j = high while i < j: while i < j and arr[j] >= pivot: j -= 1 arr[i] = arr[j] while i < j and arr[i] <= pivot: i += 1 arr[j] = arr[i] arr[i] = pivot quicksort(arr, low, i-1) quicksort(arr, i+1, high) return arr # 示例 arr = [4, 2, 7, 1, 3] sorted_arr = quicksort(arr, 0, len(arr)-1) print(sorted_arr) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值