第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Chrome 中內(nèi)聯(lián)元素的插入符位置和選擇高度

Chrome 中內(nèi)聯(lián)元素的插入符位置和選擇高度

30秒到達(dá)戰(zhàn)場 2024-01-22 20:03:02
我正在考慮使用Slate或ProseMirror構(gòu)建一個編輯器,并在使用內(nèi)聯(lián)元素時(shí)在插入符號位置和選擇區(qū)域周圍看到 Chrome 的一些奇怪行為。問題 1 如下圖所示。當(dāng)文本光標(biāo)位置位于“f”后面時(shí),插入符號顯示在圖像頂部。問題 2 在第二張圖片中 - 選擇文本會顯示一個與內(nèi)聯(lián)元素一樣高的突出顯示區(qū)域。有什么方法可以控制這種行為,而是讓插入符號顯示在文本位置,并僅突出顯示文本周圍的空間(即使內(nèi)聯(lián)圖像使行高更大)我想模仿 Firefox 的行為:示例圖像是使用此處的 ProseMirror 演示生成的:https ://prosemirror.net/examples/basic/使用JSBin的最小示例(感謝@Kaiido):<div contenteditable>Test text<img src="https://upload.wikimedia.org/wikipedia/en/9/9b/Yoda_Empire_Strikes_Back.png">Testing</div>不確定這在其他操作系統(tǒng)上的表現(xiàn)如何,但我使用的是 macOS Catalina。
查看完整描述

3 回答

?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個贊

您可以使用 Flexbox 解決選擇問題。我最初嘗試使用,align-items: flex-end但我得到了一些奇怪的箭頭鍵行為。align-items: baseline目前看來有效。


圖像問題很奇怪。我注意到 Chrome 對 SVG 元素的處理方式與 IMG 元素不同。截至目前,最新版本的 Chrome 在跳過 IMG 之前會“等待”,但允許用戶像任何其他字符一樣跳過 SVG(左箭頭跳過最接近 svg 的字符)。這可能是由底層默認(rèn)樣式引起的,但我不知道。


我正要發(fā)布我的發(fā)現(xiàn),但我意識到 Firefox 的工作方式不一樣。當(dāng)使用 SVG 和/或 Flexbox 時(shí),F(xiàn)irefox 有一些非常奇怪的箭頭鍵行為。光標(biāo)會移至圖像上方,但僅當(dāng)按向右箭頭鍵時(shí)才會出現(xiàn)。


然而,F(xiàn)irefox 可以很好地處理普通的 IMG 元素。


長話短說,您將必須根據(jù)瀏覽器渲染不同的圖像元素。


// chrome contenteditable ads spaces between spans.

// firefox does not, so you have to add them manually.

if (navigator.userAgent.indexOf("Firefox") > 0) {

  Array.from(document.querySelectorAll('#editable span')).forEach(el => {

    el.innerHTML += " "

  })

}

.flexit {

  display: flex;

  align-items: baseline;

  flex-wrap: wrap;

}


span {

 display: inline-block;

 white-space: pre;

}


.img-wrapper, .img-wrapper + span {

display: inline;

}

<!DOCTYPE html>

<html>


<head>

  <meta charset="utf-8">

  <meta name="viewport" content="width=device-width">

  <title>JS Bin</title>

</head>


<body>

  <h1>chrome</h1>

  <div contenteditable="true" class="flexit">

    <span>test</span><svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">       

  <image href="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png" height="200" width="200"/>

    </svg><span>Here</span><span>is</span><span>a</span><span>longer</span><span>sentence.</span><span>Notice</span><span>I</span><span>wrapped</span><span>each</span><span>word</span><span>in</span><span>a</span><span>span.</span><span>This</span><span>makes</span><span>the</span><span>text</span><span>appear</span><span>like</span><span>it</span><span>is</span><span>inline.</span>

  </div>


  <h1>firefox</h1>

  <div contenteditable="true" id="editable">

    <span>test</span><span class="img-wrapper"><img src="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png" height="200" width="200" /></span><span>test</span><span>Here</span><span>is</span><span>a</span><span>longer</span><span>sentence.</span><span>Notice</span><span>I</span><span>wrapped</span><span>each</span><span>word</span><span>in</span><span>a</span><span>span.</span><span>This</span><span>makes</span><span>the</span><span>text</span><span>appear</span><span>like</span><span>it</span><span>is</span><span>inline.</span>



  </div>

</body>


</html>

PS 很多編輯器我都使用默認(rèn)的全角圖像。

編輯:我剛剛意識到我的 Firefox 解決方案似乎也適用于最新的 Chrome。我認(rèn)為這是可行的,因?yàn)槲覍⑽谋竟?jié)點(diǎn)包裝在 SPAN 元素中。SVG 元素在 Chrome 中的工作方式仍然不同,但在 SPAN 中換行文本似乎解決了大部分問題。


查看完整回答
反對 回復(fù) 2024-01-22
?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個贊

