Comments (4)
Could you give me an example of what you mean? I don’t think this (if I understand you correctly) is possible solely with knowledge of the CSS without knowing the DOM.
from php-css-parser.
I think you have it right.
I was thinking of forcing the user to have a width definition on a root element. That way, the parser should assume 100% is the root element.
Example:
<div style="width:1005px">
<div id="sub1">
</div>
</div>
Let us make some assumptions based on a "reset.css". Margins and Paddings are defaulted at 0, but this first div must have a width. Now, assuming that there are no widths, all elements below must have 100% width.
If the root element has a 1px border, then 100% for the child divs would be 1003px.
I'm trying to find the best possible solution for converting a fully styled webpage to PDF, but the converters out there lack in CSS parsing so I was thinking of mashing your library against a PDF generator, with PHP.
Hopefully I make sense.
Regards
from php-css-parser.
So you could use PHP’s DOMDocument::loadHTMLFile
to construct a DOM from your HTML. Unfortunately, there is no CSSOM in PHP. And you’re missing the glue to combine that DOM with a PHP-CSS-Parser Document
object. For this to work there are two important parts missing:
- A way of matching
DeclarationBlock
objects to DOM elements using their selectors. Selectors currently aren’t in any way parsed. So you’d need to be able to adopt the parser to understand that it’s parsing an element selector, class selector, id selector, and how the selectors are nested. You’d then need to be able to check whether a specific DOM nodes matches a selector or not. - The ability to apply cascading rules to DOM elements to have all calculated styles on every element. This includes converting relative units like em and % to their absolute counterparts by taking the parent element‘s calculated style value.
As a result of this, you’d have a tree of DOM nodes where each node has a complete set of calculated styles which you then could use to draw your PDF. You could choose to only apply certain styles like width, height, font-size and so forth or go for a complete implementation.
If you decide to go forward with this plan, I’d be very interested to incorporate the results of the selector parsing back into my code as that has been on my to do list for a long time. I wish you the best of luck with this endeavour.
from php-css-parser.
There is actually a DOM query library that takes CSS selectors. Maybe you could use that somehow and skip the step where you improve PHP-CSS-Parser’s selector parsing.
from php-css-parser.
Related Issues (20)
- Strict parsing mode exception with whitespace-only CSS
- @media block gives syntax error HOT 2
- issue with var on multiline HOT 1
- Selectors inside :not() not correctly parsed HOT 2
- Add a Dependabot configuration HOT 1
- @layer support
- GitHub releases page not up to date with tags (missing 8.4.0) HOT 1
- Update the GitHub runners to the latest Ubuntu LTS version HOT 1
- Add tests with SimonSapin/css-parsing-tests HOT 1
- Expressions are not being parsed HOT 3
- How to get comment HOT 1
- Fix undefined `$oRule` in `DeclarationBlock`
- Fix undefined `$oVal` in `CalcFunction`
- Add proper setters and getters to `OutputFormat`
- Make all `in_array` call strict
- Fix the `Size` constructor arguments in `DeclarationBlock`
- Can't composer update on Linux Ubuntu corrupt error HOT 6
- Allow rgb(R G B / A) notation
- Is there a way to render block wrapper with @media
- Add support for new viewport unit in Size class
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from php-css-parser.