SS怎么选择除了第一个子元素外的其余同级子元素
要通过CSS的代码选择某一个元素的除了第一个子元素外的其余的跟第一个子元素同级的子元素,可以结合使用CSS的:not()伪类选择器和:nth-child()伪类选择器进行选择。大致的语法如下:
.parent > .child:not(:nth-child(1)) {样式设置}
下面的实例中除了使用上述的两种伪类选择器之外,还结合了class属性:
<div class='p'>
<div class='c'>p的第一个子元素</div>
<div class='c'>p的第二个子元素</div>
<div class='c'>p的第三个子元素</div>
</div>
<style>
.p > .c:not(:nth-child(1)){color:green;}
</style>
原文及在线编辑器:CSS怎么选择除了第一个子元素外的其余同级子元素 | CSS教程
html所有的元素拥有class属性,该属性会对元素进行分组,标识为某一组。
js中使用className属性来保存HTML的class的属性值
尽管如此,js还定义了一个方法,即一个getElementsByClassName(),是基于class属性值中的标识符来选取成组的文档元素
还有一个类似的getElementsByTagName()的方法也是获取一个组,返回的是一组的内容即NodeList。返回的是类数组。
一个使用getElementsByClassName()的例子
一个兼容,浏览器根据!doctype来进行选择怪异模式,和标准模式的,怪异模式是为了向后兼容而存在的,标准模式不是(兼容以及不太重要了,但是还要知道一点,这是ie8的问题,但愿再过几年直接win7也没有了)
css样式表可以进行选择,这里仅仅是一些常见的css选择器
h5定义了一些选择api用来通过js来选择元素
选择title元素
会返回一个类数组的 节点列表
选择一个伪元素,在css中匹配了节点一部分,而不是实际元素。
其中querySelector只会返回匹配的第一个结果,querySelectorAll将会返回全部结果,返回一个类数组。
返回一个页面上未访问的连接
选择一个已经访问过的,用来获取用户在该页面的一部分的历史记录
document.all[]
已经废弃,不在使用,所以不学习
一旦从文档中选取了一个元素,将会需要查找文档与之在结构上相关的部分,(即,父元素,子元素,兄弟元素)。温带在概念上为节点对象树。浏览器定义了一个api将会对元素对象树进行遍历
作为节点树的文档
Document对象,以及Element对象和文档中表示文本的Text对象都为Node对象,Node对象定义了一下重要的属性。
parentNode
获取该节点的父节点
childNode
只读类型数组对象(NodeList对象),它是该节点的子节点的实时表示
firstChild, lastChild
该节点的子节点中的第一个和最后一个
nextSibling,previousSibling
该节点的兄弟节点中的前一个和下一个
nodeType
该节点的类型
一些类 继承(基类,父类,超类),派生类,子类
这里以c++为栗子 :基类,父类,超类,指被继承的类,派生类,子类指继承于基类的类,在C++中冒号表示继承,入classA:public:B 表示派生类A从基类B继承而来。派生类包含基类的所有成员,还包括自身的特有成员,由于继承关系的存在,派生类和派生类对象访问基类中的成员就像访问自己的成员一样。可以直接使用,但是派生类,仍旧无法访问基类中的私有成员。C++派生类可以同时从多个基类继承,java不允许多重继承,当继承多个基类的时候,使用,运算符将基类进行分开。
Element
Element是一个通用的基类,所有的Document都继承自Element
例如
属于一个由Element基类继承的Document的一个节点
text节点
文字内容,即匿名文字所成的节点。
Comment节点
属于注释的节点
Document 节点
一个已经加载好的网页,并通过入口来操作网页的内容
DocumentType节点
一个声明节点
DocumentFragment 节点
表示一个没有父级文件的最小文档对象。它被当做一个轻量版的 Document 使用
nodeValue
text节点或者Comment节点文本内容
nodeName
元素的标签名,以大写输出
一个栗子
控制台输入
返回
表示
该html
继续重新加载,重新输入
继续去掉唯一的换行符
继续在控制台输入
返回body
说明是换行符的问题导致
https://stackoverflow.com/questions/45614337/what-causes-childnodes-to-return-text-instead-of-div
https://stackoverflow.com/questions/21357004/what-are-html-dom-text-elements
将文档看成Element对象树,忽视部分文档,text和comment文档(回车,空格,以及注释节点)
Element的children属性
第一部分是Element(通用基类)的children属性,类似于childNodes属于一个NodeList对象,不同的是children列表只包含Element对象,text和Comment节点没有children属性,任何的Element的parentNode(父节点)都是另一个Element,或者是树根的Document节点
Element的属性
firstElementChild,lastElementChild
类似firstChild和lastChild,只代表子Element
nextElementSibling,previousElementSibling
类似的nextSibling和previousSibling 代表兄弟节点
childElementCount
子元素的数量,和children。length的值相等
页面布局常遇见需要子元素完全居中显示,因此在此总结常见方案。
让黄色块在父容器(灰色块)中水平、垂直居中
黄色方块:宽高100px
灰色方块:宽高400px
下列方法1到方法7,变换前后的图像都是上面2张图(图标注了长度)
默认代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>完全居中</title>
<style>
.parent {
width: 400px;
height: 400px;
background-color: gray;
}
.children {
width: 100px;
height: 100px;
background-color: yellow;
}
</style>
</head>
<body>
<div class="parent">
<div class="children"></div>
</div>
</body>
</html>
下列方法1到方法7,里css代码都是基于上方默认代码
.parent {
/* 弹性布局 */
display: flex;
/* 主轴对齐方式:居中 */
justify-content: center;
/* 侧轴对齐方式(单行):居中 */
align-items: center;
}
.parent {
/* 弹性布局 */
display: flex;
}
.children {
margin: auto;
}
.parent {
position: relative;
}
.children {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
}
分析过程:使用外边距推中间黄色盒子,距离顶端(400-100)/2= 150 px
.parent {
/* 因为margin塌陷问题(子容器的外边距会被父容器用掉):此处需要显示指明父容器溢出方式 */
overflow: auto;
}
.children {
/* 上下150px,左右自动 */
margin: 150px auto;
}
这种方法使用CSS的transform和position属性。这种方法在某些情况下可能比Flexbox或Grid更简单:
.children {
position: relative;
left: 50%;
top: 50%;
/*
transform:2/3D变换关键字
translate是2D位移关键字
x与y都-50%,是因为坐标原点默认是左上角,在left与top移动50%后,黄色盒子处于中心点右下方,因此需要让黄色盒子xy都减去一半
*/
transform: translate(-50%, -50%);
}
CSS Grid也是一个强大的布局工具,它也可以用来实现子元素的水平和垂直居中。以下是一个例子:
.parent {
display: grid;
justify-items: center;/* 水平居中 */
align-items: center;/* 垂直居中 */
}
通过display设置为table-cell,然后使用text-align 、vertical-align实现水平居中和垂直居中。
.parent {
display: table-cell;
text-align: center;
vertical-align: middle;
}
.children {
display: inline-block;
}
若父元素宽高确定,子元素宽高不确定,用
将children设为行内元素,运用text-align即可实现水平居中,再借助vertical-align在垂直方向上达到居中效果。最后,将children的行高设定为默认值(line-height具有可继承性,需单独调整子元素的行高)。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>完全居中</title>
<style>
.parent {
width: 400px;
height: 400px;
background-color: gray;
text-align: center;
line-height: 400px;
}
.children {
background-color: yellow;
display: inline-block;
vertical-align: middle;
line-height: initial;
}
</style>
</head>
<body>
<div class="parent">
<div class="children">child</div>
</div>
</body>
</html>
初始
居中
更多精彩,请关注微信公众号:码圈小橙子
*请认真填写需求信息,我们会在24小时内与您取得联系。