html、css技巧集锦
html css 实现文字竖排、不允许用户修改元素如多行文本框内的文本、根据输入内容行数多少自适应调节高度的例子
一、html css 实现文字竖排
CSS(层叠样式表)的writing-mode 属性定义了文本水平或垂直排布以及在块级元素中文本的行进方向。writing-mode - CSS(层叠样式表) | MDN
设置CSS样式 writing-mode 属性为 vertical-rl 或 vertical-lr ,适用于多列竖排文字显示
其中,writing-mode: vertical-rl;为从左到右显示;writing-mode: vertical-lr;为从右到左显示
如:
p{
writing-mode: vertical-rl;
height: 100px;
}
例1、完整的示例,源码如下:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta charset="UTF-8">
</head>
<style>
p{
writing-mode: vertical-rl;
height: 100px;
}
</style>
<body>
<p>这是多列文本竖排显示这是多列文本竖排显示这是多列文本竖排显示</p>
</body>
</html>
运行效果如下图:
例2、源码如下:
<!DOCTYPE html>
<html>
<head>
<title>testB</title>
<meta charset="UTF-8">
</head>
<style>
.one {
font-size:26px;
color:#06F;
margin: 0 auto;
height: 280px;
writing-mode: vertical-rl;
}
.one span{
color:red;
font-size:32px;
vartical-align:middle;
}
</style>
<body>
<div class="one">
<span>月下独酌 李白</span>
<br/>
花间一壶酒,独酌无相亲。举杯邀明月,对影成三人。
月既不解饮,影徒随我身。暂伴月将影,行乐须及春。
我歌月徘徊,我舞影零乱。醒时同交欢,醉后各分散。
永结无情游,相期邈云汉。
</div>
</body>
</html>
运行效果如下图:
二、不允许用户修改元素内文本
有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,使用属性readonly,将其设置为readonly="true",不允许用户修改元素内文本。下面以多行文本框textarea为例介绍。
先了解一下textarea的属性:
1、cols,垂直列。在没有做样式表设置的情况下,它表示一行中可容纳下的字节数。例如cols=60,表示一行中最多可容纳60个字节,也就是30个汉字。另外要注意的是,文本框的宽度就是通过这个来调整,输入好cols的数值,然后再定义输入文字字体的大小(不定义的话,会采用默认值),那么文本框的宽度就确定了。
2、rows,水平列。表示可显示的行数,例如rows=10,表示可显示10行。超过10行,则需要拖动滚动条来浏览了。(同上,文本框的高度就是通过这个来控制的。)
3、name,文本框的名称,这项必不可省,因为存储文本的时候必须用到。
4、warp,当warp="off"表示该文本区域中不自动换行,当然不写默认是自动换行的。这个参数一般用得比较少。
5、style,这是个非常实用的参数,可以用来设置文本框的背景色,滚动条颜色及形式,边框色,输入字体的大小颜色等等。
6、class,一般用来调用外部css里边的设置。
例1、让textarea框不可编辑,源码如下:
<!DOCTYPE html>
<html>
<head>
<title>textarea标签示例</title>
<meta charset="UTF-8">
</head>
<body>
<textarea cols=23 rows=10 readonly="true">
月下独酌
李白
花间一壶酒,独酌无相亲。举杯邀明月,对影成三人。
月既不解饮,影徒随我身。暂伴月将影,行乐须及春。
我歌月徘徊,我舞影零乱。醒时同交欢,醉后各分散。
永结无情游,相期邈云汉。
</textarea>
</body>
</html>
运行效果如下图:
将本例的源码改进如下:
<!DOCTYPE html>
<html>
<head>
<title>textarea标签示例B</title>
<meta charset="UTF-8">
</head>
<style>
#text_area{
font-size:26px;
color:#06F;
text-align:center;
}
</style>
<body>
<textarea cols=23 rows=10 id="text_area" readonly="true">
月下独酌
李白
花间一壶酒,独酌无相亲。举杯邀明月,对影成三人。
月既不解饮,影徒随我身。暂伴月将影,行乐须及春。
我歌月徘徊,我舞影零乱。醒时同交欢,醉后各分散。
永结无情游,相期邈云汉。
</textarea>
</body>
</html>
运行效果如下图:
三、根据输入内容行数多少自适应调节高度的例子
参考textarea高度自适应自动增高撑开_何家大少的博客-CSDN博客_textarea高度自动撑开
法一、这个写法需要用多行文本框textarea和JS脚本代码,源码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8" />
<title>多行文本框textarea根据输入内容自适应高度</title>
<style type="text/css">
h2{
text-align: center;
margin:50px auto;
}
#textarea {
display: block;
margin:0 auto;
overflow: hidden;
width: 550px;
font-size: 14px;
height: 18px;
line-height: 24px;
padding:2px;
}
textarea {
outline: 0 none;
border-color: rgba(82, 168, 236, 0.8);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
}
</style>
<script>
/**
* 文本框根据输入内容自适应高度
*/
var autoTextarea = function (elem, extra, maxHeight) {
extra = extra || 0;
var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
addEvent = function (type, callback) {
elem.addEventListener ?
elem.addEventListener(type, callback, false) :
elem.attachEvent('on' + type, callback);
},
getStyle = elem.currentStyle ? function (name) {
var val = elem.currentStyle[name];
if (name === 'height' && val.search(/px/i) !== 1) {
var rect = elem.getBoundingClientRect();
return rect.bottom - rect.top -
parseFloat(getStyle('paddingTop')) -
parseFloat(getStyle('paddingBottom')) + 'px';
};
return val;
} : function (name) {
return getComputedStyle(elem, null)[name];
},
minHeight = parseFloat(getStyle('height'));
elem.style.resize = 'none';
var change = function () {
var scrollTop, height,
padding = 0,
style = elem.style;
if (elem._length === elem.value.length) return;
elem._length = elem.value.length;
if (!isFirefox && !isOpera) {
padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));
};
scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
elem.style.height = minHeight + 'px';
if (elem.scrollHeight > minHeight) {
if (maxHeight && elem.scrollHeight > maxHeight) {
height = maxHeight - padding;
style.overflowY = 'auto';
} else {
height = elem.scrollHeight - padding;
style.overflowY = 'hidden';
};
style.height = height + extra + 'px';
scrollTop += parseInt(style.height) - elem.currHeight;
document.body.scrollTop = scrollTop;
document.documentElement.scrollTop = scrollTop;
elem.currHeight = parseInt(style.height);
};
};
addEvent('propertychange', change);
addEvent('input', change);
addEvent('focus', change);
change();
};
</script>
</head>
<body>
<h2>多行文本框textarea根据输入内容自适应高度</h2>
<textarea id="textarea" placeholder="回复内容"></textarea>
<script>
var text = document.getElementById("textarea");
autoTextarea(text);// 调用
</script>
</body>
</html>
运行效果如下图:
法二、这个写法用div模拟textarea文本域轻松实现高度自适应,比法一简便,源码如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>用div模拟textarea文本域轻松实现高度自适应</title>
<style>
h2{
text-align: center;
margin:50px auto;
}
.test_box {
width: 400px;
min-height: 20px;
max-height: 300px;
_height: 120px;
margin-left: auto;
margin-right: auto;
padding: 3px;
outline: 0;
border: 1px solid #a0b3d6;
font-size: 12px;
line-height: 24px;
padding: 2px;
word-wrap: break-word;
overflow-x: hidden;
overflow-y: auto;
border-color: rgba(82, 168, 236, 0.8);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
}
</style>
</head>
<body>
<h2>用div模拟textarea文本域轻松实现高度自适应</h2>
<div class="test_box" contenteditable="true"><br /></div>
</body>
</html>
运行效果如下图: