Html_Css问答集(10)

67、为什么多个<li>标签在没有<ul>或<ol>包裹时也能展现?

(1)浏览器的容错机制:

现代浏览器有很强的容错能力,即使HTML代码有错误或不符合规范,浏览器仍会尽力尝试渲染页面内容。即使没有使用<ul>或<ol>标签包裹,浏览器也会显示<li>标签中的内容。

(2)默认样式:

在大多数浏览器中,<li>元素会自动带有某些默认样式,如前面带有一个圆点或数字。即使这些<li>不在列表标签内,这些默认样式依然会应用,所以看起来似乎"正常"渲染了。

推荐:最好写在ul或ol中,否则有时出了问题找不到原因。

按照规范写有下面好处:

语义化:

使用<ul>和<ol>标签可以清楚地表明这些<li>项是一个整体,是有序或无序的一组项目。这不仅让HTML代码更易读,而且让搜索引擎和辅助技术(如屏幕阅读器)能够更好地理解和解析页面内容。

结构正确:

未被<ul>或<ol>包裹的<li>标签在HTML规范中是无效的,不符合W3C的标准。这会导致验证工具报错,并可能引起其他HTML解析问题。

样式一致性:

使用列表标签确保浏览器对列表项应用默认样式,并且你可以更方便地通过CSS进行一致的样式控制。

68、在vscode输入代码后,没有提示,无法用tab来自动完成,咋办?

安装插件来帮助完成。

H5的有些新标签在vscode中并不提示,哪怕你设置了识别为html,它仍然不提示。可以借助下面两个插件:

HTML CSS Support:

这个扩展提供更基础的语法高亮、代码提示、代码补全等功能,它对 HTML 和 CSS 代码整体的语法支持更全面。

IntelliSense for CSS class names in HTML:

这个扩展专门针对 HTML 代码中 CSS 类名的提示,它能更智能地识别你当前代码中的 CSS 类名,并提供相应的提示。

这两个插件不会相互冲突。安装后最后重启一下vscode。

