ul列表中包含input时line-height属性失效的解决办法

为什么<UL>列表含<input>控件时,行高属性在IE6.0下失效?FF2.0下正常。这是一个不常见的问题,我们不提倡这样的布局方式,input元素尽可能的使用lable标签而不是包含于ul的li标签中。但在实际操作中,也可能存在这样的情况,我们就ul列表中包含input时line-height属性失效的问题作一些探讨。

  我们知道input标签是一个block元素,也就是一个块元素,而line-height只可以应用于inline行内元素。所以line-height属性的设置对input元素是无效的。我们看下面的代码:

 Source Code to Run [www.52css.com]

     [ 可先修改部分代码 再运行查看效果 ]

  CSS模板下载所在的li标签及input元素,行高明显的小于40px。因为input是block元素无line-height属性可言。我们只能通过变通的方法来解决问题。

  首先我们定义好input标签的外观,即他的宽度与高度。然后设置边距,使其达到与其它li列表项同样行高的视觉效果,而不是通过line-height属性来实现。

 Example Source Code [www.52css.com]
input {
    border:1px solid #666;
    width:120px;
    height:20px;
    margin:10px 0;
    vertical-align:middle;
    line-height:20px;
}

  我们定义input元素的边框为一象素的灰色实线。宽度与高度分别是120px与20px。我们定义的li列表项的行高为40px。要使input元素如其它列表项一样,则设置input元素的上下边距为10px。即达到了行距为40px的效果。但这样会造成“CSS模板下载”与input标签水平不对齐,我们设置vertical-align:middle。使得文字与输入框水平对齐。关于vertical-align:middle的相关知识,请参考本站相关文章。心细的你或许会发现,我们这里也设置了line-height属性,值是20px。这里的line-height属性设置是input输入文字的行高,我们这样设置,可以使输入文字在输入框垂直居中。
   通过此例,我们应该注意区分不同的属性所能作用的对象,line-height属性是inline元素所拥有的,对于block元素是不起作用的。我们看最终的运行效果:

 Source Code to Run [www.52css.com]

     [ 可先修改部分代码 再运行查看效果 ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3的可编辑列表可以使用v-for指令和v-model指令来实现。如果列表包含不同类型的表单元素,我们需要在模板根据不同的类型渲染不同的表单元素。下面是一个包含input、el-select、el-switch和el-time-picker的可编辑列表的示例: HTML代码: ```html <template> <div> <ul> <li v-for="(item, index) in list" :key="index"> <div v-if="item.type === 'input'"> <input type="text" v-model="item.value" @blur="updateItem(index)"> </div> <div v-else-if="item.type === 'select'"> <el-select v-model="item.value" @change="updateItem(index)"> <el-option v-for="(option, optionIndex) in item.options" :key="optionIndex" :label="option.label" :value="option.value"></el-option> </el-select> </div> <div v-else-if="item.type === 'switch'"> <el-switch v-model="item.value" @change="updateItem(index)"></el-switch> </div> <div v-else-if="item.type === 'time-picker'"> <el-time-picker v-model="item.value" @change="updateItem(index)"></el-time-picker> </div> <button @click="deleteItem(index)">删除</button> </li> </ul> <button @click="addItem('input')">添加输入框</button> <button @click="addItem('select')">添加下拉框</button> <button @click="addItem('switch')">添加开关</button> <button @click="addItem('time-picker')">添加间选择器</button> </div> </template> ``` JavaScript代码: ```javascript export default { data() { return { list: [ { type: 'input', value: 'Apple' }, { type: 'select', value: '1', options: [ { label: '选项1', value: '1' }, { label: '选项2', value: '2' }, { label: '选项3', value: '3' }, ] }, { type: 'switch', value: true }, { type: 'time-picker', value: '12:00' } ] } }, methods: { addItem(type) { let item = {} if (type === 'input') { item = { type: 'input', value: '' } } else if (type === 'select') { item = { type: 'select', value: '', options: [ { label: '选项1', value: '1' }, { label: '选项2', value: '2' }, { label: '选项3', value: '3' }, ] } } else if (type === 'switch') { item = { type: 'switch', value: false } } else if (type === 'time-picker') { item = { type: 'time-picker', value: '' } } this.list.push(item) }, deleteItem(index) { this.list.splice(index, 1) }, updateItem(index) { if (!this.list[index].value) { this.list.splice(index, 1) } } } } ``` 在这里,我们使用v-for指令循环遍历列表的每个项目,并根据项目的类型渲染不同的表单元素。当用户添加或删除项目,我们在JavaScript代码添加了对应的方法,以便更新列表数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值