首先,不要像 JQuery 示例中所示操作 ProseMirror DOM。事實(shí)上,您很可能會遇到 DOM 或內(nèi)容問題。ProseMirror 使用自己的 DOM 節(jié)點(diǎn)和標(biāo)記架構(gòu)。如果您想操作 ProseMirror DOM 或添加插件,請查看標(biāo)記、插件和節(jié)點(diǎn) API。我附上了一個簡單的文本對齊標(biāo)記代碼示例。旁注,Grammarly 和其他人沒有 ProseMirror 插件的原因是 DOM 方法/模型。我應(yīng)該補(bǔ)充一點(diǎn),ProseMirror 非常好,但說實(shí)話,它更像是一個高級開發(fā)人員解決方案。

除此之外,好消息是你有一個純粹的 CSS 問題。ProseMirror 會刪除所有類并重置 DOM / CSS,因此如果您導(dǎo)入文檔或剪切并粘貼所有/大多數(shù)類,您的類將會消失。

解決這個問題的最簡單方法是將編輯器包裝在 div 中,并為該 div 分配一個類,然后向該類添加樣式和子樣式。包裝它的原因是像 img、p、h 等 css 選擇器僅適用于編輯器類內(nèi)部的標(biāo)簽。如果沒有它,你最終會出現(xiàn)明顯的 CSS 沖突。

CSS

  1. 不要將 Flexbox 用于內(nèi)聯(lián)圖像,因?yàn)?Flexbox 不是網(wǎng)格系統(tǒng)。事實(shí)上,如果我記得你不能內(nèi)聯(lián)彈性容器的直接子級。

  2. p 標(biāo)簽和 img 上的內(nèi)聯(lián)不會自動換行,您最終會遇到上面列出的問題。

  3. 如果您想真正包裝并刪除光標(biāo)問題,那么您需要使用浮點(diǎn)數(shù),例如float: left;(推薦方法)

  4. 添加小或大的填充和邊框以幫助折疊邊緣,還有助于分離圖像和文本

  5. 您遇到的光標(biāo)問題是因?yàn)楫?dāng)您在圖像塊內(nèi)時(shí),它垂直與頂部對齊,您可以使用vertical-align: baseline;但不使用浮動來修復(fù)該問題,您仍然會有一個與圖像高度而不是文本高度匹配的光標(biāo)。另外,如果不使用浮動,光標(biāo)將被拉長,因?yàn)樾懈邔?shí)際上與圖像的高度相同。藍(lán)色只是選擇器,您也可以使用 CSS 進(jìn)行更改。

<html>

    <div class="editor">

        <!--        <editor></editor>-->

    </div>

</html>


<style>

    .editor {

        position: relative;

        display: block;

        padding: 10px;

    }


    .editor p {

        font-weight: 400;

        font-size: 1rem;

        font-family: Roboto, Arial, serif;

        color: #777777;

        display: inline;

        vertical-align: baseline;

    }


    .editor img {

        width: 50px;

        float: left;

        padding: 20px;

    }


</style>


節(jié)點(diǎn)擴(kuò)展示例


可添加為工具欄的文本對齊節(jié)點(diǎn)擴(kuò)展示例。更長的帖子,但即使你確實(shí)為圖像創(chuàng)建了一個節(jié)點(diǎn)/插件,你也必須處理它渲染的方式,即 base64 與 url 等。順便說一句,這對于他們這樣做的原因非常有意義,但只需添加尋求 SEO 等的開發(fā)人員的復(fù)雜性


export default class Paragraph extends Node {

    get name() {

        return 'paragraph';

    }


    get defaultOptions() {

        return {

            textAlign: ['left', 'center', 'right'],

        }

    }


    inputRules({ type }) {

        return [

            markInputRule(/(?:\*\*|__)([^*_]+)(?:\*\*|__)$/, type),

        ]

    }


    get schema() {

        return {

            attrs: {

                textAlign: {

                    default: 'left'

                }

            },

            content: 'inline*',

            group: 'block',

            draggable: false,

            inclusive: false,

            defining : true,

            parseDOM: [

                {

                    tag: 'p',

                    style: 'text-align',

                    getAttrs: value => value

                }

            ],


            toDOM: (node) => [ 'p', {

                style: 'text-align:' + node.attrs.textAlign,

                class: `type--base type--std text-` + node.attrs.textAlign

            }, 0 ]


        };

    }


    commands ({ type }) {

        return (attrs) => updateMark(type, attrs)

    }

}


查看完整回答
反對 回復(fù) 2024-01-22
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個贊

我嘗試用 HTML 和 css 進(jìn)行一些修改。


<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width">

<title>JS Bin</title>

</head>

<body>


<div contenteditable><p class="new1" contenteditable>Hello</p><div contenteditable> 

<img src="https://upload.wikimedia.org/wikipedia/en/9/9b/Yoda_Empire_Strikes_Back.png"></div> 

<p class="new2">Testing</p>

</div>

</body>

</html>

//CSS


.new2{



font-size:30px;

margin-top:-35px;

margin-left:252px;

padding-left:79px;

}



img{

margin-left:75px;

padding-left:5px;

padding-right:5px;

margin-top:-300px;

}


.new1{

text-overflow:hidden;

padding-top:260px;

margin-bottom:-20px;

font-size:30px;

padding-right:10px;

}

這是jsfiddle https://jsfiddle.net/wtekxavm/1/


查看完整回答
反對 回復(fù) 2024-01-22
  • 3 回答
  • 0 關(guān)注
  • 218 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號