安装后,有些仍然不提示,比如progress,但它提示为prog,按tab后会补全。比如datalist,只有datal,说明vscode本身没有,可能插件中有简写的片段,将就用吧:(。

69、datails与summary是怎么配合的?

实际上detail是一个容器(没有内容),它可将里面内容进行展开与折叠。容器里面的内容就是summary,它表示标题,鼠标点击时就会展开(再点则折叠),显示summary后面的内容。

因此一般用于问答式解释,用detail容纳一个问题,summary来说明问题的标题,后面的跟的就是回答的内容。

<details>

<summary>前端是指什么?</summary>

<p>通常指在网页上呈现的东西</p>

</details>

<details>

<summary>前端是指什么?</summary>

<span>这是内容</span>

</details>

一般一个问题一个details,这样方便一个问题对应一个答案。

注意:details与summary都是块级元素。

上面p更远离summary,因为<p> 是一个块级元素(block-level element),它会在其前后生成换行符,并且浏览器会在其前后添加默认的垂直间距(开发者工具查看)。

而span更靠近summary,因为<span> 是一个内联元素(inline element),它不会生成换行符,也没有默认的垂直间距。

70、如何理解optimum对meter的变化?

optimum 属性用于指定 <meter> 元素的最优值。它与 min、max、low 和 high 属性一起使用,来定义不同的值范围。

<meter> 元素根据值呈现三种色:

绿色:表示最优范围

黄色:表示警告范围

红色:表示危险范围

optimum所处的区间不同,根据value值默认呈现不同的值。

(1)value的值在optimum的区间,则为绿色。

<meter value="19" max="100" min="0" low="20" high="80" optimum="10" ></meter>

optimum为10,即所处的区间为[0,20],注意:一定是包含两个端点。

value为19,在[0,20]内,则为绿色.

(2)value的值在optimum的相邻区间,则为黄色。

<meter value="29" max="100" min="0" low="20" high="80" optimum="10" ></meter>

optimum为10,即所处的区间为[0,20],相邻的区间为(20,80],注意一定包含远端端点80。

value为29,在(20,80]内,则为黄色.

(2)value的值在optimum的相隔区间,则为红色。

<meter value="89" max="100" min="0" low="20" high="80" optimum="10" ></meter>

optimum为10,即所处的区间为[0,20],相隔的区间为(80,100],注意一定包含最远端端点100。

value为89,在(80,100]内,则为红色.

举例

<meter value="89" max="100" min="0" low="20" high="80" optimum="50" ></meter>

optimum为50,最优区间[20,80],value在这范围则为绿色(value=30);

相邻区间为(0,19),value在此范围为黄色(注意0值没有,无法呈现颜色,所以不含0);

另一个相邻区间为(81,100]也为黄色。

71、mark与strong、em都有强调,有什么区别?

简言之:

<mark> 用于突出显示"重要"这个词,表示这是需要用户特别注意的"内容"。比如考试内容填空。

<strong> 用于强调"记住"这个词,表示这个信息很重要。"语气"强调。

<em> 用于强调"我非常高兴",表示带有喜悦的情绪。"情绪"强调。

H5 中的 <mark>, <strong>, <em> 标签都用于强调文本,但它们各自侧重不同的方面:

(1)<mark> 标签:

强调重点内容:

<mark> 主要用于突出显示文本中的重要部分,通常用来标记需要用户注意的关键词或重要信息。

视觉效果:

<mark> 默认会用黄色背景色来标记文本,这在视觉上可以清晰地突出显示被标记的文字。

语义:

<mark> 表示文本是需要用户注意的重点内容,而不是强调语气或情绪。

(2)<strong> 标签:

强调语气:

<strong> 用于强调文本的语气,表示文本内容比周围内容更重要。

视觉效果:

<strong> 通常会以加粗的方式显示文本,以强调其重要性。

语义:

<strong> 表示文本内容在语义上比周围内容更重要,但并不一定意味着用户需要格外注意。

(3)<em> 标签:

强调情绪:

<em> 用于强调文本的情绪或语气,表示文本内容带有特殊的感情色彩。

视觉效果:

<em> 通常会以斜体的方式显示文本,以突出其情绪或语气。

语义:

<em> 表示文本内容在语气或情绪上与周围内容不同,但并不一定意味着其重要性更高。

<p>这是一个非常<mark>重要</mark>的段落,你必须<strong style="color: red;">记住</strong>这个信息!</p>

<p><em>我非常高兴</em>能看到你!</p>

理解上面代码:

<mark> 用于突出显示"重要"这个词,表示这是需要用户特别注意的内容。

<strong> 用于强调"记住"这个词,表示这个信息很重要。

<em> 用于强调"我非常高兴",表示带有喜悦的情绪。

72、ruby的布局是怎么样的?

布局很复杂,我放弃了。有精力的可以弄弄。

ruby用于模拟东亚文字排版中常见的注音方式。且文字先写拼音后写。见鬼的是vscode又不提示这个关键词。

<ruby>

<span>魑魅魍魉</span>

<rt>chī mèi wǎng liǎng</rt>

</ruby>

注意:拼音是写在下面,但网页上呈现的是拼音在上面,看了几家拼音对齐方式,似乎没有完美方案。

另外在它们后面加<br/>有不同的效果,很是复杂。

html 复制代码
        <ruby>
            <span>魑</span><br /><br /><br />
            <rt>chī</rt><br /><br /><br /><br />
        </ruby>  

(1)当span后面增加一个<br>无效果,但若有两个br,则会在整个"ruby"效果的后面增加一行,三个则增加两行;

(2)在rt后面增加一个br无效果,增加两个br则在整个"ruby"的前面增加一行,若三个则增加两行;

(3)span后面增加n个br行时,则整体后面增加(n-1)个行,而整体ruby前面的行与rt后面的br有关,若rt后br行与span相等或小于span后面br个数,前面无行,当多于一个br时则前面整体增加一行。

整体前面的行数(span后br个数为3,小于,rt后面的br个数4,多了一个br),因此增加一个行。而整体后面的行只与span有关,为n-1,即3-1=2行,整体后面会增加2个行。

若是下面,更为复杂:

html 复制代码
        <ruby>
          <span>魑</span>a<br />b<br />c<br />d
          <rt>chī</rt>e<br />f<br />g<br />h<br />j
        </ruby>  

再进化一化:

html 复制代码
        <ruby>
          <span>魑</span>aaaaaaaaaaa<br />bbbbbbb<br />c<br />d
          <rt>chī</rt>e<br />f<br />g<br />h<br />jjjjjjjjjjjjjj
           <span>魑魅魍魉</span>
          <rt>chī mèi wǎng liǎng</rt>
        </ruby>    

估计解释起来更为费劲了。

简单点:ruby里面的是单独的规则环境不要弄了。

解释:

在<ruby>标签内部,<br>标签的行为受到<ruby>的内部布局规则的影响。在<ruby>标签内,<br>标签在<span>或<rt>后面插入的换行不会立即影响外部布局,因为<ruby>标签的内部布局是封闭的。当使用多个<br>标签时,它们开始累积换行效果,但这种效果只在<ruby>标签的内部或外部累积,具体取决于<br>标签是在<span>还是<rt>后面。

个人感觉,里面有浮动意思。

73、在h5中,为什么patter必须与required配合,如果为空时,patter就不起作用了

这是因为功能细化的原因,各适用范围不同。

required确保用户必须填写该字段。如果用户没有填写被标记为required的字段,浏览器会阻止表单的提交,并显示一个默认的错误消息,提示用户该字段是必填的。

patter只对输入的数据进行验证。

有些是可选项,只有输入时才验证,比如评论(若有内容则需要过滤),比如个人兴趣,则需要限制。等等。

因此,单独有pattern而无reqired时,那么pattern属性实际上不会被触发,因为没有任何输入可以与正则表达式进行匹配。在这种情况下,pattern属性不会起作用,因为它没有输入数据可以验证。

这样更容易细化功能,适用各种不同场景。

74、总结一下input的type用法?

(1)text

描述: 默认类型,用于单行文本输入。

应用场景 用户名、地址、搜索框等。

注意点: 默认情况下,输入的文本不会限制格式。

<input type="text" id="username" name="username">

(2)password

描述: 用于输入密码,输入的文本会被隐藏(通常显示为圆点或星号)。

应用场景: 登录表单中的密码输入。

注意点: 安全性考虑,敏感信息应通过HTTPS传输。

<input type="password" id="password" name="password">

(3)email

描述: 用于输入电子邮件地址,支持基本的格式验证。

应用场景: 注册或联系表单中的电子邮件输入。

注意点: 浏览器会进行基本的格式检查,但不保证输入的电子邮件地址有效。

<input type="email" id="email" name="email">

(4)number

描述: 用于输入数字,支持输入数字和一些特殊字符(如"+"、"-"、"."、",")。

应用场景: 年龄、数量等数字输入。

注意点: 可以设置最小值、最大值和步长。

<input type="number" id="quantity" name="quantity" min="1" max="100" step="1">

(5)date

描述: 用于输入日期,通常显示为一个日期选择器。

应用场景: 出生日期、预约日期等。

注意点: 支持的格式可能因浏览器而异。

<input type="date" id="birthday" name="birthday">

(6)checkbox

描述: 用于创建复选框,用户可以选择多个选项。

应用场景: 多选项选择,如兴趣爱好、服务条款同意等。

注意点: 每个复选框都是一个独立的<input>元素。

<input type="checkbox" id="terms" name="terms" value="accepted">

<label for="terms">我同意服务条款</label>

(7)radio

描述: 用于创建单选按钮,用户只能选择一组选项中的一个。

应用场景: 性别选择、支付方式等。

注意点: 同一组中的单选按钮必须具有相同的name属性。

<input type="radio" id="male" name="gender" value="male">

<label for="male">男</label>

<input type="radio" id="female" name="gender" value="female">

<label for="female">女</label>

(8)file

描述: 用于上传文件。

应用场景: 图片上传、文档上传等。

注意点: 应确保文件上传的安全性,限制文件类型和大小。

<input type="file" id="file" name="file">

当然还有time,week,datetime,url,color等等,真是一多功能的输入框啊。

75、为什么网页传输当中要使用URL编码?

简言之:URL 编码让网页数据安全可靠地旅行。

URL 编码是网页应用程序中不可或缺的一部分,它确保了数据能够安全、可靠地从浏览器传递到服务器。它将 URL 中的特殊字符转换为安全的、可移植的格式,避免数据在传输过程中出现错误或丢失。

(1)为什么需要 URL 编码?

URL 字符限制:

URL 中只能包含特定字符,例如字母、数字、连字符、下划线等。其他字符,如空格、特殊符号、非 ASCII 字符,会导致 URL 格式错误,无法正常解析。

数据一致性:

不同浏览器和操作系统可能使用不同的字符编码,导致数据在传输过程中出现乱码。

数据隔离:

URL 编码将表单数据与 URL 地址分开,避免数据混淆。每个数据项都以 "键=值" 的形式进行编码,方便服务器端解析。

(2)URL 编码的规则:

URL 编码使用 % 符号加两位十六进制数字来表示特殊字符。例如:

空格:%20

加号:%2B

等号:%3D

斜杠:%2F

冒号:%3A

(3)URL 编码的应用:

表单提交:

当用户提交表单时,浏览器会将数据编码成 URL 格式,然后发送到服务器。

URL 参数:

URL 中包含的参数通常也需要进行 URL 编码,例如:http://example.com?name=John Doe\&age=30

API 请求:

当应用程序发送 API 请求时,请求中的参数也需要进行 URL 编码。

(4)URL 编码的工具:

浏览器:

大多数浏览器都支持 URL 编码,你可以在地址栏中输入需要编码的文本,然后查看编码后的结果。

在线工具:

网上有很多在线工具可以进行 URL 编码和解码,例如:https://www.urlencoder.net/

编程语言:

各种编程语言都提供 URL 编码和解码的函数。

(5)URL 解码:

服务器端接收到 URL 编码后的数据后,需要进行解码才能读取数据。解码过程与编码过程相反,使用 % 符号加两位十六进制数字来还原原始字符。

(6)URL 编码的总结:

URL 编码是 Web 应用程序中不可或缺的一部分,它保证了数据在传输过程中的安全、可靠和一致性。理解 URL 编码的原理和应用能够帮助你更好地理解网页应用程序的工作机制,并且能够更好地处理网页数据。

76、video中preload,auto与metadata加载的的长度有什么规律?

auto和metadata的区别在于加载内容的多少:

preload="auto":

浏览器会尽可能多地预加载视频数据,包括视频文件本身和视频的元数据(例如时长、分辨率等)。这可以使视频更快地开始播放,但会消耗更多带宽和内存。

preload="metadata":

浏览器只预加载视频的元数据,而不加载视频文件本身。这意味着用户点击播放时,视频需要从头开始加载。但这可以节省带宽和内存,对于网络连接较差的用户比较友好。

加载长度的规律:

preload="auto" 的加载长度取决于浏览器和网络连接,但一般情况下会尽可能地加载更多视频数据。

preload="metadata" 的加载长度仅限于视频的元数据,通常包含以下信息:

视频的时长

视频的分辨率

视频的格式

视频的编码

视频的标题

视频的描述

视频的作者

总结:

preload="auto" 倾向于更快的播放体验,但消耗更多资源。

preload="metadata" 倾向于更小的资源消耗,但播放开始时需要等待加载视频文件。

建议:

如果你的视频较短,或者用户网络连接良好,建议使用 preload="auto"。

如果你的视频较长,或者用户网络连接较差,建议使用 preload="metadata"。

注意:

preload 属性的默认值为 auto。

在某些浏览器中,即使 preload="metadata",浏览器也可能预加载部分视频数据。

如果设置了autoplay则忽略prepaly的auto,因为autoplay 属性优先级高于 preload 属性。

77、contenteditable一般用在哪些元素身上?

在HTML5中,contenteditable属性可以应用在以下几种元素上:

<div>、<span>、<p>、<li>、<td>、<th>、<a>、<header>、<footer>、<section>等,以便在页面布局中提供更丰富的可编辑内容。

以下元素默认不支持contenteditable属性:<audio>, <embed>, <iframe>, <img>, <input>, <label>, <textarea>, <video>等。

这些元素不能直接设置为可编辑,但可以通过间接方法(例如,将它们放置在一个contenteditable的容器中)来允许编辑。

<div contenteditable="true">

<p>这是一段可以编辑的文本。</p>

<img src="image.jpg" alt="可编辑区域内的图片">

<p>这是图片下面的另一段可以编辑的文本。</p>

</div>

contenteditable属性也可以设置为true、false或inherit,以控制元素的编辑状态:

true:元素及其子元素可以被编辑。

false:元素及其子元素不可被编辑。

inherit:元素继承父元素的contenteditable属性值。

使用contenteditable时,应考虑到用户体验和网页的可用性,因为过度使用可能会导致页面行为变得不直观或难以控制。

78、对于"隐藏"功能有哪些,区别是?

(1)display:none:

该元素会被完全从文档布局中移除,不占用任何空间。它就像是元素不存在一样,不仅不可见,而且不能通过DOM访问,也不会响应任何事件(如点击事件)。

使用 display:none 的元素不会被渲染,并且它的子元素也会被隐藏。

(2)visibility:hidden:

元素虽然不可见,但它仍然保留在文档布局中,占据原本的空间。它不会被渲染出来,但可以通过DOM访问,并且仍然可以响应事件。

(3)overflow:hidden:

这个属性与隐藏元素的内容有关,而不是元素本身。设置 overflow:hidden 的元素会限制其内容只能在元素的指定区域内显示。如果内容超出了元素的边界,它将被裁剪,不会显示在元素的外面。

(4)hidden

元素不可见,不占布局空间(与 display:none 类似),仍然可以通过DOM访问,并且可以通过JavaScript修改其 hidden 属性来显示或隐藏元素。

使用HTML属性 hidden 可以直接在HTML标签上控制元素的可见性,而不需要在CSS中添加额外的规则。

它与display:none一样的效果,唯一不同的是hidden不可继承,而前者可以继承生效。

79、简单说一下伪类与伪元素选择器的区别?

伪类关注的是元素的外部状态,例如用户的交互(悬停、聚焦)或元素在文档中的位置(第一个子元素、奇数或偶数子元素)。

html 复制代码
        a:hover {
            color: red;
        }        
        p:first-child {
            font-weight: bold;
        }

伪元素关注的是元素的内部内容,并且可以将内部内容的某部分视为一个独立的元素进行样式化,例如将段落的第一个字母或第一行作为一个单独的元素来处理。

html 复制代码
        p::first-line {
            font-style: italic;
            background-color: yellow;
        }
        ::selection {
            background-color: lightblue;
            color: darkblue;
        }

注意:

::selection 是一个全局伪元素,它可以作用于文档中任何被用户选中的文本,不论这些文本属于哪个元素。因此,::selection 不需要与任何具体的 HTML 元素结合使用,它的样式将应用于任何选中文本。

对于伪类,通常需要与特定的元素选择器结合使用。伪类不能单独存在,它们需要依附于某个元素选择器来指定样式应用于哪个元素的状态。

80、复习一下目标伪类选择器?

目标伪类(:target)是 CSS 中用于选择被 URL 的哈希部分(即 URL 中 # 后面的部分)所指定的元素的一种伪类。它的本质是允许开发者针对页面中的特定元素应用样式,当页面滚动或跳转到该元素时,这个元素会成为"目标"。

html 复制代码
        <style>
            :target {
                background-color: yellow;
                padding: 10px;
                outline: none;
            }
        </style>
        '-------------------------
        <nav>
            <ul>
                <li><a href="#section1">Section 1</a></li>
                <li><a href="#section2">Section 2</a></li>
                <li><a href="#section3">Section 3</a></li>
            </ul>
        </nav>
        <section id="section1">Section 1 Content</section>
        <section id="section2">Section 2 Content</section>
        <section id="section3">Section 3 Content</section>

当用户点击指向 #section2 的链接时,页面会滚动到 <section id="section2"> 元素,并且该元素的背景颜色会变为黄色,同时增加内边距,从而突出显示。

本质上在于响应页面内部的锚点链接,因此可以利用这一点来为该元素添加特殊的样式,比如突出显示。

注意:

:target可以看作是具有全局效果的选择器,因为它能够针对页面中的任何元素(只要元素具有一个唯一的 id),而不是局限于某个特定的元素或元素集合。也可以结合id,类,属性等使用。

html 复制代码
            #section1:target {
                background-color: yellow;
            }
            .content:target {
                border: 2px solid red;
            }
            [data-section="intro"]:target {
                color: green;
            }

不管怎样:

仅限当前页面:

:target 伪类仅在当前页面内部跳转时工作,它不会在新打开的页面或者通过 <a> 标签的 href 属性跳转到不同 URL 时生效。

锚点跳转:

只有通过页面内部的锚点链接(即链接带有 # 符号后面跟有元素 ID 的 URL)进行跳转时,:target 伪类才会激活。

ID 必须唯一:

:target 伪类要生效,目标元素的 ID 必须是唯一的,因为 URL 的哈希部分是用来唯一标识页面中的元素。

(若有多个同名的id,目标选择器可能生效到第一个同名的id上)

即时生效:

当页面加载或者用户通过点击链接跳转到页面中的某个元素时,:target 伪类的样式会立即应用。

相关推荐
轻口味12 分钟前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami14 分钟前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
吃杠碰小鸡1 小时前
lodash常用函数
前端·javascript
emoji1111111 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼1 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250031 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235951 小时前
web复习(三)
前端
机器视觉李小白1 小时前
使用 HTML 和 CSS 实现绚丽的节日烟花效果
css·html·烟花·节日·节日祝福
AiFlutter1 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter